Rework
664
dotfiles_github/.config/Tabby/config.yaml
Normal file
@ -0,0 +1,664 @@
|
||||
terminal:
|
||||
searchOptions: {}
|
||||
colorScheme:
|
||||
name: Material
|
||||
foreground: '#eceff1'
|
||||
background: rgba(38, 50, 56, 1)
|
||||
selection: null
|
||||
cursor: '#FFCC00'
|
||||
colors:
|
||||
- '#000000'
|
||||
- '#D62341'
|
||||
- '#9ECE58'
|
||||
- '#FAED70'
|
||||
- '#396FE2'
|
||||
- '#BB80B3'
|
||||
- '#2DDAFD'
|
||||
- '#d0d0d0'
|
||||
- rgba(255, 255, 255, 0.2)
|
||||
- '#FF5370'
|
||||
- '#C3E88D'
|
||||
- '#FFCB6B'
|
||||
- '#82AAFF'
|
||||
- '#C792EA'
|
||||
- '#89DDFF'
|
||||
- '#ffffff'
|
||||
bell: visual
|
||||
fontSize: 14
|
||||
profile: local:binbash
|
||||
customColorSchemes: []
|
||||
warnOnMultilinePaste: false
|
||||
showBuiltinProfiles: false
|
||||
hotkeys:
|
||||
shell: {}
|
||||
profile:
|
||||
wsl-/-default-distro:
|
||||
- - Ctrl-N
|
||||
ssh:
|
||||
- - Ctrl-T
|
||||
close-tab:
|
||||
- - Ctrl-W
|
||||
new-tab: []
|
||||
toggle-window:
|
||||
- Ctrl-Space
|
||||
copy:
|
||||
- Ctrl-Shift-C
|
||||
paste:
|
||||
- Ctrl-Shift-V
|
||||
- Shift-Insert
|
||||
home:
|
||||
- Home
|
||||
end:
|
||||
- End
|
||||
previous-word:
|
||||
- Ctrl-Left
|
||||
next-word:
|
||||
- Ctrl-Right
|
||||
delete-previous-word:
|
||||
- Ctrl-Backspace
|
||||
delete-next-word:
|
||||
- Ctrl-Delete
|
||||
clear: []
|
||||
zoom-in:
|
||||
- Ctrl-=
|
||||
- Ctrl-Shift-=
|
||||
zoom-out:
|
||||
- Ctrl--
|
||||
- Ctrl-Shift--
|
||||
reset-zoom:
|
||||
- Ctrl-0
|
||||
ctrl-c:
|
||||
- Ctrl-C
|
||||
copy-current-path: []
|
||||
search:
|
||||
- Ctrl-Shift-F
|
||||
pane-focus-all:
|
||||
- Ctrl-Shift-I
|
||||
restart-telnet-session: []
|
||||
restart-ssh-session: []
|
||||
launch-winscp: []
|
||||
settings:
|
||||
- Ctrl-,
|
||||
new-window:
|
||||
- Ctrl-Shift-N
|
||||
profile-selector:
|
||||
- Ctrl-Shift-T
|
||||
toggle-fullscreen:
|
||||
- F11
|
||||
- Alt-Enter
|
||||
rename-tab:
|
||||
- Ctrl-Shift-R
|
||||
reopen-tab:
|
||||
- Ctrl-Shift-T
|
||||
toggle-last-tab: []
|
||||
next-tab:
|
||||
- Ctrl-Shift-Right
|
||||
- Ctrl-Tab
|
||||
previous-tab:
|
||||
- Ctrl-Shift-Left
|
||||
- Ctrl-Shift-Tab
|
||||
move-tab-left:
|
||||
- Ctrl-Shift-PageUp
|
||||
move-tab-right:
|
||||
- Ctrl-Shift-PageDown
|
||||
rearrange-panes:
|
||||
- Ctrl-Shift
|
||||
tab-1:
|
||||
- Alt-1
|
||||
tab-2:
|
||||
- Alt-2
|
||||
tab-3:
|
||||
- Alt-3
|
||||
tab-4:
|
||||
- Alt-4
|
||||
tab-5:
|
||||
- Alt-5
|
||||
tab-6:
|
||||
- Alt-6
|
||||
tab-7:
|
||||
- Alt-7
|
||||
tab-8:
|
||||
- Alt-8
|
||||
tab-9:
|
||||
- Alt-9
|
||||
tab-10:
|
||||
- Alt-0
|
||||
tab-11: []
|
||||
tab-12: []
|
||||
tab-13: []
|
||||
tab-14: []
|
||||
tab-15: []
|
||||
tab-16: []
|
||||
tab-17: []
|
||||
tab-18: []
|
||||
tab-19: []
|
||||
tab-20: []
|
||||
split-right:
|
||||
- Ctrl-Shift-E
|
||||
split-bottom:
|
||||
- Ctrl-Shift-D
|
||||
split-left: []
|
||||
split-top: []
|
||||
pane-maximize:
|
||||
- Ctrl-Alt-Enter
|
||||
pane-nav-up:
|
||||
- Ctrl-Alt-Up
|
||||
pane-nav-down:
|
||||
- Ctrl-Alt-Down
|
||||
pane-nav-left:
|
||||
- Ctrl-Alt-Left
|
||||
pane-nav-right:
|
||||
- Ctrl-Alt-Right
|
||||
pane-nav-previous:
|
||||
- Ctrl-Alt-[
|
||||
pane-nav-next:
|
||||
- Ctrl-Alt-]
|
||||
switch-profile:
|
||||
- Ctrl-Alt-T
|
||||
close-pane: []
|
||||
profile-selectors: {}
|
||||
select-all:
|
||||
- Ctrl-Shift-A
|
||||
serial:
|
||||
- Alt-K
|
||||
restart-serial-session: []
|
||||
serial: {}
|
||||
ssh: {}
|
||||
appearance:
|
||||
opacity: 0.71
|
||||
vibrancy: false
|
||||
enableWelcomeTab: false
|
||||
pluginBlacklist:
|
||||
- clickable-links
|
||||
- serial
|
||||
clickableLinks: {}
|
||||
qc:
|
||||
cmds:
|
||||
- name: Install Docker on New Host
|
||||
text: >-
|
||||
sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get -y
|
||||
install git docker docker-compose && sudo systemctl enable docker &&
|
||||
sudo usermod -aG docker $USER && logout
|
||||
appendCR: true
|
||||
group: null
|
||||
- name: Down, edit, up, logs
|
||||
text: >-
|
||||
docker-compose down && vim docker-compose.yml && docker-compose up -d &&
|
||||
docker-compose logs -f
|
||||
appendCR: true
|
||||
group: null
|
||||
- name: Build, run, logs
|
||||
text: ''
|
||||
appendCR: true
|
||||
group: null
|
||||
version: 3
|
||||
profiles:
|
||||
- icon: fas fa-desktop
|
||||
name: dev-env
|
||||
group: GreenFrog
|
||||
options:
|
||||
name: snapshot
|
||||
group: GreenFrog
|
||||
host: 147.182.192.153
|
||||
algorithms:
|
||||
hmac:
|
||||
- hmac-sha1
|
||||
- hmac-sha2-256
|
||||
- hmac-sha2-512
|
||||
kex:
|
||||
- curve25519-sha256
|
||||
- curve25519-sha256@libssh.org
|
||||
- diffie-hellman-group14-sha1
|
||||
- diffie-hellman-group14-sha256
|
||||
- diffie-hellman-group16-sha512
|
||||
- diffie-hellman-group18-sha512
|
||||
- ecdh-sha2-nistp256
|
||||
- ecdh-sha2-nistp384
|
||||
- ecdh-sha2-nistp521
|
||||
cipher:
|
||||
- aes128-ctr
|
||||
- aes128-gcm
|
||||
- aes128-gcm@openssh.com
|
||||
- aes192-ctr
|
||||
- aes256-ctr
|
||||
- aes256-gcm
|
||||
- aes256-gcm@openssh.com
|
||||
serverHostKey:
|
||||
- ecdsa-sha2-nistp256
|
||||
- ecdsa-sha2-nistp384
|
||||
- ecdsa-sha2-nistp521
|
||||
- ssh-ed25519
|
||||
- ssh-rsa
|
||||
privateKeys:
|
||||
- file:///home/joey/.ssh/id_rsa
|
||||
scripts: []
|
||||
forwardedPorts: []
|
||||
id: ssh:custom:dev-env:f34e8f4b-b52d-4e5f-9219-58f17cdde6bd
|
||||
type: ssh
|
||||
- icon: fas fa-desktop
|
||||
name: xtouch
|
||||
group: local
|
||||
options:
|
||||
name: pi
|
||||
group: local
|
||||
host: xtouch.local
|
||||
user: pi
|
||||
algorithms:
|
||||
hmac:
|
||||
- hmac-sha1
|
||||
- hmac-sha2-256
|
||||
- hmac-sha2-512
|
||||
kex:
|
||||
- curve25519-sha256
|
||||
- curve25519-sha256@libssh.org
|
||||
- diffie-hellman-group14-sha1
|
||||
- diffie-hellman-group14-sha256
|
||||
- diffie-hellman-group16-sha512
|
||||
- diffie-hellman-group18-sha512
|
||||
- ecdh-sha2-nistp256
|
||||
- ecdh-sha2-nistp384
|
||||
- ecdh-sha2-nistp521
|
||||
cipher:
|
||||
- aes128-ctr
|
||||
- aes128-gcm
|
||||
- aes128-gcm@openssh.com
|
||||
- aes192-ctr
|
||||
- aes256-ctr
|
||||
- aes256-gcm
|
||||
- aes256-gcm@openssh.com
|
||||
serverHostKey:
|
||||
- ecdsa-sha2-nistp256
|
||||
- ecdsa-sha2-nistp384
|
||||
- ecdsa-sha2-nistp521
|
||||
- ssh-ed25519
|
||||
- ssh-rsa
|
||||
privateKeys:
|
||||
- file:///home/joey/.ssh/id_rsa
|
||||
id: ssh:custom:pi-copy:80434af9-a66b-4529-b099-95b796f05161
|
||||
type: ssh
|
||||
- icon: fas fa-desktop
|
||||
name: DO matrix
|
||||
group: cloud
|
||||
options:
|
||||
name: digital ocean
|
||||
group: cloud
|
||||
host: 143.110.157.109
|
||||
algorithms:
|
||||
hmac:
|
||||
- hmac-sha1
|
||||
- hmac-sha2-256
|
||||
- hmac-sha2-512
|
||||
kex:
|
||||
- curve25519-sha256
|
||||
- curve25519-sha256@libssh.org
|
||||
- diffie-hellman-group14-sha1
|
||||
- diffie-hellman-group14-sha256
|
||||
- diffie-hellman-group16-sha512
|
||||
- diffie-hellman-group18-sha512
|
||||
- ecdh-sha2-nistp256
|
||||
- ecdh-sha2-nistp384
|
||||
- ecdh-sha2-nistp521
|
||||
cipher:
|
||||
- aes128-ctr
|
||||
- aes128-gcm
|
||||
- aes128-gcm@openssh.com
|
||||
- aes192-ctr
|
||||
- aes256-ctr
|
||||
- aes256-gcm
|
||||
- aes256-gcm@openssh.com
|
||||
serverHostKey:
|
||||
- ecdsa-sha2-nistp256
|
||||
- ecdsa-sha2-nistp384
|
||||
- ecdsa-sha2-nistp521
|
||||
- ssh-ed25519
|
||||
- ssh-rsa
|
||||
privateKeys:
|
||||
- file:///home/joey/.ssh/digital_ocean
|
||||
scripts: []
|
||||
forwardedPorts: []
|
||||
id: ssh:custom:digital-ocean-copy:890ce4d4-bca6-4bb8-b4fe-d90f73e915d0
|
||||
type: ssh
|
||||
- id: ssh:046860a7-21ec-41b1-a23f-5011c812a240
|
||||
icon: fas fa-desktop
|
||||
name: joey-server
|
||||
group: local
|
||||
options:
|
||||
name: joey-server
|
||||
group: local
|
||||
host: joey-server.local
|
||||
user: joey
|
||||
algorithms:
|
||||
hmac:
|
||||
- hmac-sha1
|
||||
- hmac-sha2-256
|
||||
- hmac-sha2-512
|
||||
kex:
|
||||
- diffie-hellman-group-exchange-sha256
|
||||
- diffie-hellman-group14-sha1
|
||||
- diffie-hellman-group14-sha256
|
||||
- diffie-hellman-group16-sha512
|
||||
- diffie-hellman-group18-sha512
|
||||
- ecdh-sha2-nistp256
|
||||
- ecdh-sha2-nistp384
|
||||
- ecdh-sha2-nistp521
|
||||
cipher:
|
||||
- aes128-ctr
|
||||
- aes128-gcm
|
||||
- aes128-gcm@openssh.com
|
||||
- aes192-ctr
|
||||
- aes256-ctr
|
||||
- aes256-gcm
|
||||
- aes256-gcm@openssh.com
|
||||
serverHostKey:
|
||||
- ecdsa-sha2-nistp256
|
||||
- ecdsa-sha2-nistp384
|
||||
- ecdsa-sha2-nistp521
|
||||
- ssh-ed25519
|
||||
- ssh-rsa
|
||||
privateKeys:
|
||||
- file:///home/joey/.ssh/id_rsa
|
||||
type: ssh
|
||||
- id: ssh:356091a3-aae0-4627-9e3e-2a52a6692086
|
||||
icon: fas fa-desktop
|
||||
name: joey-nas
|
||||
group: local
|
||||
options:
|
||||
name: joey-nas
|
||||
group: local
|
||||
host: joey-nas.local
|
||||
algorithms:
|
||||
hmac:
|
||||
- hmac-sha1
|
||||
- hmac-sha2-256
|
||||
- hmac-sha2-512
|
||||
kex:
|
||||
- diffie-hellman-group-exchange-sha256
|
||||
- diffie-hellman-group14-sha1
|
||||
- diffie-hellman-group14-sha256
|
||||
- diffie-hellman-group16-sha512
|
||||
- diffie-hellman-group18-sha512
|
||||
- ecdh-sha2-nistp256
|
||||
- ecdh-sha2-nistp384
|
||||
- ecdh-sha2-nistp521
|
||||
cipher:
|
||||
- aes128-ctr
|
||||
- aes128-gcm
|
||||
- aes128-gcm@openssh.com
|
||||
- aes192-ctr
|
||||
- aes256-ctr
|
||||
- aes256-gcm
|
||||
- aes256-gcm@openssh.com
|
||||
serverHostKey:
|
||||
- ecdsa-sha2-nistp256
|
||||
- ecdsa-sha2-nistp384
|
||||
- ecdsa-sha2-nistp521
|
||||
- ssh-ed25519
|
||||
- ssh-rsa
|
||||
privateKeys:
|
||||
- file:///home/joey/.ssh/id_rsa
|
||||
scripts: []
|
||||
forwardedPorts: []
|
||||
type: ssh
|
||||
- id: ssh:f610b2cb-eea8-4fcb-bb44-2ea481285d44
|
||||
icon: fas fa-desktop
|
||||
name: joey-seedbox
|
||||
group: local
|
||||
options:
|
||||
name: joey-seedbox
|
||||
group: local
|
||||
host: joey-seedbox.local
|
||||
user: joey
|
||||
algorithms:
|
||||
hmac:
|
||||
- hmac-sha1
|
||||
- hmac-sha2-256
|
||||
- hmac-sha2-512
|
||||
kex:
|
||||
- diffie-hellman-group-exchange-sha256
|
||||
- diffie-hellman-group14-sha1
|
||||
- diffie-hellman-group14-sha256
|
||||
- diffie-hellman-group16-sha512
|
||||
- diffie-hellman-group18-sha512
|
||||
- ecdh-sha2-nistp256
|
||||
- ecdh-sha2-nistp384
|
||||
- ecdh-sha2-nistp521
|
||||
cipher:
|
||||
- aes128-ctr
|
||||
- aes128-gcm
|
||||
- aes128-gcm@openssh.com
|
||||
- aes192-ctr
|
||||
- aes256-ctr
|
||||
- aes256-gcm
|
||||
- aes256-gcm@openssh.com
|
||||
serverHostKey:
|
||||
- ecdsa-sha2-nistp256
|
||||
- ecdsa-sha2-nistp384
|
||||
- ecdsa-sha2-nistp521
|
||||
- ssh-ed25519
|
||||
- ssh-rsa
|
||||
privateKeys:
|
||||
- file:///home/joey/.ssh/id_rsa
|
||||
scripts: []
|
||||
forwardedPorts: []
|
||||
type: ssh
|
||||
- id: ssh:0cf17a52-6895-499a-a524-2e70ee2f01c9
|
||||
icon: fas fa-desktop
|
||||
name: router
|
||||
group: local
|
||||
options:
|
||||
name: router
|
||||
group: local
|
||||
host: router.jafner.net
|
||||
user: admin
|
||||
algorithms:
|
||||
hmac:
|
||||
- hmac-sha1
|
||||
- hmac-sha2-256
|
||||
- hmac-sha2-512
|
||||
kex:
|
||||
- diffie-hellman-group-exchange-sha256
|
||||
- diffie-hellman-group14-sha1
|
||||
- diffie-hellman-group14-sha256
|
||||
- diffie-hellman-group16-sha512
|
||||
- diffie-hellman-group18-sha512
|
||||
- ecdh-sha2-nistp256
|
||||
- ecdh-sha2-nistp384
|
||||
- ecdh-sha2-nistp521
|
||||
cipher:
|
||||
- aes128-ctr
|
||||
- aes128-gcm
|
||||
- aes128-gcm@openssh.com
|
||||
- aes192-ctr
|
||||
- aes256-ctr
|
||||
- aes256-gcm
|
||||
- aes256-gcm@openssh.com
|
||||
serverHostKey:
|
||||
- ecdsa-sha2-nistp256
|
||||
- ecdsa-sha2-nistp384
|
||||
- ecdsa-sha2-nistp521
|
||||
- ssh-ed25519
|
||||
- ssh-rsa
|
||||
privateKeys:
|
||||
- file:///home/joey/.ssh/id_rsa
|
||||
forwardedPorts: []
|
||||
scripts: []
|
||||
type: ssh
|
||||
- id: ssh:36015f10-1a8e-4506-ba40-4c9cd4a35d9a
|
||||
icon: fas fa-desktop
|
||||
name: pi
|
||||
group: local
|
||||
options:
|
||||
name: pi
|
||||
group: local
|
||||
host: pihole.local
|
||||
user: pi
|
||||
algorithms:
|
||||
hmac:
|
||||
- hmac-sha1
|
||||
- hmac-sha2-256
|
||||
- hmac-sha2-512
|
||||
kex:
|
||||
- curve25519-sha256
|
||||
- curve25519-sha256@libssh.org
|
||||
- diffie-hellman-group14-sha1
|
||||
- diffie-hellman-group14-sha256
|
||||
- diffie-hellman-group16-sha512
|
||||
- diffie-hellman-group18-sha512
|
||||
- ecdh-sha2-nistp256
|
||||
- ecdh-sha2-nistp384
|
||||
- ecdh-sha2-nistp521
|
||||
cipher:
|
||||
- aes128-ctr
|
||||
- aes128-gcm
|
||||
- aes128-gcm@openssh.com
|
||||
- aes192-ctr
|
||||
- aes256-ctr
|
||||
- aes256-gcm
|
||||
- aes256-gcm@openssh.com
|
||||
serverHostKey:
|
||||
- ecdsa-sha2-nistp256
|
||||
- ecdsa-sha2-nistp384
|
||||
- ecdsa-sha2-nistp521
|
||||
- ssh-ed25519
|
||||
- ssh-rsa
|
||||
privateKeys:
|
||||
- file:///home/joey/.ssh/id_rsa
|
||||
scripts: []
|
||||
forwardedPorts: []
|
||||
type: ssh
|
||||
- id: ssh:b2e6b90a-fba5-4418-b23b-e29342d50090
|
||||
icon: fas fa-desktop
|
||||
name: snapshot
|
||||
group: GreenFrog
|
||||
options:
|
||||
name: snapshot
|
||||
group: GreenFrog
|
||||
host: 143.110.236.23
|
||||
algorithms:
|
||||
hmac:
|
||||
- hmac-sha1
|
||||
- hmac-sha2-256
|
||||
- hmac-sha2-512
|
||||
kex:
|
||||
- curve25519-sha256
|
||||
- curve25519-sha256@libssh.org
|
||||
- diffie-hellman-group14-sha1
|
||||
- diffie-hellman-group14-sha256
|
||||
- diffie-hellman-group16-sha512
|
||||
- diffie-hellman-group18-sha512
|
||||
- ecdh-sha2-nistp256
|
||||
- ecdh-sha2-nistp384
|
||||
- ecdh-sha2-nistp521
|
||||
cipher:
|
||||
- aes128-ctr
|
||||
- aes128-gcm
|
||||
- aes128-gcm@openssh.com
|
||||
- aes192-ctr
|
||||
- aes256-ctr
|
||||
- aes256-gcm
|
||||
- aes256-gcm@openssh.com
|
||||
serverHostKey:
|
||||
- ecdsa-sha2-nistp256
|
||||
- ecdsa-sha2-nistp384
|
||||
- ecdsa-sha2-nistp521
|
||||
- ssh-ed25519
|
||||
- ssh-rsa
|
||||
privateKeys:
|
||||
- file:///home/joey/.ssh/id_rsa
|
||||
scripts: []
|
||||
forwardedPorts: []
|
||||
type: ssh
|
||||
- id: ssh:8fd323b3-45e3-499a-b4a3-d438c1c1ab90
|
||||
icon: fas fa-desktop
|
||||
name: DO 5etools
|
||||
group: cloud
|
||||
options:
|
||||
name: digital ocean
|
||||
group: cloud
|
||||
host: 143.110.151.123
|
||||
algorithms:
|
||||
hmac:
|
||||
- hmac-sha1
|
||||
- hmac-sha2-256
|
||||
- hmac-sha2-512
|
||||
kex:
|
||||
- curve25519-sha256
|
||||
- curve25519-sha256@libssh.org
|
||||
- diffie-hellman-group14-sha1
|
||||
- diffie-hellman-group14-sha256
|
||||
- diffie-hellman-group16-sha512
|
||||
- diffie-hellman-group18-sha512
|
||||
- ecdh-sha2-nistp256
|
||||
- ecdh-sha2-nistp384
|
||||
- ecdh-sha2-nistp521
|
||||
cipher:
|
||||
- aes128-ctr
|
||||
- aes128-gcm
|
||||
- aes128-gcm@openssh.com
|
||||
- aes192-ctr
|
||||
- aes256-ctr
|
||||
- aes256-gcm
|
||||
- aes256-gcm@openssh.com
|
||||
serverHostKey:
|
||||
- ecdsa-sha2-nistp256
|
||||
- ecdsa-sha2-nistp384
|
||||
- ecdsa-sha2-nistp521
|
||||
- ssh-ed25519
|
||||
- ssh-rsa
|
||||
privateKeys:
|
||||
- file:///home/joey/.ssh/digital_ocean
|
||||
forwardedPorts: []
|
||||
scripts: []
|
||||
type: ssh
|
||||
- id: ssh:d9c82a17-d5f1-4b20-a89f-925c55ea53db
|
||||
icon: fas fa-desktop
|
||||
name: joey-dev
|
||||
group: GreenFrog
|
||||
options:
|
||||
name: joey-dev-env
|
||||
group: GreenFrog
|
||||
host: 143.244.182.163
|
||||
algorithms:
|
||||
hmac:
|
||||
- hmac-sha1
|
||||
- hmac-sha2-256
|
||||
- hmac-sha2-512
|
||||
kex:
|
||||
- curve25519-sha256
|
||||
- curve25519-sha256@libssh.org
|
||||
- diffie-hellman-group14-sha1
|
||||
- diffie-hellman-group14-sha256
|
||||
- diffie-hellman-group16-sha512
|
||||
- diffie-hellman-group18-sha512
|
||||
- ecdh-sha2-nistp256
|
||||
- ecdh-sha2-nistp384
|
||||
- ecdh-sha2-nistp521
|
||||
cipher:
|
||||
- aes128-ctr
|
||||
- aes128-gcm
|
||||
- aes128-gcm@openssh.com
|
||||
- aes192-ctr
|
||||
- aes256-ctr
|
||||
- aes256-gcm
|
||||
- aes256-gcm@openssh.com
|
||||
serverHostKey:
|
||||
- ecdsa-sha2-nistp256
|
||||
- ecdsa-sha2-nistp384
|
||||
- ecdsa-sha2-nistp521
|
||||
- ssh-ed25519
|
||||
- ssh-rsa
|
||||
privateKeys:
|
||||
- file:///home/joey/.ssh/id_rsa
|
||||
scripts: []
|
||||
forwardedPorts: []
|
||||
type: ssh
|
||||
configSync:
|
||||
parts: {}
|
||||
profileDefaults:
|
||||
ssh:
|
||||
type: ssh
|
||||
options:
|
||||
algorithms: {}
|
||||
privateKeys:
|
||||
- file:///home/joey/.ssh\id_rsa
|
||||
auth: publicKey
|
@ -0,0 +1,54 @@
|
||||
{
|
||||
"runInBackground": false,
|
||||
"reloadAfterResume": true,
|
||||
"enableSystemTray": true,
|
||||
"startMinimized": false,
|
||||
"confirmOnQuit": true,
|
||||
"minimizeToSystemTray": false,
|
||||
"closeToSystemTray": false,
|
||||
"privateNotifications": false,
|
||||
"clipboardNotifications": true,
|
||||
"notifyTaskBarOnMessage": false,
|
||||
"showDisabledServices": false,
|
||||
"showMessageBadgeWhenMuted": false,
|
||||
"showDragArea": false,
|
||||
"enableSpellchecking": false,
|
||||
"spellcheckerLanguage": "en-us",
|
||||
"darkMode": false,
|
||||
"locale": "en-US",
|
||||
"fallbackLocale": "en-US",
|
||||
"beta": false,
|
||||
"isAppMuted": false,
|
||||
"enableGPUAcceleration": false,
|
||||
"server": "You are using Ferdi without a server",
|
||||
"predefinedTodoServer": "https://app.franztodos.com",
|
||||
"autohideMenuBar": false,
|
||||
"lockingFeatureEnabled": false,
|
||||
"locked": false,
|
||||
"lockedPassword": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
|
||||
"useTouchIdToUnlock": true,
|
||||
"scheduledDNDEnabled": false,
|
||||
"scheduledDNDStart": "17:00",
|
||||
"scheduledDNDEnd": "09:00",
|
||||
"hibernateOnStartup": true,
|
||||
"hibernationStrategy": 300,
|
||||
"wakeUpStrategy": 300,
|
||||
"inactivityLock": 0,
|
||||
"automaticUpdates": true,
|
||||
"showServiceNavigationBar": false,
|
||||
"universalDarkMode": true,
|
||||
"userAgentPref": "",
|
||||
"adaptableDarkMode": true,
|
||||
"accentColor": "#7266F0",
|
||||
"serviceRibbonWidth": 68,
|
||||
"iconSize": 20,
|
||||
"sentry": false,
|
||||
"nightly": false,
|
||||
"navigationBarBehaviour": "never",
|
||||
"searchEngine": "duckDuckGo",
|
||||
"useVerticalStyle": false,
|
||||
"alwaysShowWorkspaces": false,
|
||||
"liftSingleInstanceLock": false,
|
||||
"todoServer": "isUsingCustomTodoService",
|
||||
"customTodoServer": ""
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
# PrivateEmail for Franz
|
||||
This is a Franz recipe for [PrivateEmail](https://privateemail.com/)
|
||||
### How to create your own Franz recipes:
|
||||
* [Read the documentation](https://github.com/meetfranz/plugins)
|
After Width: | Height: | Size: 6.7 KiB |
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 275.5 61.7"><path d="M74.9 61.5H9.4c-5.2 0-9.4-4.2-9.4-9.4V9.5C0 4.3 4.2.1 9.4.1h65.5c5.2 0 9.4 4.2 9.4 9.4v42.6c-.1 5.2-4.3 9.4-9.4 9.4z" fill="#2948ff"/><path d="M47.4 36.7c-3.2 2.2-7.4 2.2-10.6 0l-7.7-5.3-3.3 3.8 10.3 9.5c3.3 3.4 8.7 3.4 12 0l10.3-9.5-3.3-3.8-7.7 5.3zM0 11.5l23.7 21.8 3.1-3.5zm57.5 18.3l3 3.5 23.7-21.8z" fill="#103bb2"/><path d="M60.5 33.3l-2.1 1.9L79.8 60c.8-.5 1.5-1.1 2.1-1.8L60.5 33.3zM2.2 58.2c.6.7 1.3 1.3 2.1 1.8l21.4-24.8-2.1-1.9L2.2 58.2z" fill="#1943c2"/><path d="M57.5 29.8l-2.4 1.6 3.3 3.8 2.1-1.9zm-33.8 3.5l2.1 1.9 3.3-3.8-2.3-1.6z" fill="#112e85"/><path d="M81.5 2.9c-1.7-1.7-4-2.7-6.6-2.7H9.4c-2.6 0-4.9 1-6.6 2.7C1 4.6 0 6.9 0 9.5v1.9l26.8 18.3 2.3 1.6 7.7 5.3c3.2 2.2 7.4 2.2 10.6 0l7.7-5.3 2.3-1.6 26.8-18.3V9.5c0-2.6-1-4.9-2.7-6.6z" fill="#396afc"/><path d="M98.7 19.4h7.8c4.1 0 7 2.6 7 6.8 0 4.2-2.9 6.9-7 6.9h-5.6V42h-2.2V19.4zm7.5 11.7c3 0 5-1.8 5-4.9 0-3.1-2-4.8-5-4.8h-5.4v9.8h5.4zm11.1-5.3h2.2v2.9c0 .7-.1 1.3-.1 1.3h.1c.8-2.5 2.6-4.3 5.1-4.3.5 0 .9.1.9.1V28s-.4-.1-.8-.1c-2.3 0-4 1.8-4.7 4.2-.3 1-.5 2.1-.5 3.2v6.8h-2.2V25.8zm11.5-6.4h2.3v2.7h-2.3v-2.7zm0 6.4h2.2V42h-2.2V25.8zm5.3 0h2.3l4.5 11.9c.3.8.5 1.9.5 1.9h.1s.3-1.1.6-1.9l4.5-11.9h2.3L142.7 42h-2.4l-6.2-16.2zm26.5 6.2h.9v-.4c0-3.1-1.7-4.2-4-4.2-2.7 0-4.6 1.5-4.6 1.5l-1-1.7s2.1-1.8 5.8-1.8c3.9 0 6.1 2.2 6.1 6.2V42h-2.1v-1.8c0-.8.1-1.4.1-1.4h-.1s-1.4 3.5-5.4 3.5c-2.7 0-5.5-1.6-5.5-4.8-.1-5.4 7-5.5 9.8-5.5zm-4.1 8.6c3.1 0 5-3.2 5-6v-.7h-.9c-2.6 0-7.7.1-7.7 3.7 0 1.4 1.2 3 3.6 3zm12.8-12.8h-2.1V26h2.2v-4.7h2.2V26h4.1v1.8h-4.1v8.1c0 3.8 2.4 4.3 3.6 4.3.5 0 .7-.1.7-.1v2s-.4.1-.9.1c-1.9 0-5.6-.6-5.6-6l-.1-8.4zm17.1-2.4c4.5 0 6.8 3.5 6.8 7.5 0 .4-.1 1.1-.1 1.1h-12.5c.1 4.2 2.9 6.4 6.3 6.4 3 0 4.9-2 4.9-2l1 1.7s-2.4 2.3-6 2.3c-4.8 0-8.5-3.5-8.5-8.5.1-5.3 3.7-8.5 8.1-8.5zm4.5 6.8c-.1-3.4-2.2-5-4.6-5-2.7 0-5.1 1.7-5.6 5h10.2zm6.9-12.9H211v2.8h-10v7.1h8.2V32H201v7.3h10.6v2.8h-13.8V19.3zm17.9 6.4h3v2.2c0 .6-.1 1.2-.1 1.2h.1c.8-1.9 3.1-3.7 5.6-3.7 2.7 0 4.4 1.3 4.9 3.7h.1c.9-2 3.2-3.7 5.8-3.7 3.7 0 5.4 2.1 5.4 6.3v10.5h-3.1v-9.8c0-2.3-.5-4.1-2.9-4.1-2.3 0-4 1.9-4.6 4.2-.2.7-.2 1.4-.2 2.3v7.5h-3.1v-9.8c0-2.1-.3-4.1-2.8-4.1-2.4 0-4.1 2-4.7 4.3-.2.6-.2 1.4-.2 2.1v7.5h-3.1l-.1-16.6zm38 6.2h.7v-.3c0-2.7-1.5-3.6-3.6-3.6-2.5 0-4.6 1.6-4.6 1.6l-1.3-2.3s2.4-1.9 6.1-1.9c4.1 0 6.5 2.3 6.5 6.4v10.3h-2.9v-1.6c0-.7.1-1.3.1-1.3h-.1s-1.3 3.2-5.2 3.2c-2.8 0-5.6-1.7-5.6-5 0-5.3 7.1-5.5 9.9-5.5zm-3.6 8c2.6 0 4.4-2.8 4.4-5.2v-.5h-.8c-2.4 0-6.6.2-6.6 3.1-.1 1.3.9 2.6 3 2.6zm12.1-20.6h3.2v3.2h-3.2v-3.2zm0 6.4h3.1V42h-3.1V25.7zm7.9-6.4h3.1v17.8c0 2 .8 2.3 1.7 2.3h.5v2.8s-.5.1-1 .1c-1.8 0-4.4-.5-4.4-4.6l.1-18.4z" fill="#6d6e71"/></svg>
|
After Width: | Height: | Size: 2.6 KiB |
@ -0,0 +1 @@
|
||||
module.exports = Franz => Franz;
|
@ -0,0 +1,15 @@
|
||||
{
|
||||
"id": "privateemail",
|
||||
"name": "Private Email",
|
||||
"version": "1.0.0",
|
||||
"description": "PrivateEmail.com Franz recipe",
|
||||
"main": "index.js",
|
||||
"repository": "github.com/bigzoo/franz-recipe-privateemail",
|
||||
"author": "Chris Nyaga <chris@bigzoo.me>",
|
||||
"license": "MIT",
|
||||
"private": false,
|
||||
"config": {
|
||||
"serviceURL": "https://privateemail.com/appsuite/",
|
||||
"hasNotificationSound": true
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
# Upwork for Franz
|
||||
This is a Franz recipe for Upwork Messages.
|
||||
|
||||
Icon found at [https://pressurgeons.com/img/upwork2.svg](https://pressurgeons.com/img/upwork2.svg)
|
||||
|
||||
### How to create your own Franz recipes:
|
||||
* [Read the documentation](https://github.com/meetfranz/plugins)
|
After Width: | Height: | Size: 29 KiB |
@ -0,0 +1,62 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="0 0 750 750"
|
||||
version="1.1"
|
||||
id="svg5"
|
||||
sodipodi:docname="icon.svg"
|
||||
inkscape:export-filename="/home/tribex/Programming/franz-recipe-upwork/icon.png"
|
||||
inkscape:export-xdpi="131.07001"
|
||||
inkscape:export-ydpi="131.07001"
|
||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06">
|
||||
<metadata
|
||||
id="metadata11">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs9" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1052"
|
||||
id="namedview7"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.31466667"
|
||||
inkscape:cx="375"
|
||||
inkscape:cy="375"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg5" />
|
||||
<rect
|
||||
fill="#6FDA44"
|
||||
class="st0"
|
||||
width="750"
|
||||
height="750"
|
||||
id="rect2" />
|
||||
<path
|
||||
fill="#FFFFFF"
|
||||
id="path22"
|
||||
class="st1"
|
||||
d="M526.6,416.7c-25.3,0-49-10.7-70.5-28.1l5.2-24.7l0.2-1c4.7-26.2,19.4-70.1,65.1-70.1c34.1,0,61.9,27.8,61.9,61.9C588.5,389,560.7,416.7,526.6,416.7z M526.6,230.2c-58.2,0-103.3,37.8-121.6,100c-28-42-49.2-92.5-61.6-135h-62.7v163c0,32.2-26.2,58.3-58.3,58.3c-32.2,0-58.3-26.2-58.3-58.3v-163h-62.7v163c0,66.7,54.3,121.5,121,121.5c66.7,0,121-54.8,121-121.5V331c12.1,25.3,27.1,51,45.2,73.8l-38.3,180.4h64.1l27.8-130.8c24.3,15.6,52.3,25.5,84.5,25.5c68.7,0,124.6-56.2,124.6-124.9C651.2,286.1,595.3,230.2,526.6,230.2" />
|
||||
</svg>
|
After Width: | Height: | Size: 2.2 KiB |
@ -0,0 +1 @@
|
||||
module.exports = Franz => Franz;
|
@ -0,0 +1,13 @@
|
||||
{
|
||||
"id": "upwork",
|
||||
"name": "Upwork",
|
||||
"version": "0.1.0",
|
||||
"description": "Upwork",
|
||||
"main": "index.js",
|
||||
"author": "Joshua Bemenderfer <tribex10@gmail.com>",
|
||||
"license": "MIT",
|
||||
"config": {
|
||||
"serviceURL": "https://dash.upwork.com/",
|
||||
"hasNotificationSound": true
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
module.exports = (Franz) => {
|
||||
const getMessages = function getMessages() {
|
||||
const count = [...document.querySelectorAll('span.mentions')]
|
||||
.reduce((acc, el) => acc += parseInt(el.textContent) || 0, 0)
|
||||
|
||||
Franz.setBadge(count);
|
||||
};
|
||||
|
||||
// Check for new messages every second and update Franz badge.
|
||||
Franz.loop(getMessages);
|
||||
};
|
@ -0,0 +1 @@
|
||||
<svg height="80" width="80" xmlns="http://www.w3.org/2000/svg"><path d="M66.71 0H13.188C8.675 0 5 3.675 5 8.228v54c0 4.554 3.675 8.229 8.188 8.229h45.294l-2.117-7.39 5.112 4.754 4.833 4.473 8.588 7.589V8.228C74.898 3.675 71.223 0 66.71 0zM51.292 52.164s-1.438-1.718-2.636-3.236c5.232-1.478 7.23-4.753 7.23-4.753-1.638 1.079-3.196 1.838-4.594 2.357-1.997.839-3.914 1.398-5.791 1.717-3.835.72-7.35.52-10.345-.04a33.528 33.528 0 0 1-5.872-1.717 23.407 23.407 0 0 1-2.915-1.358c-.12-.08-.24-.12-.36-.2-.08-.04-.12-.08-.16-.12-.718-.4-1.118-.679-1.118-.679s1.917 3.196 6.99 4.713c-1.198 1.518-2.676 3.316-2.676 3.316-8.827-.28-12.182-6.072-12.182-6.072 0-12.86 5.751-23.285 5.751-23.285 5.752-4.314 11.224-4.194 11.224-4.194l.4.479c-7.19 2.077-10.505 5.232-10.505 5.232s.878-.479 2.356-1.158c4.274-1.877 7.669-2.396 9.067-2.516.24-.04.44-.08.679-.08 2.436-.32 5.192-.4 8.068-.08a32.559 32.559 0 0 1 12.022 3.834s-3.155-2.995-9.945-5.072l.56-.64s5.471-.12 11.223 4.195c0 0 5.751 10.424 5.751 23.285 0 0-3.395 5.792-12.222 6.072zM32.72 33.51c-2.276 0-4.074 1.997-4.074 4.433 0 2.437 1.838 4.434 4.074 4.434 2.277 0 4.074-1.997 4.074-4.434.04-2.436-1.797-4.433-4.074-4.433zm14.579 0c-2.277 0-4.074 1.997-4.074 4.433 0 2.437 1.837 4.434 4.074 4.434 2.277 0 4.074-1.997 4.074-4.434 0-2.436-1.797-4.433-4.074-4.433z" fill="#7289da" fill-rule="evenodd"/></svg>
|
After Width: | Height: | Size: 1.3 KiB |
@ -0,0 +1,8 @@
|
||||
module.exports = Ferdi => class Discord extends Ferdi {
|
||||
overrideUserAgent() {
|
||||
const useragent = window.navigator.userAgent;
|
||||
const parts = useragent.split('(KHTML, like Gecko)');
|
||||
|
||||
return parts.join('(KHTML, like Gecko) discord/0.0.250').replace('Electron', 'Discord').replace('Ferdi', 'Discord');
|
||||
}
|
||||
};
|
@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "discord",
|
||||
"name": "Discord",
|
||||
"version": "1.4.5",
|
||||
"license": "MIT",
|
||||
"config": {
|
||||
"serviceURL": "https://discordapp.com/login",
|
||||
"hasNotificationSound": true,
|
||||
"hasIndirectMessages": true
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
.notice {
|
||||
display: none;
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
const _path = _interopRequireDefault(require('path'));
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : { default: obj };
|
||||
}
|
||||
|
||||
module.exports = (Ferdi, settings) => {
|
||||
const getMessages = () => {
|
||||
let directCount = 0;
|
||||
const directCountPerServer = document.querySelectorAll(
|
||||
'[class*="lowerBadge-"] [class*="numberBadge-"]',
|
||||
);
|
||||
|
||||
for (const directCountBadge of directCountPerServer) {
|
||||
directCount += Ferdi.safeParseInt(directCountBadge.textContent);
|
||||
}
|
||||
|
||||
const indirectCountPerServer = document.querySelectorAll(
|
||||
'[class*="modeUnread-"]',
|
||||
).length;
|
||||
|
||||
Ferdi.setBadge(directCount, indirectCountPerServer);
|
||||
};
|
||||
|
||||
Ferdi.loop(getMessages);
|
||||
|
||||
Ferdi.injectCSS(_path.default.join(__dirname, 'service.css'));
|
||||
|
||||
// TODO: This whole block is duplicated between the 'discord' and 'skype' recipes - reuse
|
||||
document.addEventListener(
|
||||
'click',
|
||||
event => {
|
||||
const link = event.target.closest('a[href^="http"]');
|
||||
const button = event.target.closest('button[title^="http"]');
|
||||
|
||||
if (link || button) {
|
||||
const url = link
|
||||
? link.getAttribute('href')
|
||||
: button.getAttribute('title');
|
||||
|
||||
if (url.includes('views/imgpsh_fullsize_anim')) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
// TODO: Can we send an ipc event 'open-browser-window' to open the child window? (see the slack recipe for how to send an ipc message)
|
||||
// TODO: Can we change the slack recipe to add a clickHandler for screensharing/video calls? (https://github.com/getferdi/ferdi/issues/1697)
|
||||
let win = new Ferdi.BrowserWindow({
|
||||
width: 800,
|
||||
height: window.innerHeight,
|
||||
minWidth: 600,
|
||||
webPreferences: {
|
||||
partition: `persist:service-${settings.id}`,
|
||||
// TODO: Aren't these needed here?
|
||||
// contextIsolation: false,
|
||||
// enableRemoteModule: true,
|
||||
},
|
||||
});
|
||||
win.loadURL(url);
|
||||
win.on('closed', () => {
|
||||
win = null;
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
true,
|
||||
);
|
||||
};
|
@ -0,0 +1 @@
|
||||
<svg fill="none" height="1024" width="1024" xmlns="http://www.w3.org/2000/svg"><g clip-rule="evenodd" fill="#0dbd8b" fill-rule="evenodd"><path d="M414 204c0-23.196 18.804-42 42-42 154.64 0 280 125.36 280 280 0 23.196-18.804 42-42 42s-42-18.804-42-42c0-108.248-87.752-196-196-196-23.196 0-42-18.804-42-42zM610 820c0 23.196-18.804 42-42 42-154.64 0-280-125.36-280-280 0-23.196 18.804-42 42-42s42 18.804 42 42c0 108.248 87.752 196 196 196 23.196 0 42 18.804 42 42zM204 610c-23.196 0-42-18.804-42-42 0-154.64 125.36-280 280-280 23.196 0 42 18.804 42 42s-18.804 42-42 42c-108.248 0-196 87.752-196 196 0 23.196-18.804 42-42 42zM820 414c23.196 0 42 18.804 42 42 0 154.64-125.36 280-280 280-23.196 0-42-18.804-42-42s18.804-42 42-42c108.248 0 196-87.752 196-196 0-23.196 18.804-42 42-42z"/></g></svg>
|
After Width: | Height: | Size: 791 B |
@ -0,0 +1 @@
|
||||
module.exports = Ferdi => Ferdi;
|
@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "element",
|
||||
"name": "Element",
|
||||
"version": "1.1.2",
|
||||
"license": "MIT",
|
||||
"aliases": [
|
||||
"Riot.im",
|
||||
"Matrix"
|
||||
],
|
||||
"config": {
|
||||
"serviceURL": "https://app.element.io",
|
||||
"hasCustomUrl": true,
|
||||
"message": "Element's default URL is https://app.element.io/",
|
||||
"hasNotificationSound": true,
|
||||
"hasIndirectMessages": true
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
module.exports = Ferdi => {
|
||||
function getMessages() {
|
||||
// const badges = document.querySelectorAll('.mx_RoomSublist:not(.mx_RoomSublist_hidden) .mx_RoomSublist_badgeContainer');
|
||||
const spaceBadges = document.querySelectorAll('.mx_SpacePanel_badgeContainer .mx_NotificationBadge .mx_NotificationBadge_count');
|
||||
const avatarBadges = document.querySelectorAll('.mx_DecoratedRoomAvatar .mx_NotificationBadge .mx_NotificationBadge_count');
|
||||
// Number of messages from People / Number of messages appearing Red in the Room List
|
||||
let directCount = 0;
|
||||
// Number of messages from Rooms / Number of messages appearing Grey in the Room List
|
||||
let indirectCount = 0;
|
||||
// Count Badges depending on Element Settings
|
||||
if (avatarBadges.length > 0) {
|
||||
for (const badge of avatarBadges) {
|
||||
if (badge.parentElement.getAttribute('class').includes('mx_NotificationBadge_highlighted')) {
|
||||
directCount = directCount + Ferdi.safeParseInt(badge.textContent);
|
||||
} else if (badge.parentElement.previousSibling != null && badge.parentElement.previousSibling.getAttribute('class').includes('mx_DecoratedRoomAvatar_icon_online')) {
|
||||
directCount = directCount + Ferdi.safeParseInt(badge.textContent);
|
||||
} else if (badge.parentElement.getAttribute('class').includes('mx_NotificationBadge_dot')) {
|
||||
indirectCount = indirectCount + 1; // there might be dragons: incrementing does not work here?
|
||||
} else {
|
||||
indirectCount = indirectCount + Ferdi.safeParseInt(badge.textContent);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (const badge of spaceBadges) {
|
||||
if (badge.parentElement.getAttribute('class').includes('mx_NotificationBadge_highlighted')) {
|
||||
directCount = directCount + Ferdi.safeParseInt(badge.textContent);
|
||||
} else if (badge.parentElement.getAttribute('class').includes('mx_NotificationBadge_dot')) {
|
||||
indirectCount = indirectCount + Ferdi.safeParseInt(1); // there might be dragons: incrementing does not work here?
|
||||
} else {
|
||||
indirectCount = indirectCount + Ferdi.safeParseInt(badge.textContent);
|
||||
}
|
||||
}
|
||||
}
|
||||
// set Ferdi badge
|
||||
Ferdi.setBadge(directCount, indirectCount);
|
||||
}
|
||||
Ferdi.loop(getMessages);
|
||||
};
|
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="1024" height="1024"><path fill="#4caf50" d="m45 16.2-5 2.75-5 4.75V40h7a3 3 0 0 0 3-3V16.2z"/><path fill="#1e88e5" d="m3 16.2 3.614 1.71L13 23.7V40H6a3 3 0 0 1-3-3V16.2z"/><path fill="#e53935" d="m35 11.2-11 8.25-11-8.25-1 5.8 1 6.7 11 8.25 11-8.25 1-6.7z"/><path fill="#c62828" d="M3 12.298V16.2l10 7.5V11.2L9.876 8.859A4.298 4.298 0 0 0 3 12.298z"/><path fill="#fbc02d" d="M45 12.298V16.2l-10 7.5V11.2l3.124-2.341A4.298 4.298 0 0 1 45 12.298z"/></svg>
|
After Width: | Height: | Size: 520 B |
@ -0,0 +1 @@
|
||||
module.exports = Ferdi => class Gmail extends Ferdi {};
|
@ -0,0 +1,9 @@
|
||||
{
|
||||
"id": "gmail",
|
||||
"name": "Gmail",
|
||||
"version": "1.4.2",
|
||||
"license": "MIT",
|
||||
"config": {
|
||||
"serviceURL": "https://mail.google.com"
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
.aiw .cd .vh {
|
||||
display: none !important;
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
const _path = _interopRequireDefault(require('path'));
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : { default: obj };
|
||||
}
|
||||
|
||||
module.exports = Ferdi => {
|
||||
// if the user is on gmail's landing page, go to the login page.
|
||||
if (
|
||||
location.hostname == 'www.google.com' &&
|
||||
location.href.includes('gmail/about/')
|
||||
) {
|
||||
location.href =
|
||||
'https://accounts.google.com/AccountChooser?service=mail&continue=https://mail.google.com/mail/';
|
||||
}
|
||||
|
||||
const getMessages = () => {
|
||||
let count = 0;
|
||||
|
||||
const inboxLinks = document.querySelectorAll('.J-Ke.n0');
|
||||
if (inboxLinks.length > 0) {
|
||||
let parentNode = inboxLinks[0].parentNode;
|
||||
if (parentNode) {
|
||||
let parentNodeOfParentNode = parentNode.parentNode;
|
||||
if (parentNodeOfParentNode) {
|
||||
const unreadCounts = parentNodeOfParentNode.querySelectorAll('.bsU');
|
||||
if (unreadCounts.length > 0) {
|
||||
count = Ferdi.safeParseInt(unreadCounts[0].textContent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// set Ferdi badge
|
||||
Ferdi.setBadge(count);
|
||||
};
|
||||
|
||||
Ferdi.loop(getMessages);
|
||||
|
||||
Ferdi.injectCSS(_path.default.join(__dirname, 'service.css'));
|
||||
};
|
@ -0,0 +1,772 @@
|
||||
/* Copied from: https://github.com/ducfilan/Dark-mode-Franz-Ferdi */
|
||||
|
||||
:root,
|
||||
body,
|
||||
html,
|
||||
.toast,
|
||||
option,
|
||||
#extended-nav-search .search-typeahead-v2 input,
|
||||
#extended-nav-search .nav-search nav-search--focused,
|
||||
#extended-nav-search.nav-search--focused .search-typeahead-v2 input,
|
||||
#extended-nav-search.nav-search--focused .typeahead-icon,
|
||||
artdeco-typeahead-deprecated-results-container,
|
||||
.mn-community-summary__sub-section--collapsed:hover,
|
||||
.artdeco-button--inverse.artdeco-button,
|
||||
.artdeco-button--inverse.artdeco-button--primary,
|
||||
.artdeco-button--inverse.artdeco-button--primary:visited,
|
||||
.artdeco-button--inverse.artdeco-button--primary:visited:hover,
|
||||
.artdeco-button--inverse.artdeco-button:visited,
|
||||
.artdeco-button--inverse.artdeco-button:visited:hover,
|
||||
.launchpad-pymk-modal__header,
|
||||
.artdeco-modal__actionbar,
|
||||
.launchpad-pymk-list__item:hover,
|
||||
.artdeco-modal,
|
||||
.msg-spinmail-thread,
|
||||
.msg-conversations-container__convo-item-link.active,
|
||||
.msg-conversations-container__convo-item:hover
|
||||
.msg-conversations-container__convo-item-link,
|
||||
.msg-ghost-form,
|
||||
.toast__dismiss,
|
||||
.content-container,
|
||||
artdeco-dropdown-content,
|
||||
.feed-shared-interest-package__section-header:hover,
|
||||
.feed-shared-interest-package__entity-item:hover,
|
||||
.feed-shared-interest-package__expand-collapse-cta-icon:active,
|
||||
.share-media-button__label--square:focus,
|
||||
.share-media-button__label--square:hover,
|
||||
#app-boot-bg .circle,
|
||||
#app-boot-bg .line,
|
||||
#app-boot-bg .rect,
|
||||
.loading-bg .circle,
|
||||
.loading-bg .line,
|
||||
.loading-bg .rect,
|
||||
.feed-shared-image__container,
|
||||
.comments-comment-item__options .dropdown-options,
|
||||
.comments-comment-item__options .dropdown-options:after,
|
||||
.image-sharing-detour-container__footer,
|
||||
.share-visibility-options__subheader,
|
||||
.share-visibility-options__list-item:hover,
|
||||
.nav-app-launcher__card li:hover,
|
||||
.dropdown .dropdown-options,
|
||||
.pv-entity__position-group-pager,
|
||||
.nav-accordion .accordion-item .accordion-header,
|
||||
.jobs-options__list,
|
||||
.jobs-premium-applicant-insights-obfuscated-upsell__container,
|
||||
.msg-search-form__filters-dropdown,
|
||||
.mn-community-summary__sub-section:hover {
|
||||
background: #162228 !important;
|
||||
}
|
||||
|
||||
.artdeco-card,
|
||||
.artdeco-container-card,
|
||||
.pv-profile-section.background-section.artdeco-container-card.pv-profile-section--reorder-enabled
|
||||
.pv-profile-section
|
||||
.pv-profile-section__card-item,
|
||||
.pv-profile-section.background-section.artdeco-container-card.pv-profile-section--reorder-enabled
|
||||
.pv-profile-section
|
||||
.pv-profile-section__card-item-v2,
|
||||
.pv-profile-section.background-section.artdeco-container-card.pv-profile-section--reorder-enabled
|
||||
.pv-profile-section
|
||||
.pv-profile-section__section-info-item,
|
||||
.pv-entity__position-group-role-item,
|
||||
.pv-entity__position-group-role-item-fading-timeline,
|
||||
.pv-profile-sticky-header--is-showing,
|
||||
.launchpad-pymk-list__item,
|
||||
.container,
|
||||
.container-with-shadow,
|
||||
.feed-shared-navigation-module,
|
||||
.feed-right-rail__container,
|
||||
.feed-right-rail,
|
||||
.feed-shared-update-v2,
|
||||
.feed-shared-update--chat-ui .comments-comments-list,
|
||||
.feed-shared-social-action-bar,
|
||||
.feed-shared-update--chat-ui .comments-comment-box,
|
||||
.feed-shared-article,
|
||||
.feed-shared-first-prompt-block,
|
||||
a.view-more,
|
||||
button.view-more,
|
||||
.msg-conversations-container__conversations-list,
|
||||
.msg-conversations-container--show-overlay
|
||||
.msg-conversations-container__convo-item,
|
||||
.msg-spinmail-thread__top-banner,
|
||||
.msg-search-form__search-field[type="search"],
|
||||
.share-box__wrapper,
|
||||
.org-top-card,
|
||||
.organization-outlet .org-container__ad-module,
|
||||
.nt-settings-summary,
|
||||
.jobs-box,
|
||||
.jobs-home-soho__search-box-container--textured,
|
||||
.jobs-blended-container,
|
||||
.mn-abi-form__container,
|
||||
.mn-discovery-cohorts__carousel-wrapper,
|
||||
.mn-discovery-tabs,
|
||||
.mn-left-rail__top-module,
|
||||
#mynetwork.extended .two-column-with-left-rail .left-rail-container,
|
||||
.msg-overlay-list-bubble,
|
||||
.nav-app-launcher__card,
|
||||
.vanity-name,
|
||||
.edit-content,
|
||||
.create-badge,
|
||||
.controls,
|
||||
.modal__wrapper,
|
||||
.pp-section,
|
||||
.carousel-form .carousel-header,
|
||||
.carousel-body,
|
||||
.pe-form,
|
||||
.profile-photo-edit__edit-icon.profile-photo-edit__edit-icon.profile-photo-edit__edit-icon,
|
||||
.profile-photo-edit,
|
||||
.pe-top-card-form__photo-wrapper,
|
||||
.photo-filter__footer,
|
||||
.profile-photo-cropper__actions,
|
||||
.global-footer__upper-row-wrapper,
|
||||
.nav-container .dropdown-options,
|
||||
#settings-nav,
|
||||
#settings-nav.three-column ul[role="tablist"],
|
||||
#settings-nav.four-column ul[role="tablist"],
|
||||
#app-boot-bg .module,
|
||||
.loading-bg .module,
|
||||
#app-boot-bg .line.white,
|
||||
#app-boot-bg .rect.white,
|
||||
.loading-bg .line.white,
|
||||
.loading-bg .rect.white,
|
||||
.image-sharing-detour-container__edit-content,
|
||||
.nav-accordion .accordion-item.is-expanded,
|
||||
.pv-recent-activity-detail__header-container,
|
||||
.artdeco-hoverable-content--inverse-theme .artdeco-hoverable-content__reset-txt,
|
||||
.artdeco-hoverable-content--inverse-theme .artdeco-hoverable-content__shell,
|
||||
.sort-dropdown__list-item-button:hover,
|
||||
.pv-entity__position-group-pager,
|
||||
.pv-top-card-section__photo-wrapper,
|
||||
.pv-profile-section.background-section.artdeco-container-card.pv-profile-section--reorder-enabled
|
||||
.pv-profile-section
|
||||
.pv-profile-section__section-info,
|
||||
.pv-skill-categories-section__expanded,
|
||||
.pe-hub-drawer__list,
|
||||
artdeco-typeahead-deprecated-results-container .highlighted,
|
||||
artdeco-typeahead-deprecated-results-container li:hover,
|
||||
.feed-shared-sort-comments__list-item-button:hover,
|
||||
.artdeco-carousel-slide,
|
||||
.organization-outlet .org-recently-posted-jobs-module,
|
||||
.organization-outlet .org-recently-posted-jobs-module__show-all-jobs-btn,
|
||||
.org-lcp-job-alert__icon-wrapper,
|
||||
.jobs-top-card,
|
||||
.mn-abi-results,
|
||||
.mn-cohort-view__carousel-wrapper,
|
||||
.feed-follow-nav,
|
||||
.feed-shared-following-filter--active,
|
||||
.feed-shared-following-filter__main-btn-filter {
|
||||
background: #1a2a33 !important;
|
||||
}
|
||||
|
||||
.launchpad-card--size-large,
|
||||
.launchpad-card--is-selected::before,
|
||||
.launchpad,
|
||||
.resume-onboarding,
|
||||
.feed-shared-update--chat-ui .comments-comment-item-content-body,
|
||||
.feed-shared-update--chat-ui .comments-highlighted-comment-item-content-body,
|
||||
.feed-shared-update--chat-ui .comments-reply-item-content-body,
|
||||
.feed-shared-update--chat-ui
|
||||
.comments-comment-item__post-meta.feed-shared-post-meta
|
||||
.feed-shared-post-meta__profile-link,
|
||||
.feed-shared-update--chat-ui
|
||||
.comments-reply-item__post-meta.feed-shared-post-meta
|
||||
.feed-shared-post-meta__profile-link,
|
||||
.feed-shared-inline-show-more-text
|
||||
.feed-shared-inline-show-more-text__see-more-less-toggle,
|
||||
.feed-shared-mini-update-v2,
|
||||
.msg-title-bar__title-bar-title,
|
||||
.msg-conversations-container__title-row,
|
||||
.nt-card,
|
||||
.nt-segment,
|
||||
.jobs-home-hero-promo__header,
|
||||
.job-card--tile,
|
||||
.pb4,
|
||||
.pv4,
|
||||
.wow-marketing-content,
|
||||
.controls-form__profile-visibility-setting,
|
||||
.controls-form__section-settings,
|
||||
.global-footer__lower-row-wrapper,
|
||||
.pe-form-header,
|
||||
.nav-settings__dropdown-title,
|
||||
.pv-accomplishments-block--expanded,
|
||||
#app-boot-bg .feed-profile,
|
||||
.loading-bg .feed-profile,
|
||||
.feed-shared-update--chat-ui .comments-comment-textarea,
|
||||
.feed-shared-update--chat-ui .comments-comment-texteditor,
|
||||
.me-wvmp-viewer-card,
|
||||
.hovercard,
|
||||
.hovercard-bottom,
|
||||
.hovercard-left,
|
||||
.hovercard-right,
|
||||
.hovercard-top,
|
||||
.me-wvmp-main__header-minimal,
|
||||
.pv-recent-activity-top-card,
|
||||
.artdeco-toast-item,
|
||||
.org-people-bar-graph-module,
|
||||
.organization-outlet .org-recently-posted-job-card__link-wrapper,
|
||||
.pv-skills-prompt__canditate:hover,
|
||||
.organization-outlet .org-locations-module__location-card--highlighted,
|
||||
.dropdown .focus,
|
||||
.dropdown dd:hover,
|
||||
.dropdown li:hover,
|
||||
li.global-footer-dropdown__item a:focus,
|
||||
li.global-footer-dropdown__item a:hover,
|
||||
.member-insights-mutual-connection {
|
||||
background: #1f2f38 !important;
|
||||
}
|
||||
|
||||
.t-black,
|
||||
.pv-dashboard-section__all-star-button,
|
||||
.pv-dashboard-section__cta-icon,
|
||||
.pv-profile-section__card-heading,
|
||||
.pv-dashboard-section__title,
|
||||
.artdeco-container-card .card-heading,
|
||||
.pv-dashboard-section__subtitle,
|
||||
.pv-dashboard-section__metric-text,
|
||||
.t-black--light,
|
||||
.button-tertiary-medium-muted,
|
||||
.distance-badge,
|
||||
.pv-browsemap-section__member-detail .actor-name-with-distance,
|
||||
.pv-skills-section__add-text:visited,
|
||||
.EntityLockup-circle-3-ghost-person dt,
|
||||
.EntityLockup-circle-3-ghost-person dt h2,
|
||||
.EntityLockup-circle-3-ghost-person dt h3,
|
||||
.EntityLockup-circle-3-ghost-person dt h4,
|
||||
.EntityLockup-circle-3-ghost-person dt h5,
|
||||
.EntityLockup-circle-3-ghost-person dt h6,
|
||||
.large-header,
|
||||
.large-text,
|
||||
.medium-text,
|
||||
.small-text,
|
||||
body,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
p,
|
||||
.artdeco-button--muted.artdeco-button--secondary,
|
||||
.artdeco-button--muted.artdeco-button--secondary:visited,
|
||||
.artdeco-button--muted.artdeco-button--secondary:visited:hover,
|
||||
.feed-shared-interest-package__cta,
|
||||
.feed-shared-navigation-module__discover-cta,
|
||||
.feed-shared-update--chat-ui .comments-comment-social-bar__reply-action-button,
|
||||
.feed-shared-update--chat-ui .comments-comment-social-bar__likes-count,
|
||||
.feed-shared-update-v2--minimal-padding .feed-shared-update-v2__commentary,
|
||||
.feed-shared-header__text-view a,
|
||||
.feed-shared-update--chat-ui .comments-comment-social-bar__replies-count,
|
||||
.artdeco-button--muted.artdeco-button--tertiary,
|
||||
.artdeco-button--muted.artdeco-button--tertiary:visited,
|
||||
.artdeco-button--muted.artdeco-button--tertiary:visited:hover,
|
||||
linkedin-logo .logo-text,
|
||||
.feed-shared-contextual-header .feed-shared-text-view__hashtag,
|
||||
.feed-shared-contextual-header .feed-shared-text-view__mention,
|
||||
.msg-spinmail-thread__legal-text a,
|
||||
.share-media-button__label--square,
|
||||
.organization-outlet .org-top-card-secondary-content__link--black,
|
||||
.organization-outlet .org-top-card-secondary-content__link--black:visited,
|
||||
.EntityLockup-square-4-ghost-company .badge,
|
||||
.EntityLockup-square-4-ghost-company dd:not(.badge),
|
||||
.EntityLockup-square-4-ghost-school .badge,
|
||||
.EntityLockup-square-4-ghost-school dd:not(.badge),
|
||||
.nt-card-settings-dropdown__trigger-icon,
|
||||
.job-flavors__label,
|
||||
input[type="date"],
|
||||
input[type="datetime"],
|
||||
input[type="datetime-local"],
|
||||
input[type="email"],
|
||||
input[type="month"],
|
||||
input[type="number"],
|
||||
input[type="password"],
|
||||
input[type="search"],
|
||||
input[type="tel"],
|
||||
input[type="text"],
|
||||
input[type="time"],
|
||||
input[type="url"],
|
||||
input[type="week"],
|
||||
textarea,
|
||||
label,
|
||||
artdeco-tabs artdeco-tablist[role="tablist"] artdeco-tab[role="tab"],
|
||||
.wow-marketing-content .you-will-also-know__item__content__header,
|
||||
.job-promotion__testimonial__text,
|
||||
.vanity-name__domain,
|
||||
.vanity-name__display-name,
|
||||
.setting-toggle__name,
|
||||
.topcard-links__description,
|
||||
.topcard__connections,
|
||||
.courses__course,
|
||||
.date-range,
|
||||
.modal .photo-visibility-modal__radio-description,
|
||||
.modal .photo-visibility-modal__secondary-button,
|
||||
select,
|
||||
.photo-filter__footer-button,
|
||||
.hc-answer .collapsible .collapsible-header,
|
||||
.hc-answer .rnt-answer-body ol > li,
|
||||
.hc-answer .rnt-answer-body ul > li,
|
||||
.hc-answer .browse-flow-answer ol > li,
|
||||
.hc-answer .browse-flow-answer ul > li,
|
||||
.nav-accordion .accordion-item .accordion-header,
|
||||
.nav-accordion .accordion-item .nav-link,
|
||||
artdeco-dropdown-item,
|
||||
.categories-col .categories a,
|
||||
.list .subcategory h2,
|
||||
.list--levee > li .heading,
|
||||
.list > li .sub-heading,
|
||||
#settings-nav.four-column ul[role="tablist"] a,
|
||||
.feed-shared-navigation-module__discover-cta:visited,
|
||||
.feed-shared-interest-package__header,
|
||||
.share-media-button__label--square:focus,
|
||||
.share-media-button__label--square:hover,
|
||||
.artdeco-button--inverse.artdeco-button,
|
||||
.artdeco-button--inverse.artdeco-button--primary,
|
||||
.artdeco-button--inverse.artdeco-button--primary:visited,
|
||||
.artdeco-button--inverse.artdeco-button--primary:visited:hover,
|
||||
.artdeco-button--inverse.artdeco-button:visited,
|
||||
.artdeco-button--inverse.artdeco-button:visited:hover,
|
||||
.link-without-visited-state:visited,
|
||||
.pv-accomplishment-entity__title,
|
||||
.list p,
|
||||
.list legend,
|
||||
.artdeco-modal__header h1,
|
||||
.artdeco-modal__header h2,
|
||||
.artdeco-modal__header h3,
|
||||
.artdeco-modal__header h4,
|
||||
.artdeco-modal__header h5,
|
||||
.artdeco-modal__header h6,
|
||||
.msg-entity-lockup .msg-entity-lockup__entity-title,
|
||||
.organization-outlet .org-overflow-menu__item,
|
||||
.EntityLockup-square-4-ghost-company dt,
|
||||
.EntityLockup-square-4-ghost-company dt h2,
|
||||
.EntityLockup-square-4-ghost-company dt h3,
|
||||
.EntityLockup-square-4-ghost-company dt h4,
|
||||
.EntityLockup-square-4-ghost-company dt h5,
|
||||
.EntityLockup-square-4-ghost-company dt h6,
|
||||
.artdeco-icon,
|
||||
.hoverable-link-text,
|
||||
artdeco-toggle label,
|
||||
artdeco-toggle button,
|
||||
.feed-shared-update--chat-ui .feed-shared-main-content--comment,
|
||||
.browse-flow-content-container .hc-answer .answer-header .hc-page-title,
|
||||
.hc-answer .rnt-answer-body p,
|
||||
.hc-answer .browse-flow-answer p,
|
||||
.hc-answer .answer-footer p,
|
||||
.helpfulness .prompt .prompt-title,
|
||||
.browse-back-link,
|
||||
.nav-accordion .accordion-item .content-nav-list .content-nav-item .list-entry,
|
||||
.nav-accordion
|
||||
.accordion-item
|
||||
.content-nav-list
|
||||
.content-nav-item
|
||||
.list-entry:active,
|
||||
.nav-accordion
|
||||
.accordion-item
|
||||
.content-nav-list
|
||||
.content-nav-item
|
||||
.list-entry.active,
|
||||
.popular-actions .popular-actions-header,
|
||||
.popular-header,
|
||||
.home-banner .home-banner-header,
|
||||
.home-banner .home-banner-description,
|
||||
.language-switcher__form-select,
|
||||
.popular-actions .forum-driver-main .forum-driver-title,
|
||||
.browse-children-header-wrapper .browse-children-header,
|
||||
.nav-accordion .accordion-item .nav-link:hover,
|
||||
.nav-accordion .accordion-item .nav-link:focus,
|
||||
.hc-answer .answer-header .hc-page-title,
|
||||
.hc-answer .rnt-answer-body ol > li:first-of-type,
|
||||
.hc-answer .rnt-answer-body ul > li:first-of-type,
|
||||
.hc-answer .browse-flow-answer ol > li:first-of-type,
|
||||
.hc-answer
|
||||
.browse-flow-answer
|
||||
ul
|
||||
> li:first-of-type.hc-answer
|
||||
.answer-header
|
||||
.hc-page-title,
|
||||
.global-footer__upper-row-item-link--available,
|
||||
.feed-shared-update--chat-ui .comments-comment-social-bar__action-group,
|
||||
.pv-profile-wrapper
|
||||
.pv-recent-activity-detail__right-rail
|
||||
.interest-grouping
|
||||
.pv-profile-section__card-heading,
|
||||
.pv-profile-wrapper
|
||||
.pv-recent-activity-detail__right-rail
|
||||
.interest-grouping
|
||||
.pv-profile-section__card-item
|
||||
.pv-entity__summary-info
|
||||
h3,
|
||||
.feed-shared-sort-comments__list-item-button,
|
||||
.pv-browsemap-section__member-detail .distance-badge,
|
||||
.artdeco-button--inverse.artdeco-button--primary:focus,
|
||||
.artdeco-button--inverse.artdeco-button--primary:hover,
|
||||
.artdeco-button--inverse.artdeco-button:focus,
|
||||
.artdeco-button--inverse.artdeco-button:hover,
|
||||
.artdeco-button--inverse.artdeco-button--primary:active,
|
||||
.artdeco-button--inverse.artdeco-button:active,
|
||||
.artdeco-hoverable-content--inverse-theme .artdeco-hoverable-content__shell p,
|
||||
.dropdown dd a,
|
||||
.dropdown dd a:visited,
|
||||
.dropdown li a,
|
||||
.dropdown li a:visited,
|
||||
.artdeco-toast-item__message,
|
||||
.org-page-navigation__item-anchor:visited,
|
||||
.artdeco-carousel-container .pagination-btns button,
|
||||
.job-card__title,
|
||||
.job-card__company-name,
|
||||
.jobs-box__sub-title,
|
||||
.jobs-box__list-item,
|
||||
.jobs-coworkers-classmates__flavor-label,
|
||||
.jobs-coworkers-classmates__header,
|
||||
.jobs-box__html-content p,
|
||||
.jobs-top-card__company-url,
|
||||
.jobs-top-card__company-url:hover,
|
||||
.jobs-top-card__company-url:visited,
|
||||
.jobs-upsell__header,
|
||||
.jobs-upsell__feature-description,
|
||||
.jobs-box__body,
|
||||
.jobs-options__list dl a,
|
||||
.jobs-options__list dl button,
|
||||
.jobs-options__list ol a,
|
||||
.jobs-options__list ol button,
|
||||
.jobs-options__list ul a,
|
||||
.jobs-options__list ul button,
|
||||
artdeco-dropdown-header,
|
||||
artdeco-dropdown-header dl > dt,
|
||||
artdeco-dropdown-header h2,
|
||||
artdeco-dropdown-header h3,
|
||||
artdeco-dropdown-header h4,
|
||||
artdeco-dropdown-header h5,
|
||||
artdeco-dropdown-header h6,
|
||||
.jobs-box__html-content li,
|
||||
.jobs-box__html-content ol,
|
||||
.jobs-box__html-content ul,
|
||||
.pe-treasury-view__link-button,
|
||||
.pv-entity__extra-details .lt-line-clamp__more,
|
||||
.settings-header__title,
|
||||
.topcard__name,
|
||||
.settings-header__subtitle,
|
||||
.profile-off-notice__description,
|
||||
.summary__description,
|
||||
.education-item__degree-info,
|
||||
.education-item__activities-and-societies,
|
||||
.volunteering-item__company-name,
|
||||
.certification-item__certificate-authority-name,
|
||||
.certification-item__certificate-authority-name a,
|
||||
.skills-cta__join-link,
|
||||
.position__company-name,
|
||||
.experience-group-item__company,
|
||||
.courses__course,
|
||||
.profinder-recommendations__quote,
|
||||
.recommendations__quote,
|
||||
.pp-section__header,
|
||||
.topcard__headline,
|
||||
.controls-form__card-header,
|
||||
.topcard__location,
|
||||
.topcard__industry,
|
||||
.topcard__recommendations,
|
||||
.feed-activity__meta-action-description,
|
||||
.feed-activity__content-summary,
|
||||
.feed-article-card__content-summary,
|
||||
.experience-group-header__duration,
|
||||
.position-body__description,
|
||||
.controls__header-description,
|
||||
.vanity-name__create-vanity-text,
|
||||
.vanity-name__description,
|
||||
.vanity-name__domain,
|
||||
.vanity-name__display-name,
|
||||
.vanity-name__note,
|
||||
.vanity-name__input-box,
|
||||
.edit-content__description,
|
||||
.create-badge__description,
|
||||
.controls-form__setting--basics label,
|
||||
.controls-form__setting--picture label,
|
||||
.topcard__connections,
|
||||
.date-range,
|
||||
.education-item__description,
|
||||
.volunteering-item__cause,
|
||||
.volunteering-item__description,
|
||||
.awards__award-description,
|
||||
.awards__award-issuer,
|
||||
.position-body__location,
|
||||
.languages__language-proficiency,
|
||||
.patents__patent-contributors,
|
||||
.patents__patent-description,
|
||||
.patents__patent-office-and-number,
|
||||
.patents__patent-status,
|
||||
.projects__project-contributors,
|
||||
.projects__project-description,
|
||||
.publications__publication-contributors,
|
||||
.publications__publication-description,
|
||||
.publications__publication-publisher,
|
||||
.tooltip,
|
||||
.scores__item-score,
|
||||
.scores__item-description,
|
||||
.profinder-recommendations__description,
|
||||
.recommendations__description,
|
||||
.organizations__item-position,
|
||||
.organizations__item-date,
|
||||
.organizations__item-description,
|
||||
.controls-form__setting-value-description,
|
||||
.section-item__title,
|
||||
.feed-activity__title,
|
||||
.feed-article-card__title,
|
||||
.awards__award-title,
|
||||
.languages__language-name,
|
||||
.patents__patent-title,
|
||||
.projects__project-title,
|
||||
.projects__project-title > a,
|
||||
.publications__publication-title,
|
||||
.scores__item-title,
|
||||
.organizations__item-title,
|
||||
.controls__header-title,
|
||||
.vanity-name__title,
|
||||
.edit-content__title,
|
||||
.create-badge__title,
|
||||
.feed-shared-promo__title,
|
||||
.psa-company__entity dt,
|
||||
.psa-company__entity dt h2,
|
||||
.psa-company__entity dt h3,
|
||||
.psa-company__entity dt h4,
|
||||
.psa-company__entity dt h5,
|
||||
.psa-company__entity dt h6,
|
||||
.psa-company__entity dd:not(.badge),
|
||||
.EntityLockup-square-4 dt,
|
||||
.EntityLockup-square-4 dt h2,
|
||||
.EntityLockup-square-4 dt h3,
|
||||
.EntityLockup-square-4 dt h4,
|
||||
.EntityLockup-square-4 dt h5,
|
||||
.EntityLockup-square-4 dt h6,
|
||||
.msg-premium-mailboxes__link,
|
||||
.msg-premium-mailboxes__link:visited,
|
||||
.launchpad-community-connect .launchpad-card__title,
|
||||
.artdeco-pagination__indicator--number:not(.selected) > button,
|
||||
.pv-contact-info__contact-icon,
|
||||
.launchpad-pymk-modal #launchpad-pymk-modal__header-title,
|
||||
.launchpad-pymk-modal #launchpad-pymk-modal__header-subtitle,
|
||||
.follows-recommendation-card__follow-btn.is-following,
|
||||
.error-headline,
|
||||
.error-description {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.global-footer__lower-row-item-link,
|
||||
.privacy-dropdown__button,
|
||||
.global-footer__lower-row-item,
|
||||
.comments-comment-mentions-texteditor .mentions-texteditor__content,
|
||||
.dropdown dd a,
|
||||
.dropdown dd a:visited,
|
||||
.dropdown li a,
|
||||
.dropdown li a:visited {
|
||||
color: #ccc !important;
|
||||
}
|
||||
|
||||
#extended-nav-search input,
|
||||
.pv-browsemap-section__member-detail .browsemap-headline,
|
||||
.pv-entity__secondary-title,
|
||||
.EntityLockup-circle-3-ghost-person .badge,
|
||||
.EntityLockup-circle-3-ghost-person dd:not(.badge),
|
||||
.feed-shared-interest-package__entity-link.feed-shared-interest-package__entity-link,
|
||||
.msg-search-form,
|
||||
.wow-marketing-content .you-will-also-know__item__content__text,
|
||||
.global-footer__link,
|
||||
.comments-comment-mentions-texteditor
|
||||
.mentions-texteditor__content
|
||||
.link-without-visited-state:not(:hover).t-black,
|
||||
.popular-actions .forum-driver-main .forum-driver-explanation-snippet,
|
||||
.nav-accordion .accordion-item .accordion-header:hover,
|
||||
.nav-accordion .accordion-item .accordion-header:focus,
|
||||
.list-entry:hover,
|
||||
.link-without-visited-state:not(:hover).t-black,
|
||||
.artdeco-carousel-container .pagination-btns button.disabled,
|
||||
.artdeco-carousel-container .pagination-btns button:disabled,
|
||||
.artdeco-entity-lockup__title,
|
||||
.artdeco-empty-state__headline,
|
||||
.job-card__location,
|
||||
.job-card__listed-status,
|
||||
.job-card__easy-apply-text,
|
||||
.search-result__social-proof-link,
|
||||
.search-result__social-proof-link:hover,
|
||||
.search-result__social-proof-link:hover:visited,
|
||||
.search-result__social-proof-link:visited,
|
||||
.link-without-visited-state:not(:hover).t-black--light,
|
||||
.pv-certification-entity .pv-certifications-entity__credential-link,
|
||||
blockquote,
|
||||
.EntityLockup-square-4 .badge,
|
||||
.EntityLockup-square-4 dd:not(.badge),
|
||||
.nt-card__headline:visited,
|
||||
.nt-card__headline:focus,
|
||||
.nt-card__headline:hover,
|
||||
.artdeco-button--muted.artdeco-button--disabled.artdeco-button--tertiary,
|
||||
.artdeco-button--muted.artdeco-button--tertiary:disabled,
|
||||
artdeco-tabs artdeco-tablist[role="tablist"] artdeco-tab[role="tab"]:hover,
|
||||
artdeco-tabs[theme="pro"]
|
||||
artdeco-tablist[role="tablist"]
|
||||
artdeco-tab[role="tab"]:hover,
|
||||
a.artdeco-toast-item__cta,
|
||||
a.artdeco-toast-item__cta:hover,
|
||||
a.artdeco-toast-item__cta:visited,
|
||||
a.artdeco-toast-item__cta:visited:hover,
|
||||
.org-page-navigation__item-anchor:focus,
|
||||
.org-page-navigation__item-anchor:hover,
|
||||
.org-page-navigation__item-anchor:visited:focus,
|
||||
.org-page-navigation__item-anchor:visited:hover {
|
||||
color: #999 !important;
|
||||
}
|
||||
|
||||
li-icon .active-item,
|
||||
li-icon .small-icon {
|
||||
fill: #ccc !important;
|
||||
}
|
||||
|
||||
.launchpad-pymk-modal__header,
|
||||
.artdeco-modal__actionbar,
|
||||
.launchpad-pymk-list__item,
|
||||
.pv-course-recommendations,
|
||||
.feed-shared-navigation-module__discover-cta,
|
||||
.feed-right-rail__container,
|
||||
.global-footer-compact,
|
||||
.feed-right-rail,
|
||||
.feed-right-rail__top-module,
|
||||
.feed-shared-article--with-large-image
|
||||
.feed-shared-article__description-container,
|
||||
.msg-spinmail-thread__message-header,
|
||||
.msg-thread,
|
||||
.msg-title-bar__title-bar-title,
|
||||
.msg-messaging-container__core-rail,
|
||||
.msg-conversation-card__content,
|
||||
.msg-search-form__title-bar-title,
|
||||
.msg-conversations-container__title-row,
|
||||
.nt-settings-summary,
|
||||
.nt-card,
|
||||
.nt-segment-header,
|
||||
.jobs-home-hero-promo__header,
|
||||
.feed-shared-header,
|
||||
.social-details-social-counts,
|
||||
.modal__header,
|
||||
.pv-profile-section.background-section.artdeco-container-card.pv-profile-section--reorder-enabled
|
||||
.pv-profile-section
|
||||
.pv-profile-section__sortable-item::after,
|
||||
.list > li,
|
||||
.pe-hub-card,
|
||||
#settings-nav .tablist-wrapper,
|
||||
.pv-skill-category-entity__top-skill,
|
||||
.pv-accomplishments-block__list-container::after,
|
||||
.pv-accomplishments-block--expanded,
|
||||
.feed-shared-update--chat-ui .comments-comment-textarea,
|
||||
.feed-shared-update--chat-ui .comments-comment-texteditor,
|
||||
.share-suggested-hashtags,
|
||||
.share-box__feedback-msg-container,
|
||||
.share-box__footer,
|
||||
.popular-list .popular-list-item,
|
||||
.pv-entity__position-group-pager::after,
|
||||
.pe-hub-drawer,
|
||||
.pe-hub-section__list,
|
||||
.artdeco-button:focus,
|
||||
.mn-discovery-cohorts__see-all-card,
|
||||
.feed-shared-aggregated-content__list-item,
|
||||
.feed-shared-contextual-header,
|
||||
.org-people-bar-graph-module,
|
||||
.jobs-hero-image-container,
|
||||
.pv-recommendation-entity,
|
||||
.psa-company__item::after,
|
||||
.psa-card__header--has-border,
|
||||
.psa-keyword__item::after,
|
||||
.msg-premium-mailboxes__mailbox,
|
||||
.member-insights-mutual-connection,
|
||||
.global-footer--static,
|
||||
.share-box__article-cta,
|
||||
.search-typeahead-v2__hit--escape-hatch {
|
||||
border: none !important;
|
||||
outline: none !important;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.organization-outlet .org-location-viewer__location-card:last-child,
|
||||
.organization-outlet .org-locations-module__left-panel-header,
|
||||
.organization-outlet .org-locations-module__location-card:last-child {
|
||||
border-bottom: none;
|
||||
box-shadow: 4px 0 0 #0073b1 inset;
|
||||
}
|
||||
|
||||
.toast__dismiss {
|
||||
width: 32px;
|
||||
height: 48px;
|
||||
}
|
||||
|
||||
.msg-conversations-container__pillar {
|
||||
border-right: 0.4px solid #1f2f38;
|
||||
}
|
||||
|
||||
.topcard__profile-image.lazy-loaded
|
||||
.profile-photo-edit__edit-icon.profile-photo-edit__edit-icon.profile-photo-edit__edit-icon,
|
||||
.discover-person-card__image,
|
||||
.pe-top-card-form__photo-wrapper {
|
||||
border: 3px solid #1a2a33;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.msg-conversations-container__convo-item-link.active {
|
||||
box-shadow: 4px 0 0 #0073b1 inset;
|
||||
}
|
||||
|
||||
#app-boot-bg .feed-profile,
|
||||
.loading-bg .feed-profile {
|
||||
border-color: #1a2a33;
|
||||
}
|
||||
|
||||
.jobs-options__list:after,
|
||||
.msg-search-form__filters-dropdown:after,
|
||||
artdeco-dropdown-content.artdeco-dropdown-with-arrow[placement="bottom"]::after {
|
||||
border-bottom-color: #162228;
|
||||
}
|
||||
|
||||
.controls-form__setting--basics input[type="radio"] + label:before,
|
||||
.controls-form__setting--basics input[type="checkbox"] + label:before,
|
||||
.controls-form__setting--picture input[type="radio"] + label:before,
|
||||
.controls-form__setting--picture input[type="checkbox"] + label:before {
|
||||
box-shadow: 0 0 0 1px #ccc inset;
|
||||
}
|
||||
|
||||
.pv-top-card-v2-section__photo-wrapper,
|
||||
.pv-top-card-section__photo,
|
||||
.EntityPhoto-circle-4,
|
||||
.profile-photo-edit,
|
||||
.profile-photo-edit__preview,
|
||||
.nav-item__profile-member-photo,
|
||||
.EntityPhoto-circle-7,
|
||||
.EntityPhoto-circle-1 {
|
||||
border-radius: 5%;
|
||||
}
|
||||
|
||||
.entity-list-item,
|
||||
.feed-identity-module__anchored-widget,
|
||||
.feed-shared-interest-package__section-header,
|
||||
.share-box__article-cta,
|
||||
.profile-background-image-edit-button__edit-icon.profile-background-image-edit-button__edit-icon.profile-background-image-edit-button__edit-icon,
|
||||
.nav-settings__block,
|
||||
.pv-accomplishments-section::after,
|
||||
.side-panel__scroll-affordance,
|
||||
.nav-accordion .accordion-item.is-expanded:after,
|
||||
.pv-profile-wrapper .pv-content__right-rail .profile-section,
|
||||
.pv-profile-wrapper .pv-content__right-rail .pv-profile-section,
|
||||
.member-insights-mutual-connection__picture,
|
||||
.member-insights-mutual-connection::after,
|
||||
.pv-contact-info--for-top-card-v2,
|
||||
.mn-abi-results__header {
|
||||
background: none !important;
|
||||
}
|
||||
|
||||
#launchpad-wormhole,
|
||||
.pb0,
|
||||
.pv0 {
|
||||
padding-bottom: 15px !important;
|
||||
}
|
||||
|
||||
.jobs-description--is-truncated .jobs-description__container::after,
|
||||
.jobs-company--is-truncated .jobs-company__card::after,
|
||||
.pv-about__summary-text .lt-line-clamp__ellipsis::before {
|
||||
filter: invert(1);
|
||||
}
|
||||
|
||||
.organization-outlet .org-bar-graph-element__percentage-bar-background {
|
||||
fill: #1818184d;
|
||||
}
|
@ -0,0 +1 @@
|
||||
<svg height="80" width="80" xmlns="http://www.w3.org/2000/svg"><mask id="a" fill="#fff"><path d="M39.998 80H0V0h79.997v80z" fill-rule="evenodd"/></mask><g fill="none" fill-rule="evenodd"><path d="M74.08 0H5.904C2.647 0 0 2.584 0 5.769v68.46C0 77.412 2.647 80 5.904 80H74.08c3.264 0 5.917-2.587 5.917-5.772V5.768C79.997 2.585 77.344 0 74.08 0" fill="#0065a1" mask="url(#a)"/><g fill="#fefefe"><path d="M17.79 11.013c3.795 0 6.878 3.083 6.878 6.883a6.883 6.883 0 0 1-6.877 6.88 6.878 6.878 0 0 1-6.877-6.88c0-3.8 3.075-6.883 6.877-6.883zm-5.934 57.155h11.87V29.991h-11.87zM31.168 29.99h11.38v5.221h.163c1.584-3.003 5.455-6.166 11.227-6.166 12.015 0 14.233 7.904 14.233 18.184v20.94H56.31V49.602c0-4.429-.078-10.123-6.166-10.123-6.174 0-7.117 4.826-7.117 9.804v18.884h-11.86z"/></g></g></svg>
|
After Width: | Height: | Size: 789 B |
@ -0,0 +1 @@
|
||||
module.exports = Ferdi => Ferdi;
|
@ -0,0 +1,9 @@
|
||||
{
|
||||
"id": "linkedin",
|
||||
"name": "LinkedIn",
|
||||
"version": "1.2.2",
|
||||
"license": "MIT",
|
||||
"config": {
|
||||
"serviceURL": "https://www.linkedin.com/messaging"
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
module.exports = Ferdi => {
|
||||
const getMessages = () => {
|
||||
let count = 0;
|
||||
|
||||
if (window.location.pathname.includes('messaging')) {
|
||||
count = document.querySelectorAll(
|
||||
'.msg-conversation-card__unread-count',
|
||||
).length;
|
||||
} else {
|
||||
const element = document.querySelector(
|
||||
'.nav-item--messaging .nav-item__badge-count',
|
||||
);
|
||||
if (element) {
|
||||
count = Ferdi.safeParseInt(element.textContent);
|
||||
}
|
||||
}
|
||||
|
||||
Ferdi.setBadge(count);
|
||||
};
|
||||
|
||||
Ferdi.loop(getMessages);
|
||||
};
|
@ -0,0 +1 @@
|
||||
<svg height="80" width="80" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><g fill="#e01e5a"><path d="M17.003 50.502c0 4.573-3.735 8.308-8.308 8.308S.386 55.075.386 50.502s3.736-8.309 8.309-8.309h8.308zM21.19 50.502c0-4.573 3.735-8.309 8.308-8.309s8.309 3.736 8.309 8.309v20.803c0 4.573-3.736 8.309-8.309 8.309-4.573 0-8.308-3.736-8.308-8.309z"/></g><g fill="#36c5f0"><path d="M29.498 17.003c-4.573 0-8.308-3.735-8.308-8.308S24.925.386 29.498.386s8.309 3.736 8.309 8.309v8.308zM29.498 21.19c4.573 0 8.309 3.735 8.309 8.308s-3.736 8.309-8.309 8.309H8.695c-4.573 0-8.309-3.736-8.309-8.309 0-4.573 3.736-8.308 8.309-8.308z"/></g><g fill="#2eb67d"><path d="M62.997 29.498c0-4.573 3.735-8.308 8.308-8.308s8.309 3.735 8.309 8.308-3.736 8.309-8.309 8.309h-8.308zM58.81 29.498c0 4.573-3.735 8.309-8.308 8.309s-8.309-3.736-8.309-8.309V8.695c0-4.573 3.736-8.309 8.309-8.309 4.573 0 8.308 3.736 8.308 8.309z"/></g><g fill="#ecb22e"><path d="M50.502 62.997c4.573 0 8.308 3.735 8.308 8.308s-3.735 8.309-8.308 8.309-8.309-3.736-8.309-8.309v-8.308zM50.502 58.81c-4.573 0-8.309-3.735-8.309-8.308s3.736-8.309 8.309-8.309h20.803c4.573 0 8.309 3.736 8.309 8.309 0 4.573-3.736 8.308-8.309 8.308z"/></g></g></svg>
|
After Width: | Height: | Size: 1.2 KiB |
@ -0,0 +1 @@
|
||||
module.exports = Ferdi => Ferdi;
|
@ -0,0 +1,13 @@
|
||||
{
|
||||
"id": "slack",
|
||||
"name": "Slack",
|
||||
"version": "1.3.3",
|
||||
"license": "MIT",
|
||||
"config": {
|
||||
"serviceURL": "https://{teamId}.slack.com",
|
||||
"hasNotificationSound": true,
|
||||
"hasIndirectMessages": true,
|
||||
"hasTeamId": true,
|
||||
"urlInputSuffix": ".slack.com"
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
#banner {
|
||||
display: none !important;
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
const _path = _interopRequireDefault(require('path'));
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : { default: obj };
|
||||
}
|
||||
|
||||
const SELECTOR_CHANNELS_UNREAD =
|
||||
'.p-channel_sidebar__channel--unread:not(.p-channel_sidebar__channel--muted)';
|
||||
|
||||
module.exports = Ferdi => {
|
||||
const getMessages = () => {
|
||||
const directMessages = document.querySelectorAll(
|
||||
`${SELECTOR_CHANNELS_UNREAD} .p-channel_sidebar__badge, .p-channel_sidebar__link--unread:not([data-sidebar-link-id="Punreads"]):not([data-sidebar-link-id="Pdrafts"]):not([data-sidebar-link-id="Pdms"])`,
|
||||
).length;
|
||||
const allMessages =
|
||||
document.querySelectorAll(SELECTOR_CHANNELS_UNREAD).length -
|
||||
directMessages;
|
||||
Ferdi.setBadge(directMessages, allMessages);
|
||||
};
|
||||
|
||||
const getActiveDialogTitle = () => {
|
||||
const element = document.querySelector(
|
||||
'.p-channel_sidebar__channel--selected .p-channel_sidebar__name',
|
||||
);
|
||||
|
||||
Ferdi.setDialogTitle(
|
||||
element && element.firstChild ? element.firstChild.textContent : null,
|
||||
);
|
||||
};
|
||||
|
||||
const loopFunc = () => {
|
||||
getMessages();
|
||||
getActiveDialogTitle();
|
||||
};
|
||||
|
||||
Ferdi.loop(loopFunc);
|
||||
|
||||
const getTeamIcon = function getTeamIcon(count = 0) {
|
||||
let countTeamIconCheck = count;
|
||||
let bgUrl = null;
|
||||
const teamMenu = document.querySelector(
|
||||
'#team-menu-trigger, .p-ia__sidebar_header__team_name',
|
||||
);
|
||||
|
||||
if (teamMenu) {
|
||||
teamMenu.click();
|
||||
const icon = document.querySelector('.c-team_icon');
|
||||
|
||||
if (icon) {
|
||||
bgUrl = window
|
||||
.getComputedStyle(icon, null)
|
||||
.getPropertyValue('background-image');
|
||||
bgUrl = /^url\((["']?)(.*)\1\)$/.exec(bgUrl);
|
||||
bgUrl = bgUrl ? bgUrl[2] : '';
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
document.querySelector('.ReactModal__Overlay').click();
|
||||
}, 10);
|
||||
}
|
||||
|
||||
countTeamIconCheck += 1;
|
||||
|
||||
if (bgUrl) {
|
||||
Ferdi.setAvatarImage(bgUrl);
|
||||
} else if (countTeamIconCheck <= 5) {
|
||||
setTimeout(() => {
|
||||
getTeamIcon(countTeamIconCheck + 1);
|
||||
}, 2000);
|
||||
}
|
||||
};
|
||||
|
||||
setTimeout(() => {
|
||||
getTeamIcon();
|
||||
}, 4000);
|
||||
|
||||
Ferdi.injectCSS(_path.default.join(__dirname, 'service.css'));
|
||||
};
|
373
dotfiles_github/homebrew/pamidi/pamidi.sh
Executable file
@ -0,0 +1,373 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Assumes a stock PopOS installation with xdotool
|
||||
#
|
||||
# X-Touch Mini Mappings (Mackie Mode)
|
||||
# =====================
|
||||
# Col#, Knob press, knob turn, top button, bottom button
|
||||
# 1, 32, 16, 89, 87
|
||||
# 2, 33, 17, 90, 88
|
||||
# 3, 34, 18, 40, 91
|
||||
# 4, 35, 19, 41, 92
|
||||
# 5, 36, 20, 42, 86
|
||||
# 6, 37, 21, 43, 93
|
||||
# 7, 38, 22, 44, 94
|
||||
# 8, 39, 23, 45, 95
|
||||
#
|
||||
# Fader = 8
|
||||
# ---------------------
|
||||
# Misc. Info
|
||||
# Knobs and buttons are all channel 0
|
||||
# Fader is channel 8
|
||||
# Button presses (including knobs) are notes at velocity 127
|
||||
# Knob turns counter-clockwise are a value of 64 + n,
|
||||
# where n is a small number reflecting the amount it was turned within the last polling period
|
||||
# Knob turns clockwise are a value of 0 + n,
|
||||
# where n is a small number reflecting the amount it was turned within the last polling period
|
||||
|
||||
# Default column apps
|
||||
# When you (re)start the script, it looks for the pids of the binaries specified for each column and sets the pid for each column
|
||||
# These are overridden for the session by the bind_application function
|
||||
|
||||
initialize(){
|
||||
echo "Initializing"
|
||||
echo "Checking for xdotool"
|
||||
if ! hash xdotool &> /dev/null; then
|
||||
echo "xdotool could not be found, exiting"
|
||||
exit 2
|
||||
else
|
||||
echo "xdotool found"
|
||||
fi
|
||||
col_1_app_pid=-1
|
||||
col_2_app_pid=-1
|
||||
col_3_app_pid=-1
|
||||
col_4_app_pid=-1
|
||||
col_5_app_pid=-1
|
||||
col_6_app_pid=-1
|
||||
col_7_app_pid=-1
|
||||
col_8_app_pid=-1
|
||||
assign_profile_1
|
||||
print_col_app_ids
|
||||
notify-send "Initializing PAControl"
|
||||
}
|
||||
|
||||
assign_profile_1() {
|
||||
echo "Setting profile 1"
|
||||
}
|
||||
|
||||
assign_profile_2() {
|
||||
echo "Setting profile 2"
|
||||
}
|
||||
|
||||
print_col_app_ids() {
|
||||
echo "Col 1: $col_1_app_pid"
|
||||
echo "Col 2: $col_2_app_pid"
|
||||
echo "Col 3: $col_3_app_pid"
|
||||
echo "Col 4: $col_4_app_pid"
|
||||
echo "Col 5: $col_5_app_pid"
|
||||
echo "Col 6: $col_6_app_pid"
|
||||
echo "Col 7: $col_7_app_pid"
|
||||
echo "Col 8: $col_8_app_pid"
|
||||
}
|
||||
|
||||
change_volume_mackie() {
|
||||
# take the pid of an app
|
||||
# set the volume of all streams for that app
|
||||
|
||||
# get the volume change amount
|
||||
if (( $2 >= 64 )); then
|
||||
vol_change="-$(expr $2 - 64)"
|
||||
else
|
||||
vol_change="+$2"
|
||||
fi
|
||||
|
||||
# take the pid and change the volume for each of its streams
|
||||
app_pid=$1
|
||||
|
||||
all_sink_inputs="$(pacmd list-sink-inputs)"
|
||||
all_sink_inputs="$(paste \
|
||||
<(printf '%s' "$all_sink_inputs" | grep 'application.process.id' | cut -d'"' -f 2) \
|
||||
<(printf '%s' "$all_sink_inputs" | grep 'index: ' | rev | cut -d' ' -f 1 | rev))"
|
||||
|
||||
echo "$all_sink_inputs" | while read line ; do
|
||||
pid=$(echo "$line" | cut -f1)
|
||||
if [[ "$pid" == "$1" ]]; then
|
||||
stream_id="$(echo "$line" | cut -f2)"
|
||||
pactl set-sink-input-volume $stream_id $vol_change% 2> /dev/null
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
change_volume_standard() {
|
||||
# take the pid of an app
|
||||
# set the volume of all streams for that app
|
||||
|
||||
# get the new volume value
|
||||
|
||||
new_vol=$2
|
||||
|
||||
# take the pid and change the volume for each of its streams
|
||||
app_pid=$1
|
||||
|
||||
all_sink_inputs="$(pacmd list-sink-inputs)"
|
||||
all_sink_inputs="$(paste \
|
||||
<(printf '%s' "$all_sink_inputs" | grep 'application.process.id' | cut -d'"' -f 2) \
|
||||
<(printf '%s' "$all_sink_inputs" | grep 'index: ' | rev | cut -d' ' -f 1 | rev))"
|
||||
|
||||
echo "$all_sink_inputs" | while read line ; do
|
||||
pid=$(echo "$line" | cut -f1)
|
||||
if [[ "$pid" == "$1" ]]; then
|
||||
stream_id="$(echo "$line" | cut -f2)"
|
||||
pactl set-sink-input-volume $stream_id $new_vol% 2> /dev/null
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
toggle_mute() {
|
||||
# take the pid of an app
|
||||
# toggle mute all streams for that app
|
||||
|
||||
app_pid=$1
|
||||
|
||||
all_sink_inputs="$(pacmd list-sink-inputs)"
|
||||
all_sink_inputs="$(paste \
|
||||
<(printf '%s' "$all_sink_inputs" | grep 'application.process.id' | cut -d'"' -f 2) \
|
||||
<(printf '%s' "$all_sink_inputs" | grep 'index: ' | rev | cut -d' ' -f 1 | rev))"
|
||||
|
||||
echo "$all_sink_inputs" | while read line ; do
|
||||
pid=$(echo "$line" | cut -f1)
|
||||
if [[ "$pid" == "$1" ]]; then
|
||||
stream_id="$(echo "$line" | cut -f2)"
|
||||
pactl set-sink-input-mute $stream_id toggle
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
mute_on() {
|
||||
# take the pid of an app
|
||||
# mute all streams for that app
|
||||
|
||||
app_pid=$1
|
||||
|
||||
all_sink_inputs="$(pacmd list-sink-inputs)"
|
||||
all_sink_inputs="$(paste \
|
||||
<(printf '%s' "$all_sink_inputs" | grep 'application.process.id' | cut -d'"' -f 2) \
|
||||
<(printf '%s' "$all_sink_inputs" | grep 'index: ' | rev | cut -d' ' -f 1 | rev))"
|
||||
|
||||
echo "$all_sink_inputs" | while read line ; do
|
||||
pid=$(echo "$line" | cut -f1)
|
||||
if [[ "$pid" == "$1" ]]; then
|
||||
stream_id="$(echo "$line" | cut -f2)"
|
||||
pactl set-sink-input-mute $stream_id on
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
mute_off() {
|
||||
# take the pid of an app
|
||||
# unmute all streams for that app
|
||||
|
||||
app_pid=$1
|
||||
|
||||
all_sink_inputs="$(pacmd list-sink-inputs)"
|
||||
all_sink_inputs="$(paste \
|
||||
<(printf '%s' "$all_sink_inputs" | grep 'application.process.id' | cut -d'"' -f 2) \
|
||||
<(printf '%s' "$all_sink_inputs" | grep 'index: ' | rev | cut -d' ' -f 1 | rev))"
|
||||
|
||||
echo "$all_sink_inputs" | while read line ; do
|
||||
pid=$(echo "$line" | cut -f1)
|
||||
if [[ "$pid" == "$1" ]]; then
|
||||
stream_id="$(echo "$line" | cut -f2)"
|
||||
pactl set-sink-input-mute $stream_id off
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
get_stream_index_from_pid(){
|
||||
all_sink_inputs="$(pacmd list-sink-inputs)"
|
||||
all_sink_inputs="$(paste \
|
||||
<(printf '%s' "$all_sink_inputs" | grep 'application.process.id' | cut -d'"' -f 2) \
|
||||
<(printf '%s' "$all_sink_inputs" | grep 'index: ' | rev | cut -d' ' -f 1 | rev))"
|
||||
|
||||
stream_ids=""
|
||||
echo "$all_sink_inputs" | while read line ; do
|
||||
pid=$(echo "$line" | cut -f1)
|
||||
if [[ "$pid" == "$1" ]]; then
|
||||
echo "$line" | cut -f2
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
get_binary_from_pid(){
|
||||
output="$(paste -d"\t" \
|
||||
<(printf '%s' "$output" | grep 'application.process.id' | cut -d'"' -f 2) \
|
||||
<(printf '%s' "$output" | grep 'application.process.binary' | cut -d'"' -f 2))"
|
||||
|
||||
echo "$output" | while read line ; do
|
||||
pid=$(echo "$line" | cut -f1)
|
||||
if [[ "$pid" == "$1" ]]; then
|
||||
echo "$line" | cut -f2
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
bind_application() {
|
||||
window_pid="$(xdotool getactivewindow getwindowpid)"
|
||||
window_name="$(xdotool getactivewindow getwindowname)"
|
||||
col_id=$1
|
||||
#echo "window_pid=$window_pid"
|
||||
#echo "window_name=$window_name"
|
||||
#echo "col_id=$col_id"
|
||||
|
||||
case "$col_id" in
|
||||
"1" ) col_1_app_pid=$window_pid && notify-send "Set knob $col_id to $window_name" ;;
|
||||
"2" ) col_2_app_pid=$window_pid && notify-send "Set knob $col_id to $window_name" ;;
|
||||
"3" ) col_3_app_pid=$window_pid && notify-send "Set knob $col_id to $window_name" ;;
|
||||
"4" ) col_4_app_pid=$window_pid && notify-send "Set knob $col_id to $window_name" ;;
|
||||
"5" ) col_5_app_pid=$window_pid && notify-send "Set knob $col_id to $window_name" ;;
|
||||
"6" ) col_6_app_pid=$window_pid && notify-send "Set knob $col_id to $window_name" ;;
|
||||
"7" ) col_7_app_pid=$window_pid && notify-send "Set knob $col_id to $window_name" ;;
|
||||
"8" ) col_8_app_pid=$window_pid && notify-send "Set knob $col_id to $window_name" ;;
|
||||
esac
|
||||
|
||||
}
|
||||
|
||||
media_play_pause() {
|
||||
xdotool key XF86AudioPlay
|
||||
}
|
||||
media_prev() {
|
||||
xdotool key XF86AudioPrev
|
||||
}
|
||||
media_next() {
|
||||
xdotool key XF86AudioNext
|
||||
}
|
||||
media_stop() {
|
||||
xdotool key XF86AudioStop
|
||||
}
|
||||
|
||||
main_mackie(){
|
||||
aseqdump -p "X-TOUCH MINI" | \
|
||||
while IFS=" ," read src ev1 ev2 ch label1 data1 label2 data2 rest; do
|
||||
#echo "$ev1 $ev2 $data1 $data2"
|
||||
case "$ev1 $ev2 $data1 $data2" in
|
||||
# column 1
|
||||
"Note on 32"* ) bind_application 1 ;; # knob press
|
||||
"Note on 89"* ) toggle_mute $col_1_app_pid ;; # top button
|
||||
"Note on 87"* ) print_col_app_ids ;; # bottom button
|
||||
"Control change 16"* ) change_volume $col_1_app_pid $data2 ;; # knob turn
|
||||
|
||||
# column 2
|
||||
"Note on 33"* ) bind_application 2 ;; # knob press
|
||||
"Note on 90"* ) toggle_mute $col_2_app_pid ;; # top button
|
||||
"Note on 88"* ) ;; # bottom button
|
||||
"Control change 17"* ) change_volume $col_2_app_pid $data2 ;; # knob turn
|
||||
|
||||
# column 3
|
||||
"Note on 34"* ) bind_application 3 ;; # knob press
|
||||
"Note on 40"* ) toggle_mute $col_3_app_pid ;; # top button
|
||||
"Note on 91"* ) media_prev ;;
|
||||
"Control change 18"* ) change_volume $col_3_app_pid $data2 ;; # knob turn
|
||||
|
||||
# column 4
|
||||
"Note on 35"* ) bind_application 4 ;; # knob press
|
||||
"Note on 41"* ) toggle_mute $col_4_app_pid ;; # top button
|
||||
"Note on 92"* ) media_next ;;
|
||||
"Control change 19"* ) change_volume $col_4_app_pid $data2 ;; # knob turn
|
||||
|
||||
# column 5
|
||||
"Note on 36"* ) bind_application 5 ;; # knob press
|
||||
"Note on 42"* ) toggle_mute $col_5_app_pid ;; # top button
|
||||
"Note on 86"* ) ;;
|
||||
"Control change 20"* ) change_volume $col_5_app_pid $data2 ;; # knob turn
|
||||
|
||||
# column 6
|
||||
"Note on 37"* ) bind_application 6 ;; # knob press
|
||||
"Note on 43"* ) toggle_mute $col_6_app_pid ;; # top button
|
||||
"Note on 93"* ) media_stop ;;
|
||||
"Control change 21"* ) change_volume $col_6_app_pid $data2 ;; # knob turn
|
||||
|
||||
# column 7
|
||||
"Note on 38"* ) bind_application 7 ;; # knob press
|
||||
"Note on 44"* ) toggle_mute $col_7_app_pid ;; # top button
|
||||
"Note on 94"* ) media_play_pause ;;
|
||||
"Control change 22"* ) change_volume $col_7_app_pid $data2 ;; # knob turn
|
||||
|
||||
# column 8
|
||||
"Note on 39"* ) bind_application 8 ;; # knob press
|
||||
"Note on 45"* ) toggle_mute $col_8_app_pid ;; # top button
|
||||
"Note on 95"* ) ;;
|
||||
"Control change 23"* ) change_volume $col_8_app_pid $data2 ;; # knob turn
|
||||
|
||||
# layer a and b buttons
|
||||
"Note on 84"* ) assign_profile_1 ;;
|
||||
"Note on 85"* ) assign_profile_2 ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
main_standard(){
|
||||
aseqdump -p "X-TOUCH MINI" | \
|
||||
while IFS=" ," read src ev1 ev2 ch label1 data1 label2 data2 rest; do
|
||||
#echo "$ev1 $ev2 $data1 $data2"
|
||||
case "$ev1 $ev2 $data1 $data2" in
|
||||
# column 1
|
||||
"Control change 9 127" ) bind_application 1 ;; # knob press
|
||||
"Control change 17 127" ) mute_on $col_1_app_pid ;; # top button on
|
||||
"Control change 17 0" ) mute_off $col_1_app_pid ;; # top button off
|
||||
"Control change 25 127" ) print_col_app_ids ;; # bottom button
|
||||
"Control change 1 "* ) change_volume_standard $col_1_app_pid $data2 ;; # knob turn
|
||||
|
||||
# column 2
|
||||
"Control change 10 127" ) bind_application 2 && echo "bind_application 2";; # knob press
|
||||
"Control change 18 127" ) mute_on $col_2_app_pid;; # top button on
|
||||
"Control change 18 0" ) mute_off $col_2_app_pid ;; # top button off
|
||||
"Control change 26 127" ) ;; # bottom button
|
||||
"Control change 2 "* ) change_volume_standard $col_2_app_pid $data2 ;; # knob turn
|
||||
|
||||
# column 3
|
||||
"Control change 11 127" ) bind_application 3 ;; # knob press
|
||||
"Control change 19 127" ) mute_on $col_3_app_pid ;; # top button on
|
||||
"Control change 19 0" ) mute_off $col_3_app_pid ;; # top button off
|
||||
"Control change 27 127" ) media_prev ;;
|
||||
"Control change 3 "* ) change_volume_standard $col_3_app_pid $data2 ;; # knob turn
|
||||
|
||||
# column 4
|
||||
"Control change 12 127" ) bind_application 4 ;; # knob press
|
||||
"Control change 20 127" ) mute_on $col_4_app_pid ;; # top button on
|
||||
"Control change 20 0" ) mute_off $col_4_app_pid ;; # top button off
|
||||
"Control change 28 127" ) media_next ;;
|
||||
"Control change 4 "* ) change_volume_standard $col_4_app_pid $data2 ;; # knob turn
|
||||
|
||||
# column 5
|
||||
"Control change 13 127" ) bind_application 5 ;; # knob press
|
||||
"Control change 21 127" ) mute_on $col_5_app_pid ;; # top button on
|
||||
"Control change 21 0" ) mute_off $col_5_app_pid ;; # top button off
|
||||
"Control change 29 127" ) ;;
|
||||
"Control change 5 "* ) change_volume_standard $col_5_app_pid $data2 ;; # knob turn
|
||||
|
||||
# column 6
|
||||
"Control change 14 127" ) bind_application 6 ;; # knob press
|
||||
"Control change 22 127" ) mute_on $col_6_app_pid ;; # top button on
|
||||
"Control change 22 0" ) mute_off $col_6_app_pid ;; # top button off
|
||||
"Control change 30 127" ) media_stop ;;
|
||||
"Control change 6 "* ) change_volume_standard $col_6_app_pid $data2 ;; # knob turn
|
||||
|
||||
# column 7
|
||||
"Control change 15 127" ) bind_application 7 ;; # knob press
|
||||
"Control change 23 127" ) mute_on $col_7_app_pid ;; # top button on
|
||||
"Control change 23 0" ) mute_off $col_7_app_pid ;; # top button off
|
||||
"Control change 31 127" ) media_play_pause ;;
|
||||
"Control change 7 "* ) change_volume_standard $col_7_app_pid $data2 ;; # knob turn
|
||||
|
||||
# column 8
|
||||
"Control change 16 127" ) bind_application 8 ;; # knob press
|
||||
"Control change 24 127" ) mute_on $col_8_app_pid ;; # top button on
|
||||
"Control change 24 0" ) mute_off $col_8_app_pid ;; # top button off
|
||||
"Control change 32 127" ) ;;
|
||||
"Control change 8 "* ) change_volume_standard $col_8_app_pid $data2 ;; # knob turn
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
initialize
|
||||
main_standard
|