Compare commits

...

203 commits

Author SHA1 Message Date
Petar Kapriš
450acd25d3 hyprland: change workspace movement to silent 2025-08-14 21:32:51 +02:00
Petar Kapriš
1426bceb39 mpv: Don't keep-open 2025-08-14 21:32:51 +02:00
Petar Kapriš
cee8b5a21e waybar: add network and battery modules 2025-08-14 21:32:51 +02:00
Petar Kapriš
196fe7fe5c git: add gitconfig 2025-08-14 21:32:50 +02:00
Petar Kapriš
dfbd85f366 remove ludusavi and MangoHud configs 2025-08-14 21:32:50 +02:00
Petar Kapriš
61b1bbaf0e hypr: add libinput-gestures to autostart 2025-08-14 21:32:50 +02:00
Petar Kapriš
8534eab109 gdb: add gdb/gef config 2025-08-14 21:32:50 +02:00
Petar Kapriš
edb0f0774c vim: add vim config 2025-08-14 21:32:50 +02:00
Petar Kapriš
2598b15d21 sbcl: add sbclrc 2025-08-14 21:32:50 +02:00
Petar Kapriš
95da0d61e8 bash: add bashrc/profile 2025-08-14 21:32:50 +02:00
Petar Kapriš
e7154d9e16 ranger: add ranger config 2025-08-14 21:32:50 +02:00
Petar Kapriš
9729640018 mpv: add my mpv script/conf files
mpv: move input-ipc-server line
2025-08-14 21:32:50 +02:00
Petar Kapriš
995ac9fece mpv: add my mpv script/conf files 2025-08-14 21:32:50 +02:00
Petar Kapriš
1c9e85dbdf mpv: remove my input.conf 2025-08-14 21:32:50 +02:00
Petar Kapriš
c3d53fecd0 hypr: remove zathura center rules 2025-08-14 21:32:50 +02:00
Petar Kapriš
53f2c3e035 hypr: remove mpv,qimgv special center rules 2025-08-14 21:32:50 +02:00
Petar Kapriš
753572bb43 waybar: add prompts for my keyboard layouts 2025-08-14 21:32:50 +02:00
Petar Kapriš
b4415e5abf waybar: set hypr/language keyboard to match my keyboard 2025-08-14 21:32:50 +02:00
Petar Kapriš
2590494861 waybar: remove bars for other monitors 2025-08-14 21:32:50 +02:00
Petar Kapriš
90bcbedbee hypr: change default editor and file manager 2025-08-14 21:32:50 +02:00
Petar Kapriš
1c025b6f4a hypr: replace nvtop with radeontop 2025-08-14 21:32:50 +02:00
Petar Kapriš
20d213ff10 Add pipewire autostart commands 2025-08-14 21:32:50 +02:00
Petar Kapriš
32c1b02ebe Modify wallpaper change interval 2025-08-14 21:32:50 +02:00
Petar Kapriš
1caefe331e Remove unnecessary github files 2025-08-14 21:32:50 +02:00
Petar Kapriš
f96777c213 Adapt hypr config to monitors 2025-08-14 21:32:50 +02:00
Petar Kapriš
89f5804513 Adapt hypr input config to keyboard layouts 2025-08-14 21:32:50 +02:00
Petar Kapriš
353d99146d Merge conflicting dotfiles 2025-08-14 21:32:50 +02:00
Petar Kapriš
553158db13 Fix waybar display 2025-08-14 21:16:35 +02:00
Petar Kapriš
8606d515cf fish: fix cat function 2025-08-14 21:11:10 +02:00
Petar Kapriš
4d056e0f52 hypr: add radeontop rule
The rule for radeontop could be added in case the config is applied on
an AMD machine, and isn't obtrusive on an Intel/Nvidia machine.
2025-08-14 21:11:10 +02:00
Sergio Laín
c2a15979c2
feat(nvim): save without formatting map can now be executed on insert mode 2025-08-13 19:46:44 +02:00
Sergio Laín
89569ed26c
feat(hypr): make caps lock to act as an escape key 2025-08-13 19:46:18 +02:00
Sergio Laín
c8b816fd31
feat(tmux): higher height for tf 2025-08-13 19:45:54 +02:00
Sergio Laín
df3bd9fa20
feat(tmux): remove padding from the bar 2025-08-13 19:45:05 +02:00
Sergio Laín
80fea4fe2c
feat(bin): tf script with wider preview window and case insensitive fzf 2025-08-13 19:44:10 +02:00
Sergio Laín
98f11984cc
chore(nvim): plugin updates 2025-08-13 19:40:31 +02:00
Sergio Laín
709cd2d7a7
fix(lazygit): delta pager sometimes failing 2025-08-13 19:40:06 +02:00
Sergio Laín
09953219e9
feat(tmux): remove date module on the bar 2025-08-13 00:39:16 +02:00
Sergio Laín
a2daf25767
feat(hypr): shadows disabled and changed border colors 2025-08-13 00:37:52 +02:00
Sergio Laín
8338bb3a6a
chore(nvim): plugin updates 2025-08-13 00:37:22 +02:00
Sergio Laín
dd9b6c424b
feat(nvim): disable markdown heading background 2025-08-11 23:33:58 +02:00
Sergio Laín
8786113894
feat(nvim): use treesitter context extra 2025-08-11 23:33:27 +02:00
Sergio Laín
92f4335802
refactor(tmux): move theming section to a new file
Also added some new cool additions to the bar that pair really well
with the bar of nvim and yazi
2025-08-11 20:11:02 +02:00
Sergio Laín
4dd967618a
chore(nvim): plugin updates 2025-08-11 19:57:58 +02:00
Sergio Laín
ea03437a69
chore(browser): update surfingkeys config 2025-08-11 19:57:37 +02:00
Sergio Laín
a3dcba050a
feat(tmux): add time module to the bar 2025-08-11 00:35:56 +02:00
Sergio Laín
ef1a659b4c
feat(hypr): lower rounding, disable inactive opacity and lighter border color 2025-08-11 00:35:41 +02:00
Sergio Laín
58f522a29a
feat(hypr): disable capslock and hide mouse when not using it 2025-08-11 00:34:06 +02:00
Sergio Laín
22fa662211
feat(hypr): change some bindings 2025-08-11 00:33:39 +02:00
Sergio Laín
ae952575fc
refactor(browser): only maintain userChrome and user.js files for zen 2025-08-10 19:03:33 +02:00
Sergio Laín
276c0dfb5e
fix(hypr): bluetui and wiremix scratchpad rules 2025-08-10 19:02:49 +02:00
Sergio Laín
205108d994
feat(hypr): launcher for windows and some bindings for audio 2025-08-10 19:02:20 +02:00
Sergio Laín
4613ecb89e
fix(swaync): css theme not being picked correctly 2025-08-10 18:52:22 +02:00
Sergio Laín
059b6b5191
feat(hypr): add bluetui scratchpad 2025-08-10 18:50:55 +02:00
Sergio Laín
b8157b09ab
feat(hypr): use wiremix instead of pavucontrol 2025-08-10 15:26:05 +02:00
Sergio Laín
20a3c0641f
feat(hypr): new rules 2025-08-10 15:25:53 +02:00
Sergio Laín
e53f48f4d7
feat(nvim): disable lualine extensions 2025-08-10 15:24:23 +02:00
Sergio Laín
58d134e3c1
feat(nvim): plugin updates 2025-08-10 15:17:42 +02:00
Sergio Laín
c71446ee15
feat(nvim): enable lsp signs and disable virtual lines 2025-08-07 23:07:49 +02:00
Sergio Laín
14fdcd0d39
feat(nvim): add binding to open line diagnostic on float 2025-08-07 23:07:20 +02:00
Sergio Laín
c68d87c320
fix(nvim): wsl clipboard 2025-08-07 23:05:45 +02:00
Sergio Laín
23edfbb890
chore(nvim): plugin updates 2025-08-07 23:05:19 +02:00
Sergio Laín
f704cda8b7
chore(easyeffects): update perfect eq preset 2025-08-07 23:04:37 +02:00
Sergio Laín
7a9614f675
feat(nvim): dap bindings for stepping over and out 2025-08-07 00:06:09 +02:00
Sergio Laín
c31670db5a
feat(tmux): lower the height of tf popup 2025-08-07 00:05:34 +02:00
Sergio Laín
9d78c49ae7
chore(nvim): plugin updates 2025-08-07 00:05:17 +02:00
Sergio Laín
0ab50d62f5
feat(nvim): blink menu now uses the base catppuccin color for bg 2025-08-04 21:29:02 +02:00
Sergio Laín
238d9372c6
feat(nvim): add some custom highlights to the catppuccin theme 2025-08-04 00:08:38 +02:00
Sergio Laín
e2bd23b90e
feat(yazi): change status colors for normal mode 2025-08-04 00:08:07 +02:00
Sergio Laín
709e3fe7b6
feat(tmux): tf pop up is now on fullscreen 2025-08-04 00:07:48 +02:00
Sergio Laín
ac228fa3f2
feat(nvim): keymap to change to the last and current buffer 2025-08-04 00:07:25 +02:00
Sergio Laín
0a3aaba336
chore(nvim): plugin updates 2025-08-04 00:07:13 +02:00
Sergio Laín
83b4613674
feat(fish): add and change some theme colors for fzf 2025-08-04 00:06:10 +02:00
Sergio Laín
ff1d11da22
Merge branch 'main' of github.com:Matt-FTW/dotfiles 2025-08-03 14:31:48 +02:00
Sergio Laín
ef6ba42b34
feat(nvim): use snacks picker on fullscreen 2025-08-03 14:31:36 +02:00
Sergio Laín
1beed880fb
feat(nvim): use snacks on fullscreen 2025-08-03 14:31:06 +02:00
Sergio Laín
0f98bdb7e0
feat(nvim): use transparent background for catppuccin 2025-08-03 14:19:44 +02:00
Sergio Laín
d8d32f2813
feat(nvim): keymap changes for git operations 2025-08-03 14:19:00 +02:00
Sergio Laín
e30f58d181
feat(ghostty): reduce padding 2025-08-03 14:18:04 +02:00
Sergio Laín
1155dcf308
fix(tmux): resize bindings no longer conflict with nvim 2025-08-03 12:08:37 +02:00
Sergio Laín
2a3bb1b2b0
feat(nvim): enable snacks animations for scrolling 2025-08-03 12:07:11 +02:00
Sergio Laín
1d83a2ceb8
feat(hypr): binding to change to the last window 2025-08-03 02:02:43 +02:00
Sergio Laín
ff4fea7c5c
feat(lazygit): remove reword commit action 2025-08-03 02:01:51 +02:00
Sergio Laín
5744d49a4d
fix(yazi): not applying the catppuccin theme correctly 2025-08-02 20:50:25 +02:00
Sergio Laín
3b588211c0
refactor(yazi): remove some plugins 2025-08-02 20:50:06 +02:00
Sergio Laín
873133c3c0
refactor(tmux): plugins in use 2025-08-02 20:45:54 +02:00
Sergio Laín
565298b457
feat(tmux): new bindings 2025-08-02 20:45:45 +02:00
Sergio Laín
6440b955fc
feat(nvim): launch lazygit on fullscreen 2025-08-02 20:45:12 +02:00
Sergio Laín
b7ba43670f
feat(nvim): launch yazi on fullscreen 2025-08-02 19:26:13 +02:00
Sergio Laín
50ffd3a435
feat(nvim): yazi and snacks integration 2025-08-02 19:20:24 +02:00
Sergio Laín
0269094a4e
feat(nvim): blink bindings for the documentation 2025-08-02 19:20:06 +02:00
Sergio Laín
e3497e0bc1
feat(nvim): remove keys in the snacks dashboard 2025-08-02 19:19:38 +02:00
Sergio Laín
0cd13cde91
feat(nvim): remove grapple icons on lualine 2025-08-02 19:19:06 +02:00
Sergio Laín
d29dddfb0f
feat(nvim): disable lsp symbols on lualine 2025-08-02 19:17:14 +02:00
Sergio Laín
337107676d
feat(ghostty): bigger font size 2025-08-02 19:15:16 +02:00
Sergio Laín
18005bd4b1
chore(nvim): update plugins 2025-08-02 16:50:32 +02:00
Sergio Laín
551ee71a8b
chore(hypr): only execute feishin at startup 2025-08-02 16:44:52 +02:00
Sergio Laín
fc203fa00a
feat(nvim): use nvchad catppuccin theme 2025-07-31 20:13:09 +02:00
Sergio Laín
b0cb008127
feat(nvim): remove blink rounded option 2025-07-31 20:12:39 +02:00
Sergio Laín
ea08474d7b
feat(nvim): use nvim-dap-view for the dap ui
Is less instrusive than nvim-dap-ui
2025-07-31 20:11:50 +02:00
Sergio Laín
19ab197c23
feat(nvim): remove go extra extended 2025-07-31 20:11:06 +02:00
Sergio Laín
1f7a1fef17
chore(nvim): plugin updates 2025-07-31 20:10:18 +02:00
Sergio Laín
0f9d765776
chore(nvim): plugin updates 2025-07-30 16:59:54 +02:00
Sergio Laín
b927d6deda
fix(nvim): lspconfig keymaps 2025-07-30 16:59:36 +02:00
Sergio Laín
f049c7a1ad
feat(nvim): fish and jinja extras 2025-07-30 16:59:19 +02:00
Sergio Laín
201bd16d02
feat(nvim): catppuccin auto_integrations 2025-07-30 16:58:35 +02:00
Sergio Laín
1834ec1567
fix(swaync): weird layer on top 2025-07-29 19:20:08 +02:00
Sergio Laín
3d74562317
fix(nvim): wsl clipboard 2025-07-16 21:12:27 +02:00
Sergio Laín
c8b09f19d7
chore(nvim): plugin updates 2025-07-16 21:11:56 +02:00
Sergio Laín
563da8f118
feat(nvim): remove prettier and stylelint 2025-07-16 21:10:44 +02:00
Sergio Laín
2e7d8199fd
fix(tmux): terminal color 2025-07-16 21:10:19 +02:00
Sergio Laín
442034e71c
chore(yazi): searchjump installation with the native pkg 2025-07-16 21:09:35 +02:00
Sergio Laín
ce4223f097
chore(browser): surfingkeys config updated 2025-07-16 18:51:22 +02:00
Sergio Laín
373c9ef2c8
feat(tmux): new and revamped bar using latest catppuccin plugin version 2025-07-13 01:23:45 +02:00
Sergio Laín
efc37aa8f9
chore(browser): theme updates for zen 2025-07-13 01:22:29 +02:00
Sergio Laín
4866d1a307
feat(hypr): disable animations and opacity for active windows 2025-07-13 01:00:26 +02:00
Sergio Laín
9ddb852b34
feat(nvim): little updates to some plugins 2025-07-13 00:59:55 +02:00
Sergio Laín
144bbb54bd
fix(nvim): obsidian image uri 2025-07-13 00:59:35 +02:00
Sergio Laín
e7f96fcc1c
feat(hypr): binding for toggling the disturb mode of swaync 2025-07-13 00:59:03 +02:00
Sergio Laín
bfe32e8d09
feat(hypr): rules for media players 2025-07-13 00:57:42 +02:00
Sergio Laín
d4dd4ba74c
chore(mise): program updates 2025-07-13 00:56:57 +02:00
Sergio Laín
8faea5e389
chore(nvim): plugin updates 2025-07-13 00:56:04 +02:00
Sergio Laín
063ac3be46
chore(topgrade): remove custom yazi updates 2025-07-13 00:55:32 +02:00
Sergio Laín
7807d07fd9
feat(margins): lower down from 10 to 5 2025-07-13 00:55:06 +02:00
Sergio Laín
46dc71246b
chore(yazi): package updates 2025-07-13 00:54:30 +02:00
Sergio Laín
b91fb3aca0
feat(mise): use bun for npm packages and add opencode 2025-06-29 14:00:35 +02:00
Sergio Laín
08389f78ba
feat(waybar): smaller bar 2025-06-29 13:59:50 +02:00
Sergio Laín
43aa8bcb80
chore(yazi): plugin updates 2025-06-29 13:59:31 +02:00
Sergio Laín
86164bf875
chore(nvim): plugin updates 2025-06-29 13:58:43 +02:00
Sergio Laín
04daca30a9
fix(nvim): obsidian plugin removed the callbacks table 2025-06-29 13:58:26 +02:00
Sergio Laín
28545dbb8e
chore(ludusavi): change gamesaves backup location 2025-06-29 13:57:18 +02:00
Sergio Laín
567b29eb34
feat(lazygit): change bindings for rewording a commit
r -> open with $editor
R -> reword with lazygit menu

It was the other way around before. I prefer using neovim
2025-06-23 02:24:18 +02:00
Sergio Laín
5ed6cf8ce8
feat(nvim): new snacks bindings 2025-06-23 02:22:51 +02:00
Sergio Laín
2ecff5f0bb
feat(nvim): simplified the keys to move to an specific file on grapple 2025-06-23 02:20:26 +02:00
Sergio Laín
594058127c
feat(nvim): some markdown changes 2025-06-23 02:18:19 +02:00
Sergio Laín
c0c5d5611d
feat(nvim): obsidian extra disables ui and has new keymaps
The new keymaps lets me search for unfinished and finished tasks
2025-06-23 02:16:57 +02:00
Sergio Laín
d9280a8e1b
fix(nvim): lazygit would always hide when typing q 2025-06-23 02:16:19 +02:00
Sergio Laín
424dfe8f69
chore(mise): install new tools 2025-06-23 02:15:52 +02:00
Sergio Laín
12bd679967
feat(hypr): new rules 2025-06-23 02:15:36 +02:00
Sergio Laín
91b02ef3d5
feat(obsidian): polish tmuxp and tmux-notes-switch script 2025-06-23 02:13:57 +02:00
Sergio Laín
e0239c2e44
chore(yazi): plugin updates 2025-06-23 02:13:22 +02:00
Sergio Laín
575b261b0a
feat(font): new default font: maple mono 2025-06-23 02:13:00 +02:00
Sergio Laín
fd82a06131
chore(nvim): plugin updates 2025-06-23 01:53:48 +02:00
Sergio Laín
e5c3f5f230
refactor(bin): rename dev script to tf and add a zoxide mode 2025-06-11 13:53:27 +02:00
Sergio Laín
0d497156cc
feat(bin): script to clone mise configuration to a certain dir 2025-06-11 13:52:54 +02:00
Sergio Laín
af2f2615e4
feat(tmux): new binding to switch from a pane to another zoomed pane 2025-06-11 13:51:40 +02:00
Sergio Laín
7a8975d2f5
chore(nvim): plugin updates 2025-06-11 12:30:55 +02:00
Sergio Laín
5643ec6b12
feat(tmux): script to change from notes to last session 2025-06-11 00:06:50 +02:00
Sergio Laín
dd3c3efa54
chore(gz-git): remove config
No longer using emojis for the commit messages
2025-06-10 19:38:49 +02:00
Sergio Laín
c66a74dd3c
chore(yazi): update config to the new version of yazi 2025-06-10 19:38:08 +02:00
Sergio Laín
39c59a0894
refactor(bin): dev script
Removed kitty handeling and start the notes-tasks workspace detached
when launching a new session
2025-06-10 18:49:05 +02:00
Sergio Laín
4490efa17c
feat(tmuxp): new notes-tasks workspace 2025-06-10 18:48:36 +02:00
Sergio Laín
4b20918bfe
docs(ghostty): forgot to updload the .github folder 2025-06-10 18:47:41 +02:00
Sergio Laín
4fac578b44
feat(tmux): new keymap: switch to notes session 2025-06-10 18:43:01 +02:00
Sergio Laín
fcb26c98d6
fix(topgrade): yazi update now uses pkg instead of pack 2025-06-10 18:42:30 +02:00
Sergio Laín
38736b5a1f
chore(hypr): rofi-bw script default action is now to copy 2025-06-10 18:41:55 +02:00
Sergio Laín
0fd3b177e0
feat(nvim): obsidian bindings 2025-06-10 18:41:34 +02:00
Sergio Laín
c764658115
chore(nvim): plugin updates 2025-06-10 18:41:12 +02:00
Sergio Laín
8b2b1dc1cd
chore(yazi): update plugins 2025-06-09 17:18:55 +02:00
Sergio Laín
e65566bda1
chore(yazi): update catppuccin theme 2025-06-09 17:18:44 +02:00
Sergio Laín
91aafc4907
chore(spicetify): update marketplace 2025-06-09 17:17:14 +02:00
Sergio Laín
bf7190eb53
perf(nvim): obsidian plugin loads when opening a file inside the vault 2025-06-09 17:14:30 +02:00
Sergio Laín
4c736e0a76
refactor(hypr): almost all scractchpads removed 2025-06-09 17:13:50 +02:00
Sergio Laín
b31ca44be7
fix(hypr): ghostty service running in the background 2025-06-09 17:13:23 +02:00
Sergio Laín
edc225a169
refactor(hypr): binding changes 2025-06-09 17:12:58 +02:00
Sergio Laín
1e7f9cb9a9
feat(hypr): ghostty as default terminal 2025-06-09 17:11:30 +02:00
Sergio Laín
8053426b94
feat(ghostty): config added 2025-06-09 16:58:53 +02:00
Sergio Laín
82b9f08fab
refactor(tmux): substitute sessionx with fzf-tmux and remove floax 2025-06-09 16:47:44 +02:00
Sergio Laín
c68dbe9f1d
fix(tmux): bootstrap the tpm plugin 2025-06-09 16:46:40 +02:00
Sergio Laín
e254fdf93e
feat(nvim): new codecompanion adapters 2025-06-09 16:42:48 +02:00
Sergio Laín
abf362c5e7
fix(nvim): codecompanion blink support 2025-06-09 16:42:29 +02:00
Sergio Laín
da64f3f6e3
feat(mise): new dependencies 2025-06-09 01:17:14 +02:00
Sergio Laín
96c45d89d6
feat(git): gitmessage template 2025-06-09 01:16:52 +02:00
Sergio Laín
d932529e8c
feat(bin): starship script to list remote icon 2025-06-09 01:04:22 +02:00
Sergio Laín
aac556d735
feat(starship): order for all modules 2025-06-09 01:03:28 +02:00
Sergio Laín
0395decfd8
feat(starship): new modules 2025-06-09 01:03:00 +02:00
Sergio Laín
0da4791437
feat(tmux): prefix bindings instead of using smart splits 2025-06-09 01:01:32 +02:00
Sergio Laín
f702f8167e
feat(fish): new function for lazydocker and remove npm related functions 2025-06-09 01:00:17 +02:00
Sergio Laín
c0b362ec32
feat(git): decoration for delta 2025-06-08 23:13:22 +02:00
Sergio Laín
9127ac68b5
refactor(atuin): change sync from 0 to 10 2025-06-08 23:12:24 +02:00
Sergio Laín
d3ff78b802
refactor(lazygit): commit bindings 2025-06-08 21:29:56 +02:00
Sergio Laín
19164d6333
refactor(nvim): obsidian extra 2025-06-08 21:28:17 +02:00
Sergio Laín
0f6a99667f
chore(nvim): misc changes with some plugins 2025-06-08 21:27:55 +02:00
Sergio Laín
2b0da323af
feat(nvim): some language extras changes 2025-06-08 21:26:24 +02:00
Sergio Laín
42abe59383
chore(nvim): kulala formatter is now installed 2025-06-08 21:24:25 +02:00
Sergio Laín
3fc3c60182
feat(nvim): new plugin: otter 2025-06-08 21:23:32 +02:00
Sergio Laín
98d5649546
chore(nvim): plugin updates 2025-06-08 21:22:46 +02:00
Sergio Laín
dd01f4ae93
chore(npm): remove tmp variable in the config 2025-06-08 21:20:27 +02:00
Sergio Laín
b98e19d3d1
feat(lazygit): a bunch of new additions
numstats on files view, custom commands and nvim-remote command to open
files inside neovim
2025-06-08 21:19:54 +02:00
Sergio Laín
8b426ba2a6
fix(lazydocker): open commands 2025-06-08 21:18:26 +02:00
Sergio Laín
29b78fdb53
style(kitty): increase font size 2025-06-08 21:08:16 +02:00
Sergio Laín
3a030a3db6
feat(git): catppuccin colors update 2025-06-08 20:57:33 +02:00
Sergio Laín
3805b4e6d3
🐛 fix(rofi): update clipboard if an item is selected 2025-05-24 20:40:18 +02:00
Sergio Laín
deb70d53a8
⚙️ config(browser): disable zen transparent 2025-05-24 20:39:28 +02:00
Sergio Laín
a6f7167c5c
🔧 chore(nvim): plugin updates 2025-05-24 20:38:13 +02:00
Sergio Laín
0810798f0b
🔧 chore(spicetify): update 2025-05-24 20:38:02 +02:00
Sergio Laín
16956dc64b
⚙️ config(hypr): add rules for the legcord client 2025-05-13 14:25:51 +02:00
Sergio Laín
35d0aae058
🔧 chore(nvim): plugin updates 2025-05-13 14:00:14 +02:00
Sergio Laín
b639fcdb50
🔧 chore(nvim): plugin updates 2025-05-07 14:03:02 +02:00
Sergio Laín
2dd80237ad
🚀 perf(waybar): disable animation 2025-05-07 14:02:53 +02:00
Sergio Laín
a65716787d
🔧 chore(btop): update config 2025-05-07 14:02:31 +02:00
Sergio Laín
8628da6092
🚀 perf(hypr): disable borderangle animation 2025-05-07 14:02:02 +02:00
Sergio Laín
9a33169d46
feat(hypr): use hyprpaper by default instead of swww 2025-05-07 14:01:47 +02:00
298 changed files with 36886 additions and 4735 deletions

14
.bash_profile Normal file
View file

@ -0,0 +1,14 @@
#
# ~/.bash_profile
#
export QT_STYLE_OVERIDE=GTK+
export GDK_BACKEND=wayland
export GTK_THEME=Adwaita:dark
export GTK2_RC_FILES=/usr/share/themes/Raleigh/gtk-3.0/gtkrc
export _JAVA_AWT_WM_NONREPARENTING=1
[[ -f ~/.bashrc ]] && . ~/.bashrc
# [ -z "$DISPLAY" ] &&
[ `tty` = '/dev/tty1' ] && exec dbus-run-session Hyprland

1
.bashrc Symbolic link
View file

@ -0,0 +1 @@
/home/kappa/dotfiles/.bashrc

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

View file

@ -1,358 +0,0 @@
### MangoHud configuration file
### Uncomment any options you wish to enable. Default options are left uncommented
### Use some_parameter=0 to disable a parameter (only works with on/off parameters)
### Everything below can be used / overridden with the environment variable MANGOHUD_CONFIG instead
################ INFORMATIONAL #################
## prints possible options on stdout
# help
################ PERFORMANCE #################
### Limit the application FPS. Comma-separated list of one or more FPS values (e.g. 0,30,60). 0 means unlimited (unless VSynced)
# fps_limit=0
### early = wait before present, late = wait after present
# fps_limit_method=
### VSync [0-3] 0 = adaptive; 1 = off; 2 = mailbox; 3 = on
# vsync=-1
### OpenGL VSync [0-N] 0 = off; >=1 = wait for N v-blanks, N > 1 acts as a FPS limiter (FPS = display refresh rate / N)
# gl_vsync=-2
### Mip-map LoD bias. Negative values will increase texture sharpness (and aliasing)
## Positive values will increase texture blurriness (-16 to 16)
# picmip=-17
### Anisotropic filtering level. Improves sharpness of textures viewed at an angle (0 to 16)
# af=-1
### Force bicubic filtering
# bicubic
### Force trilinear filtering
# trilinear
### Disable linear texture filtering. Makes textures look blocky
# retro
################### VISUAL ###################
### Legacy layout
# legacy_layout=0
### pre defined presets
# -1 = default
# 0 = no display
# 1 = fps only
# 2 = horizontal view
# 3 = extended
# 4 = high detailed information
# preset=-1
### Enable most of the toggleable parameters (currently excludes `histogram`)
# full
### Show FPS only. ***Not meant to be used with other display params***
# fps_only
### Display custom centered text, useful for a header
# custom_text_center=
### Display the current system time
# time
## removes the time label
# time_no_label
### Time formatting examples
## %H:%M
## [ %T %F ]
## %X # locally formatted time, because of limited glyph range, missing characters may show as '?' (e.g. Japanese)
# time_format="%T"
### Display MangoHud version
# version
### Display the current GPU information
## Note: gpu_mem_clock and gpu_mem_temp also need "vram" to be enabled
gpu_stats
gpu_temp
# gpu_junction_temp
# gpu_core_clock
# gpu_mem_temp
# gpu_mem_clock
# gpu_power
# gpu_text=
# gpu_load_change
# gpu_load_value=60,90
# gpu_load_color=39F900,FDFD09,B22222
## GPU fan in rpm on AMD, FAN in percent on NVIDIA
# gpu_fan
## gpu_voltage only works on AMD GPUs
# gpu_voltage
### Display the current CPU information
cpu_stats
cpu_temp
# cpu_power
# cpu_text=
# cpu_mhz
# cpu_load_change
# cpu_load_value=60,90
# cpu_load_color=39F900,FDFD09,B22222
### Display the current CPU load & frequency for each core
# core_load
# core_load_change
### Display IO read and write for the app (not system)
# io_read
# io_write
### Display system vram / ram / swap space usage
# vram
# ram
# swap
### Display per process memory usage
## Show resident memory and other types, if enabled
# procmem
# procmem_shared
# procmem_virt
### Display battery information
# battery
# battery_icon
# device_battery=gamepad,mouse
# device_battery_icon
# battery_watt
# battery_time
### Display FPS and frametime
fps
# fps_sampling_period=500
# fps_color_change
# fps_value=30,60
# fps_color=B22222,FDFD09,39F900
frametime
# frame_count
## fps_metrics takes a list of decimal values or the value avg
# fps_metrics=avg,0.01
### Display GPU throttling status based on Power, current, temp or "other"
## Only shows if throttling is currently happening
throttling_status
## Same as throttling_status but displays throttling on the frametime graph
#throttling_status_graph
### Display miscellaneous information
# engine_version
# engine_short_names
# gpu_name
# vulkan_driver
# wine
# exec_name
# winesync
### Display loaded MangoHud architecture
# arch
### Display the frametime line graph
frame_timing
# histogram
### Display GameMode / vkBasalt running status
# gamemode
# vkbasalt
### Gamescope related options
## Display the status of FSR (only works in gamescope)
# fsr
## Hides the sharpness info for the `fsr` option (only available in gamescope)
# hide_fsr_sharpness
## Shows the graph of gamescope app frametimes and latency (only on gamescope obviously)
# debug
## Display the status of HDR (only works in gamescope)
# hdr
## Display the current refresh rate (only works in gamescope)
# refresh_rate
### graphs displays one or more graphs that you chose
## seperated by ",", available graphs are
## gpu_load,cpu_load,gpu_core_clock,gpu_mem_clock,vram,ram,cpu_temp,gpu_temp
# graphs=
### mangoapp related options
## Enables mangoapp to be displayed above the Steam UI
# mangoapp_steam
### Steam Deck options
## Shows the Steam Deck fan rpm
# fan
### Display current FPS limit
# show_fps_limit
### Display the current resolution
# resolution
### Display custom text
# custom_text=
### Display output of Bash command in next column
# exec=
### Display media player metadata
# media_player
## for example spotify
# media_player_name=
## Format metadata, lines are delimited by ; (wip)
## example: {title};{artist};{album}
## example: Track:;{title};By:;{artist};From:;{album}
# media_player_format=title,artist,album
### Network interface throughput
# network
## Network can take arguments but it's not required.
## without arguments it shows all interfaces
## arguments set which interfaces will be displayed
# network=eth0,wlo1
### Change the hud font size
font_size=22
# font_scale=1.0
# font_size_text=24
# font_scale_media_player=0.55
# no_small_font
### Change default font (set location to TTF/OTF file)
## Set font for the whole hud
font_file=/usr/share/fonts/TTF/JetBrainsMonoNerdFont-Regular.ttf
## Set font only for text like media player metadata
# font_file_text=
## Set font glyph ranges. Defaults to Latin-only. Don't forget to set font_file/font_file_text to font that supports these
## Probably don't enable all at once because of memory usage and hardware limits concerns
## If you experience crashes or text is just squares, reduce glyph range or reduce font size
# font_glyph_ranges=korean,chinese,chinese_simplified,japanese,cyrillic,thai,vietnamese,latin_ext_a,latin_ext_b
### Outline text
text_outline
# text_outline_color = 000000
# text_outline_thickness = 1.5
### Change the hud position
position=top-right
### Change the corner roundness
round_corners=10
### Remove margins around MangoHud
# hud_no_margin
### Display compact version of MangoHud
# hud_compact
### Display MangoHud in a horizontal position
# horizontal
# horizontal_stretch
### Disable / hide the hud by default
no_display
### Hud position offset
# offset_x=0
# offset_y=0
### Hud dimensions
# width=0
# height=140
# table_columns=3
# cellpadding_y=-0.085
### Hud transparency / alpha
# background_alpha=0.5
# alpha=1.0
### FCAT overlay
### This enables an FCAT overlay to perform frametime analysis on the final image stream.
### Enable the overlay
# fcat
### Set the width of the FCAT overlay.
### 24 is a performance optimization on AMD GPUs that should not have adverse effects on nVidia GPUs.
### A minimum of 20 pixels is recommended by nVidia.
# fcat_overlay_width=24
### Set the screen edge, this can be useful for special displays that don't update from top edge to bottom. This goes from 0 (left side) to 3 (top edge), counter-clockwise.
# fcat_screen_edge=0
### Color customization
text_color=cad3f5
gpu_color=a6da95
cpu_color=8aadf4
# vram_color=AD64C1
# ram_color=C26693
engine_color=ed8796
# io_color=A491D3
frametime_color=eed49f
background_color=181926
# media_player_color=FFFFFF
# wine_color=EB5B5B
# battery_color=FF9078
### Specify GPU with PCI bus ID for AMDGPU and NVML stats
### Set to 'domain:bus:slot.function'
# pci_dev=0:0a:0.0
### Blacklist
# blacklist=
### Control over socket
### Enable and set socket name, '%p' is replaced with process id
## example: mangohud
## example: mangohud-%p
# control = -1
################ WORKAROUNDS #################
### Options starting with "gl_*" are for OpenGL
### Specify what to use for getting display size. Options are "viewport", "scissorbox" or disabled. Defaults to using glXQueryDrawable
# gl_size_query=viewport
### (Re)bind given framebuffer before MangoHud gets drawn. Helps with Crusader Kings III
# gl_bind_framebuffer=0
### Don't swap origin if using GL_UPPER_LEFT. Helps with Ryujinx
# gl_dont_flip=1
################ INTERACTION #################
### Change toggle keybinds for the hud & logging
toggle_hud=Shift_L+F12
# toggle_hud_position=Shift_R+F11
# toggle_fps_limit=Shift_L+F1
# toggle_logging=Shift_L+F2
# reload_cfg=Shift_L+F4
# upload_log=Shift_L+F3
#################### LOG #####################
### Automatically start the log after X seconds
# autostart_log=
### Set amount of time in seconds that the logging will run for
# log_duration=
### Change the default log interval, 0 is default
# log_interval=0
### Set location of the output files (required for logging)
# output_folder=/home/<USERNAME>/mangologs
### Permit uploading logs directly to FlightlessMango.com
## set to 1 to enable
# permit_upload=0
### Define a '+'-separated list of percentiles shown in the benchmark results
### Use "AVG" to get a mean average. Default percentiles are 97+AVG+1+0.1
## example: ['97', 'AVG', '1', '0.1']
# benchmark_percentiles=97,AVG
## Adds more headers and information such as versioning to the log. This format is not supported on flightlessmango.com (yet)
# log_versioning
## Enable automatic uploads of logs to flightlessmango.com
# upload_logs

View file

@ -29,16 +29,16 @@
},
// Font
"editor.fontFamily": "JetBrainsMono Nerd Font",
"editor.inlayHints.fontFamily": "JetBrainsMono Nerd Font",
"terminal.integrated.fontFamily": "JetBrainsMono Nerd Font",
"scm.inputFontFamily": "JetBrainsMono Nerd Font",
"chat.editor.fontFamily": "JetBrainsMono Nerd Font",
"debug.console.fontFamily": "JetBrainsMono Nerd Font",
"editor.codeLensFontFamily": "JetBrainsMono Nerd Font",
"notebook.output.fontFamily": "JetBrainsMono Nerd Font",
"markdown.preview.fontFamily": "JetBrainsMono Nerd Font",
"errorLens.fontFamily": "JetBrainsMono Nerd Font",
"editor.fontFamily": "Maple Mono NF",
"editor.inlayHints.fontFamily": "Maple Mono NF",
"terminal.integrated.fontFamily": "Maple Mono NF",
"scm.inputFontFamily": "Maple Mono NF",
"chat.editor.fontFamily": "Maple Mono NF",
"debug.console.fontFamily": "Maple Mono NF",
"editor.codeLensFontFamily": "Maple Mono NF",
"notebook.output.fontFamily": "Maple Mono NF",
"markdown.preview.fontFamily": "Maple Mono NF",
"errorLens.fontFamily": "Maple Mono NF",
"editor.fontLigatures": true,
"editor.fontSize": 14,
"terminal.integrated.fontSize": 14,
@ -115,8 +115,8 @@
"height": 26,
"fontSize": 12
},
"apc.font.family": "JetBrainsMono Nerd Font",
"apc.monospace.font.family": "JetBrainsMono Nerd Font",
"apc.font.family": "Maple Mono NF",
"apc.monospace.font.family": "Maple Mono NF",
"apc.statusBar": {
"position": "editor-bottom",
"height": 28,
@ -1126,4 +1126,6 @@
],
"editor.matchBrackets": "never",
"workbench.statusBar.visible": false
"dart.flutterSdkPath": "/home/kappa/down/pkgs/flutter",
"dart.flutterCustomEmulators": []
}

View file

@ -28,7 +28,7 @@ update_check = true
## how often to sync history. note that this is only triggered when a command
## is ran, so sync intervals may well be longer
## set it to 0 to sync after every command
sync_frequency = "0"
sync_frequency = "10m"
## which search mode to use
## possible values: prefix, fulltext, fuzzy, skim

View file

@ -1,958 +0,0 @@
/* GLOBAL SETTING */
/* Fonts */
* {
font-family: monospace !important;
}
/*------------------------------------------------*/
/* Background Color */
#browser {
background-color: #1e2030 !important;
}
#tabbrowser-tabpanels,
#appcontent,
#tabbrowser-tabbox {
background: none !important;
}
@media (prefers-color-scheme: dark) {
#navigator-toolbox,
.browser-sidebar2 {
background: #181926 !important;
}
}
@media (prefers-color-scheme: light) {
#navigator-toolbox,
.browser-sidebar2 {
background: #e6e6e6 !important;
}
}
#PersonalToolbar,
#nav-bar {
background: transparent !important;
}
/* Hide Status Messages */
/*
#statuspanel[type="overLink"] {
opacity: 0 !important;
}
#statuspanel {
opacity: 0 !important;
}
*/
/*============================================================================================*/
/* NAV BAR */
/* Auto hide icons on the Nav Bar */
#nav-bar
> #nav-bar-customization-target
*:not(#urlbar-container):not(#urlbar-container *),
#PanelUI-button {
opacity: 0 !important;
transition: opacity 0.7s ease !important;
}
#nav-bar:hover
> #nav-bar-customization-target
*:not(#urlbar-container):not(#urlbar-container *),
#nav-bar:hover > #PanelUI-button {
opacity: 1 !important;
transition: opacity 0.3s ease !important;
}
#forward-button {
display: none !important;
}
#back-button {
display: none !important;
}
/*------------------------------------------------*/
/* Remove line between website content and top bar */
#navigator-toolbox {
border-bottom: var(--firefoxcss-top-bar-border-bottom-size) solid
var(--firefoxcss-top-bar-border-bottom-color) !important;
}
/*------------------------------------------------*/
/* Remove the all tab and new tab button */
#alltabs-button,
#tabs-newtab-button {
display: none !important;
}
/*------------------------------------------------*/
/* Remove the 3 dots from Alt Key */
#titlebar #toolbar-menubar .titlebar-buttonbox-container {
display: none !important;
}
/*------------------------------------------------*/
/* Move menu buttons to the left side */
#nav-bar #PanelUI-button #PanelUI-menu-button {
padding-right: 2px !important;
padding-left: 4px !important;
}
#nav-bar #PanelUI-button {
-moz-box-ordinal-group: 0 !important;
order: 0 !important;
}
toolbar:not([customizing]) > #nav-bar-overflow-button {
-moz-box-ordinal-group: 1 !important;
order: 1 !important;
}
toolbar:not([customizing]) > #nav-bar-customization-target {
-moz-box-ordinal-group: 2 !important;
order: 2 !important;
}
#appMenu-popup {
margin-inline: -244px !important;
}
#widget-overflow {
margin-inline: -320px !important;
}
/*------------------------------------------------*/
#TabsToolbar .titlebar-buttonbox-container .titlebar-close {
background: #f25056 !important;
display: none !important;
overflow: hidden !important;
transition: background-color 200ms ease !important;
}
/*------------------------------------------------*/
/* Make Tab Bar join with URL Bar on the left */
:root {
--tab-border-radius: 3px !important;
--NavbarWidth: 2;
--TabsHeight: 36;
--TabsBorder: 8;
--NavbarHeightSmall: calc(var(--TabsHeight) + var(--TabsBorder));
}
#nav-bar {
margin-top: calc(
var(--TabsHeight) * -0.7px - var(--TabsBorder) * 1px
) !important;
height: calc((var(--TabsHeight) * 1px + var(--TabsBorder) * 1px) + 0px);
}
#urlbar-container {
min-width: 0px !important;
flex: auto !important;
}
@media screen and (max-width: 100px) {
#TabsToolbar {
margin-right: 0 !important;
}
#nav-bar {
margin-left: 0 !important;
}
}
/* Fix for Firefox 123 */
#nav-bar:not([tabs-hidden="true"]) {
position: static !important;
}
#nav-bar-customization-target,
#PanelUI-button {
position: relative !important;
z-index: 3 !important;
}
/*------------------------------------------------*/
/* Make active tab to hidden tab */
tab:not([selected="true"]),
[part="overflow-start-indicator"],
[part="overflow-end-indicator"],
#scrollbutton-up,
#scrollbutton-down,
#TabsToolbar .titlebar-spacer,
.tabbrowser-tab[selected="true"] .tab-text,
.tabbrowser-tab[selected="true"] .tab-close-button,
.tab-line,
.tab-throbber {
display: none !important;
}
.tabbrowser-tab[selected="true"] {
min-width: 0px !important;
max-width: 0px !important;
background-color: #181926 !important;
}
tab,
.tabbrowser-tab {
padding-left: 0 !important;
margin-left: 0 !important;
background-color: #181926 !important;
}
.tab-background {
outline: none !important;
box-shadow: none !important;
background-color: #181926 !important;
}
.tab-icon-image {
height: 32px !important;
width: 32px !important;
border-radius: 10px !important;
background-color: #181926 !important;
}
/*------------------------------------------------*/
/* Hide all buttons in active tab context menu except for split tab and extensions */
#main-window #context_openANewTab,
#main-window #context_reloadTab,
#main-window #context_toggleMuteTab,
#main-window #context_playTab,
#main-window #context_pinTab,
#main-window #context_duplicateTab,
#main-window #context_bookmarkTab,
#main-window #context_moveTabOptions,
#main-window #context_reopenInContainer,
#main-window #context_toggleToPrivateContainer,
#main-window #context_selectAllTabs,
#main-window #context_closeTab,
#main-window #context_closeTabOptions,
#main-window #context_undoCloseTab,
#context_MoveTabToOtherWorkspace,
#main-window #tabContextMenu menuseparator {
display: none !important;
}
/*============================================================================================*/
/* EXTENSION */
/* Make extensions looks minimal */
#unified-extensions-view
#unified-extensions-manage-extensions
.toolbarbutton-text::before {
content: "• • •";
font-size: 15px;
visibility: visible !important;
display: block;
text-align: center;
}
#unified-extensions-panel #unified-extensions-view {
width: 100% !important;
}
#unified-extensions-view {
--uei-icon-size: 22px;
--firefoxcss-number-of-extensions-in-a-row: 4;
}
#unified-extensions-view .unified-extensions-item-menu-button.subviewbutton,
#unified-extensions-view
.unified-extensions-item-action-button
.unified-extensions-item-contents {
display: none !important;
}
#unified-extensions-view .panel-subview-body {
padding: 10px !important;
}
#unified-extensions-view .unified-extensions-item .unified-extensions-item-icon,
#unified-extensions-view .unified-extensions-item .toolbarbutton-badge-stack {
margin-inline-end: 0px !important;
}
#unified-extensions-view #overflowed-extensions-list,
#unified-extensions-view #unified-extensions-area,
#unified-extensions-view .unified-extensions-list {
display: grid !important;
grid-template-columns: repeat(
var(--firefoxcss-number-of-extensions-in-a-row),
auto
);
justify-items: left !important;
align-items: left !important;
}
/*============================================================================================*/
/* URL BAR */
/* Make text in URL bar in the center */
#nav-bar {
display: flex;
justify-content: center;
}
#urlbar-container {
flex: 1;
max-width: 1000px;
min-width: 200px;
margin: auto !important;
}
#main-window #urlbar {
z-index: 9999 !important;
width: 100% !important;
margin-top: 0 !important;
margin-left: 0 !important;
margin-right: 0 !important;
transition:
width 0.3s ease,
left 0.3s ease,
margin-top 0.3s ease,
margin-left 0.3s ease,
margin-right 0.3s ease;
}
#main-window #urlbar[breakout][breakout-extend] {
opacity: 0.97 !important;
width: 100% !important;
left: 0;
right: 0;
margin-left: auto !important;
margin-right: auto !important;
margin-top: 30vh !important;
transition:
width 0.3s ease,
left 0.3s ease,
margin-top 0.3s ease,
margin-left 0.3s ease,
margin-right 0.3s ease;
}
#urlbar-background,
#urlbar-input-container {
--toolbarbutton-border-radius: calc(var(--urlbar-min-height) / 2);
}
#urlbar-input-container {
--urlbar-icon-border-radius: calc(var(--toolbarbutton-border-radius) - 1px);
}
#urlbar:not([focused]) #urlbar-input {
text-align: center !important;
}
#urlbar:not([breakout][breakout-extend]) #urlbar-input {
text-align: center !important;
}
/*------------------------------------------------*/
/* Change URL Bar background color */
@media (prefers-color-scheme: dark) {
#urlbar-background {
background-color: #1e2030 !important;
}
}
@media (prefers-color-scheme: light) {
#urlbar-background {
background-color: #d6d6d6 !important;
}
}
@media (prefers-color-scheme: dark) {
#urlbar-results > *[selected=""] {
background-color: #1e2030 !important;
}
}
@media (prefers-color-scheme: light) {
#urlbar-results > *[selected=""] {
background-color: #e8e8e8 !important;
}
}
/*------------------------------------------------*/
/* Hide and Hover icons in URL Bar */
#nav-bar:not([customizing="true"]):not(.searchButton)
> #nav-bar-customization-target
> #urlbar-container:not(:hover)
> #urlbar:not([focused])
> #urlbar-input-container
> #page-action-buttons
.urlbar-page-action {
opacity: 0;
transition-delay: 500ms;
}
#nav-bar:not([customizing="true"]):not(.searchButton)
> #nav-bar-customization-target
> #urlbar-container:not(:hover)
> #urlbar:not([focused])
> #urlbar-input-container
> #identity-box
> #identity-permission-box:not([open]) {
opacity: 0;
transition-delay: 500ms;
}
#page-action-buttons .urlbar-page-action,
#identity-permission-box,
#notification-popup-box .notification-anchor-icon {
transition: opacity 0.2s ease;
}
#urlbar #identity-icon-box,
#urlbar #identity-permission-box {
opacity: 0 !important;
margin-inline-start: calc(-16px - 2 * var(--urlbar-icon-padding));
transition:
margin-inline-start 100ms linear,
opacity 200ms linear;
}
#urlbar #identity-box.notSecureText #identity-icon-box {
margin-inline-start: initial !important;
opacity: 1 !important;
color: #e36f6f !important;
}
#urlbar #identity-box.extensionPage #identity-icon-box {
margin-inline-start: initial !important;
opacity: 1 !important;
}
#identity-box:hover #identity-icon-box,
#identity-box:hover #identity-permission-box,
#identity-box #identity-permission-box[open="true"] {
opacity: 1 !important;
margin-inline-start: initial !important;
}
#urlbar-input-container .urlbar-input-box {
padding-inline-start: 2px !important;
}
#identity-box:hover ~ .urlbar-input-box > #urlbar-input {
mask-image: linear-gradient(to right, transparent, black 3ch) !important;
}
#page-action-buttons {
padding-inline-start: 8px;
}
#page-action-buttons .urlbar-page-action {
margin-inline-end: calc(-16px - 2 * var(--urlbar-icon-padding));
opacity: 0;
transition:
margin-inline-end 100ms linear,
opacity 200ms linear;
}
#page-action-buttons:hover > .urlbar-page-action,
.urlbar-page-action[open],
.urlbar-page-action[open] ~ .urlbar-page-action {
opacity: 1;
margin-inline-end: 0px !important;
}
#identity-box.chromeUI #identity-icon-box {
opacity: 1 !important;
margin-inline-start: initial;
}
#identity-box.chromeUI::after,
#identity-box.chromeUI:hover::after {
opacity: 0 !important;
}
#page-action-buttons:not(:hover)
#translations-button[translationsactive="true"]:not([open]) {
visibility: collapse !important;
}
/*------------------------------------------------*/
/* Create visual dots on both sides */
#identity-box::after,
#page-action-buttons::before {
position: relative;
content: "•••";
pointer-events: none;
transition: opacity 100ms ease;
align-self: center;
font-size: 0.7em;
}
#identity-box::after,
#page-action-buttons::before {
opacity: 0.2;
}
#identity-box::after {
transform: rotate(90deg);
left: 4px;
}
#page-action-buttons::before {
transform: rotate(-90deg);
right: 4px;
}
#identity-box:hover::after,
#page-action-buttons:hover::before {
opacity: 0.2 !important;
transition: opacity 50ms ease;
pointer-events: none;
}
#identity-box[pageproxystate="invalid"]::after,
#urlbar-input-container[pageproxystate="invalid"]
> #page-action-buttons::before {
opacity: 0 !important;
transition: opacity 50ms ease;
}
/* Linux changes for visual dots */
@media (-moz-platform: linux) {
#identity-box::after,
#page-action-buttons::before {
content: url('data:image/svg+xml,<%3Fxml version="1.0" encoding="utf-8"%3F><svg fill="%23FFFFFF" width="11px" height="11px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M20.25 16c0 2.347-1.903 4.25-4.25 4.25s-4.25-1.903-4.25-4.25c0-2.347 1.903-4.25 4.25-4.25s4.25 1.903 4.25 4.25zM20.25 27c0 2.347-1.903 4.25-4.25 4.25s-4.25-1.903-4.25-4.25c0-2.347 1.903-4.25 4.25-4.25s4.25 1.903 4.25 4.25zM20.25 5c0 2.347-1.903 4.25-4.25 4.25s-4.25-1.903-4.25-4.25c0-2.347 1.903-4.25 4.25-4.25s4.25 1.903 4.25 4.25z"></path></svg>');
transform: none;
font-size: unset;
}
#page-action-buttons::before {
right: 2px;
}
#identity-box::after {
left: 2px;
}
}
#identity-box[pageproxystate="valid"].notSecureText > .identity-box-button,
#identity-box[pageproxystate="valid"].extensionPage > .identity-box-button,
#identity-box[pageproxystate="valid"].chromeUI > .identity-box-button,
#urlbar-label-box,
#urlbar-zoom-button {
background-color: var(--firefoxcss-item-bg-color) !important;
}
#urlbar-zoom-button:hover {
background-color: var(--firefoxcss-urlbar-zoom-button) !important;
}
#urlbar-input-container #identity-box > .identity-box-button,
#tracking-protection-icon-container,
#urlbar-go-button,
#page-action-buttons .urlbar-page-action,
#notification-popup-box {
border-radius: 8px !important;
}
#urlbar-go-button,
#tracking-protection-icon-container {
display: none !important;
}
/*============================================================================================*/
/* BOOKMARK BAR */
/* Variables for toolbar & bookmark attributes */
:root {
--uc-bm-height: 24px;
--uc-bm-padding: 6px;
}
/* Style for Personal Toolbar */
#PersonalToolbar {
position: relative !important;
padding: 1px 6px !important;
}
/* Additional padding for touch density */
:root[uidensity="touch"] #PersonalToolbar {
--uc-bm-padding: 6px;
}
/* Transform and delay transition of Personal Toolbar */
#PersonalToolbar:not([customizing]) {
margin-bottom: calc(
2px - var(--uc-bm-height) - 2 * var(--uc-bm-padding)
) !important;
transform: rotateX(90deg) !important;
transform-origin: top !important;
transition: transform 0.1s ease-in-out 0.6s !important;
z-index: 2 !important;
}
/* Bookmark item padding and icon transition */
#PlacesToolbarItems > .bookmark-item {
padding-block: var(--uc-bm-padding) !important;
padding-left: 6px !important;
padding-right: 6px !important;
}
#PlacesToolbarItems > .bookmark-item .toolbarbutton-icon {
transition: opacity 0.1s ease-in-out 0.4s !important;
opacity: 0 !important;
}
/* Hover effect for toolbar and bookmark icon/text */
#navigator-toolbox:hover > #PersonalToolbar,
#navigator-toolbox:hover
#PlacesToolbarItems
> .bookmark-item
.toolbarbutton-icon,
#navigator-toolbox:hover
#PlacesToolbarItems
> .bookmark-item
.toolbarbutton-text {
transition-delay: 100ms !important;
transform: rotateX(0) !important;
opacity: 1 !important;
}
/* Bookmark item text transition */
#PlacesToolbarItems > .bookmark-item .toolbarbutton-text {
transition: opacity 0.1s ease-in-out 0.4s !important;
opacity: 0 !important;
}
/* Fix the white line above the bookmarks bar when it's empty */
#personal-toolbar-empty {
padding: 2px !important;
}
/*------------------------------------------------*/
/* Make it good in transparent bg */
@media (prefers-color-scheme: dark) {
#PlacesToolbarItems > * {
background: #333333 !important;
}
#PlacesToolbarItems > *:hover {
background: #555555 !important;
}
}
@media (prefers-color-scheme: light) {
#PlacesToolbarItems > * {
background: #cccccc !important;
}
#PlacesToolbarItems > *:hover {
background: #eeeeee !important;
}
}
/*============================================================================================*/
/* SIDE BAR */
/* Expand Side bar on hover */
#sidebar-box[sidebarcommand="_3c078156-979c-498b-8990-85f7987dd929_-sidebar-action"] {
--sidebar-width: 69px;
--sidebar-hover-width: 350px;
background: none !important;
position: relative;
min-width: var(--sidebar-width) !important;
width: var(--sidebar-width) !important;
max-width: var(--sidebar-width) !important;
z-index: 1;
}
#sidebar-box[sidebarcommand="_3c078156-979c-498b-8990-85f7987dd929_-sidebar-action"]
> #sidebar {
transition: min-width 200ms ease-in-out !important;
min-width: var(--sidebar-width) !important;
will-change: min-width;
transition-delay: 0.3s !important; /* Delay on hover off */
}
#sidebar-box[sidebarcommand="_3c078156-979c-498b-8990-85f7987dd929_-sidebar-action"]:hover
> #sidebar {
min-width: var(--sidebar-hover-width) !important;
transition-delay: 0.1s !important; /* No delay on hover on */
}
/* #sidebar-box { */
/* backdrop-filter: blur(10px); */
/* } */
/*------------------------------------------------*/
/* Hide Side bar header and line */
#sidebar-header,
#sidebar-splitter {
display: none !important;
}
/*------------------------------------------------*/
/* Sidebar Border */
@media (prefers-color-scheme: dark) {
#sidebar-box #sidebar,
#sidebar-box #webextpanels-window {
border-radius: 15px !important;
margin: 10px 10px 10px 5px !important;
border: 3px solid rgba(0, 0, 0, 0);
transition: border 0.3s ease !important;
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.5);
}
#sidebar-box #sidebar:hover,
#sidebar-box #webextpanels-:hover {
border: 3px solid rgba(183, 189, 248, 0.4) !important;
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.5);
}
}
@media (prefers-color-scheme: light) {
#sidebar-box #sidebar,
#sidebar-box #webextpanels-window {
border-radius: 15px !important;
margin: 10px 10px 10px 5px !important;
border: 3px solid rgba(51, 51, 51, 0.1);
transition: border 0.3s ease;
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.5);
}
#sidebar-box #sidebar:hover,
#sidebar-box #webextpanels-window:hover {
border: 3px solid rgba(51, 51, 51, 0.6);
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.5);
}
}
/*============================================================================================*/
/* SIDE BAR 2 (FLOORP) */
/* Make splitter invisible */
#sidebar-splitter2 {
appearance: none !important;
width: 10px !important; /* Set initial width */
transition:
width 0.3s ease-in-out,
opacity 0.3s ease-in-out; /* Add transitions */
}
#sidebar-splitter2:hover {
width: 20px !important; /* Width on hover */
opacity: 1; /* Opacity on hover */
}
/*------------------------------------------------*/
/* Hide Floorp sidebar header */
#sidebar2-header {
max-height: 0.5em !important;
min-height: 0.5em !important;
opacity: 0 !important;
transition:
max-height 0.3s ease-in-out,
min-height 0.3s ease-in-out,
opacity 0.3s ease-in-out;
}
#sidebar2-header:hover {
max-height: 2.5em !important;
min-height: 2.5em !important;
opacity: 1 !important;
}
/*------------------------------------------------*/
/* Floorp Sidebar Border */
@media (prefers-color-scheme: dark) {
#sidebar2-box browser {
border-radius: 15px !important;
margin: 3px 10px 10px 0px !important;
border: 3px solid rgba(0, 0, 0, 0);
transition: border 0.3s ease;
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.5);
}
#sidebar2-box browser:hover {
border: 3px solid rgba(183, 189, 248, 0.4) !important;
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.2);
}
}
.browser-sidebar2 {
background: none !important;
}
@media (prefers-color-scheme: light) {
#sidebar2-box browser {
border-radius: 15px !important;
margin: 10px 10px 10px 0px !important;
border: 3px solid rgba(51, 51, 51, 0.1);
transition: border 0.3s ease;
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.5);
}
#sidebar2-box browser:hover {
border: 3px solid rgba(51, 51, 51, 0.6);
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.2);
}
}
/*------------------------------------------------*/
/* Floorp Sidebar Select Box Styling */
#sidebar-select-box {
align-items: center !important;
}
.sidepanel-icon {
border-radius: 10px !important;
}
/*------------------------------------------------*/
/* Floorp Sidebar Border */
@media (prefers-color-scheme: dark) {
#sidebar-select-box {
background-color: #181926 !important;
border-radius: 15px !important;
margin: 10px 10px 10px 0px !important;
border: 3px solid rgba(0, 0, 0, 0);
transition: border 0.3s ease;
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.5);
}
#sidebar-select-box:hover {
border: 3px solid rgba(183, 189, 248, 0.4) !important;
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.5);
}
}
@media (prefers-color-scheme: light) {
#sidebar-select-box {
border-radius: 15px !important;
margin: 10px 10px 10px 0px !important;
border: 3px solid rgba(51, 51, 51, 0.1) !important;
transition: border 0.3s ease;
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.5);
}
#sidebar-select-box:hover {
border: 3px solid rgba(51, 51, 51, 0.6) !important;
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.5);
}
}
/*------------------------------------------------*/
/* Hide random stuff coming out of Floorp Sidebar */
.browser-sidebar2 {
border: none !important;
border-bottom: none !important;
}
#sidebar2-box[style="min-width: 0px; order: 6; width: 415px; max-width: 0px;"]
> * {
display: none !important;
}
/*============================================================================================*/
/* MAIN BROWSER */
/* Browser Border */
@media (prefers-color-scheme: dark) {
#main-window:not([sizemode="fullscreen"]) #appcontent browser {
border-radius: 15px !important;
margin: 10px 10px 10px 10px !important;
border: 3px solid rgba(0, 0, 0, 0);
transition: border 0.3s ease;
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.5);
clip-path: circle(80%) !important;
}
#main-window:not([sizemode="fullscreen"]) #appcontent browser:hover {
border: 3px solid rgba(183, 189, 248, 0.4);
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.5);
}
}
@media (prefers-color-scheme: light) {
#main-window:not([sizemode="fullscreen"]) #appcontent browser {
border-radius: 15px !important;
margin: 10px 10px 10px 10px !important;
border: 3px solid rgba(51, 51, 51, 0.1);
transition: border 0.3s ease;
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.5);
clip-path: circle(80%) !important;
}
#main-window:not([sizemode="fullscreen"]) #appcontent browser:hover {
border: 3px solid rgba(51, 51, 51, 0.6);
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.5);
}
}
/*============================================================================================*/
/* FIND BAR */
/* CTRL+F Search Bar Border */
@media (prefers-color-scheme: dark) {
.browserContainer > findbar {
border-radius: 15px !important;
margin: 0px 15px 0px 15px !important;
border: 3px solid rgba(0, 0, 0, 0) !important;
transition: border 0.3s ease !important;
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.5);
background-image: none !important;
background-color: #181926 !important;
}
.browserContainer > findbar:hover {
border: 3px solid rgba(183, 189, 248, 0.4) !important;
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.5);
}
.browserContainer > findbar .findbar-container {
background-color: #181926 !important;
}
}
@media (prefers-color-scheme: light) {
.browserContainer > findbar {
border-radius: 15px !important;
margin: 0px 15px 0px 15px !important;
border: 3px solid rgba(51, 51, 51, 0.1) !important;
transition: border 0.3s ease !important;
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.5);
}
.browserContainer > findbar:hover {
border: 3px solid rgba(51, 51, 51, 0.6) !important;
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.5);
}
}
/*------------------------------------------------*/
/* Text in the center */
.browserContainer > findbar .findbar-textbox {
border-radius: 10px !important;
text-align: center !important;
}

View file

@ -1,992 +0,0 @@
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
* {
/*--tab-corner-rounding: 5px;*/
--animation-speed: 0.4s;
--button-corner-rounding: 10px;
--urlbar-container-height: 40px !important;
--urlbar-min-height: 30px !important;
--urlbar-height: 30px !important;
--urlbar-toolbar-height: 38px !important;
--moz-hidden-unscrollable: scroll !important;
--toolbarbutton-border-radius: 3px !important;
--tabs-border-color: transparent;
}
#TabsToolbar .tabbrowser-tab,
#TabsToolbar .tabbrowser-tab .tab-stack,
#TabsToolbar .tabbrowser-tab .tab-background,
#TabsToolbar .tabbrowser-tab .tab-content {
border-top-left-radius: 10px !important;
border-top-right-radius: 10px !important;
border-bottom-left-radius: 10px !important;
border-bottom-right-radius: 10px !important;
margin-top: 0px;
max-height: 36px !important;
text-align: center;
}
#TabsToolbar:not([brighttext])
#tabbrowser-tabs:not([noshadowfortests])
.tabbrowser-tab:is([visuallyselected="true"], [multiselected])
> .tab-stack
> .tab-background {
box-shadow: none !important;
}
.tab-background,
.tab-stack {
min-height: 36px !important;
}
.tab-background {
margin-block: 0 0 !important;
}
.tabbrowser-tab {
min-height: 36px !important;
}
#TabsToolbar:hover {
background: transparent;
}
#star-button[starred],
#star-button {
display: none !important;
}
#bookmarks-menu-button toolbarbutton {
visibility: collapse !important;
}
/* multi tab selection */
#tabbrowser-tabs:not([noshadowfortests])
.tabbrowser-tab:is([multiselected])
> .tab-stack
> .tab-background:-moz-lwtheme {
outline-color: var(--toolbarseparator-color) !important;
}
.tab-line {
display: none;
}
#urlbar[breakout][breakout-extend],
#urlbar[breakout][breakout-extend-disabled][open] {
/* The z-index needs to be big enough to trump other positioned UI pieces
that we want to overlay. 3 is used in the tab bar. */
z-index: 3;
height: var(--urlbar-height) !important;
}
#urlbar-search-button {
margin-left: 5px;
}
/* Hide the »Go«-arrow in the URL Bar */
#urlbar-go-button {
display: none !important;
}
/* #page-action-buttons > :not(#urlbar-zoom-button) { display: none !important; } */
tab:not(:active) .tab-background {
transition: background-color var(--animation-speed) !important;
}
#back-button,
#forward-button {
display: none !important;
}
.titlebar-buttonbox-container {
display: none !important;
}
#pageActionButton {
display: none !important;
}
#PanelUI-menu-button {
padding: 0px !important;
}
#PanelUI-menu-button .toolbarbutton-icon {
width: 1px !important;
}
#PanelUI-menu-button .toolbarbutton-badge-stack {
padding: 0px !important;
}
/*---+---+---+---+---+---+---+
| T | A | B | | B | A | R |
+---+---+---+---+---+---+---*/
/* multi tab selection */
#tabbrowser-tabs:not([noshadowfortests])
.tabbrowser-tab:is([multiselected])
> .tab-stack
> .tab-background:-moz-lwtheme {
outline-color: var(--toolbarseparator-color) !important;
}
/* tab close button options */
.tabbrowser-tab:not([pinned]) .tab-close-button {
display: var(--show-tab-close-button) !important;
}
.tabbrowser-tab:not([pinned]):hover .tab-close-button {
display: var(--show-tab-close-button-hover) !important;
}
/* adaptive tab width */
.tabbrowser-tab[selected][fadein]:not([pinned]) {
max-width: var(--uc-active-tab-width) !important;
}
.tabbrowser-tab[fadein]:not([selected]):not([pinned]) {
max-width: var(--uc-inactive-tab-width) !important;
}
/* container tabs indicator */
.tabbrowser-tab[usercontextid]
> .tab-stack
> .tab-background
> .tab-context-line {
margin: -1px var(--container-tabs-indicator-margin) 0
var(--container-tabs-indicator-margin) !important;
height: 1px !important;
box-shadow: var(--uc-identity-glow) var(--identity-tab-color) !important;
}
/* show favicon when media is playing but tab is hovered */
.tab-icon-image:not([pinned]) {
opacity: 1 !important;
}
/* Makes the speaker icon to always appear if the tab is playing (not only on hover) */
.tab-icon-overlay:not([crashed]),
.tab-icon-overlay[pinned][crashed][selected] {
top: 5px !important;
z-index: 1 !important;
padding: 1.5px !important;
inset-inline-end: -8px !important;
width: 16px !important;
height: 16px !important;
border-radius: 10px !important;
}
/* style and position speaker icon */
.tab-icon-overlay:not([sharing], [crashed]):is(
[soundplaying],
[muted],
[activemedia-blocked]
) {
stroke: transparent !important;
background: transparent !important;
opacity: 1 !important;
fill-opacity: 0.8 !important;
color: currentColor !important;
stroke: var(--toolbar-bgcolor) !important;
background-color: var(--toolbar-bgcolor) !important;
}
/* change the colours of the speaker icon on active tab to match tab colours */
.tabbrowser-tab[selected]
.tab-icon-overlay:not([sharing], [crashed]):is(
[soundplaying],
[muted],
[activemedia-blocked]
) {
stroke: var(--toolbar-bgcolor) !important;
background-color: var(--toolbar-bgcolor) !important;
box-shadow: 3px 3px 1px 1px #181926;
}
.tab-icon-overlay:not([pinned], [sharing], [crashed]):is(
[soundplaying],
[muted],
[activemedia-blocked]
) {
margin-inline-end: 9.5px !important;
}
.tabbrowser-tab:not([image])
.tab-icon-overlay:not([pinned], [sharing], [crashed]) {
top: 0 !important;
padding: 0 !important;
margin-inline-end: 5.5px !important;
inset-inline-end: 0 !important;
}
.tab-icon-overlay:not([crashed])[soundplaying]:hover,
.tab-icon-overlay:not([crashed])[muted]:hover,
.tab-icon-overlay:not([crashed])[activemedia-blocked]:hover {
color: currentColor !important;
stroke: var(--toolbar-color) !important;
background-color: var(--toolbar-color) !important;
fill-opacity: 0.95 !important;
}
.tabbrowser-tab[selected] .tab-icon-overlay:not([crashed])[soundplaying]:hover,
.tabbrowser-tab[selected] .tab-icon-overlay:not([crashed])[muted]:hover,
.tabbrowser-tab[selected]
.tab-icon-overlay:not([crashed])[activemedia-blocked]:hover {
color: currentColor !important;
stroke: var(--toolbar-color) !important;
background-color: var(--toolbar-color) !important;
fill-opacity: 0.95 !important;
box-shadow: 3px 3px 1px 1px #181926;
}
/* speaker icon colour fix */
#TabsToolbar .tab-icon-overlay:not([crashed])[soundplaying],
#TabsToolbar .tab-icon-overlay:not([crashed])[muted],
#TabsToolbar .tab-icon-overlay:not([crashed])[activemedia-blocked] {
color: var(--toolbar-color) !important;
}
/* speaker icon colour fix on hover */
#TabsToolbar .tab-icon-overlay:not([crashed])[soundplaying]:hover,
#TabsToolbar .tab-icon-overlay:not([crashed])[muted]:hover,
#TabsToolbar .tab-icon-overlay:not([crashed])[activemedia-blocked]:hover {
color: var(--toolbar-bgcolor) !important;
}
:root {
/* Allow tabs to have dynamic widths based on
* the Tab Bars maximum width
*/
--uc-active-tab-width: clamp(50px, 25vw, 200px);
--uc-inactive-tab-width: clamp(100px, 20vw, 200px);
/* Enable this to always show the Tab Close button
* possible values:
* show: -moz-inline-block
* hide: none
*/
--show-tab-close-button: none;
/* Enable this to only show the Tab Close button on tab hover
* possible values:
* show: -moz-inline-block
* hide: none
*/
--show-tab-close-button-hover: none;
/* Hide the all Tabs button from the Tab Bar
* possible values:
* show: -moz-box
* hide: none
*/
--uc-show-all-tabs-button: none;
/* Left and Right "dip" of the container indicator
* 0px equals tab width
* higer values make the indicator smaller
*/
--container-tabs-indicator-margin: 10px;
/* Amount of Glow to add to the container indicator
* Setting it to 0 disables the Glow
*/
--uc-identity-glow: 0 1px 10px 1px;
font-family: "JetBrainsMono NF";
}
:root:not([customizing]) :hover > .tabbrowser-tab:not(:hover) {
transition:
blur,
ease 0.5s !important;
--uc-active-tab-width: clamp(100px, 30vw, 300px);
--uc-inactive-tab-width: clamp(100px, 20vw, 200px);
}
:root:not([customizing]) :not(:hover) > .tabbrowser-tab {
transition:
blur,
ease 0.2s !important;
--uc-active-tab-width: clamp(100px, 30vw, 300px);
--uc-inactive-tab-width: clamp(100px, 20vw, 200px);
}
#tabbrowser-tabs .tab-label-container[customizing] {
color: transparent;
transition: ease 0.5s;
transition-delay: 3s;
}
:root[uidensity="compact"] {
--tab-min-height: 38px !important;
--uc-active-tab-width: clamp(100px, 30vw, 300px);
--uc-inactive-tab-width: clamp(100px, 20vw, 200px);
}
tab:not([selected]):hover .tab-background {
background-color: var(
--toolbarbutton-hover-background,
rgba(182, 182, 182, 0.11)
) !important;
}
.tab-close-button {
list-style-image: url("active_close.png");
border-radius: 10px;
transition: list-style-image var(--animation-speed) ease-out !important;
}
.tab-close-button:hover {
list-style-image: url("mouseover_close.png");
}
#navigator-toolbox::after {
display: none !important;
}
.titlebar-button {
padding-left: 10px !important;
padding-right: 15px !important;
padding-top: 10px !important;
}
#urlbar {
/*border-radius: calc(1px + var(--button-corner-rounding)) !important;*/
height: 30px;
margin-left: 5px;
}
#urlbar-container *:not(#identity-box) {
border-color: transparent !important;
}
#pageActionSeparator {
display: none !important;
}
#urlbar:hover .urlbar-icon,
#urlbar:active .urlbar-icon,
#urlbar[focused] .urlbar-icon,
#urlbar:hover .urlbar-icon:not([open]) image,
#urlbar:active .urlbar-icon image,
#urlbar[focused] .urlbar-icon image {
fill: var(--toolbar-color) !important;
}
.urlbar-page-action[open] {
background-color: var(--toolbarbutton-active-background) !important;
fill: var(--toolbar-color) !important;
}
.urlbar-page-action[open]:hover {
background-color: var(--toolbarbutton-active-background) !important;
fill: var(--toolbar-color) !important;
}
#urlbar[breakout] {
width: 100% !important;
padding: 0px !important;
z-index: 99 !important;
}
#urlbar[breakout][breakout-extend] {
transition: width 1.9s ease !important;
top: 3px !important;
left: 0 !important;
width: 100% !important;
}
#urlbar[breakout] {
top: 4.9px !important;
}
#urlbar[breakout][breakout-extend] > #urlbar-input-container {
height: 100% !important;
padding-block: 0 !important;
padding-inline: 0 !important;
}
.urlbar-page-action[open] .urlbar-icon {
fill: var(--toolbar-color) !important;
}
#library-button[animate] {
margin-bottom: 0px !important;
margin-top: 50px !important;
}
#library-button[animate] image {
margin-bottom: -120px !important;
margin-top: 100px !important;
}
.urlbar-scheme {
padding-bottom: 11px !important;
}
#urlbar-container {
margin-left: -5px !important;
margin-right: 2px !important;
}
.urlbar-input::-moz-selection {
background-color: red !important;
}
#urlbar-container #urlbar[pageproxystate="invalid"] {
margin-left: 5px !important;
}
.urlbar-input-box {
padding: 5px 5px !important;
}
/* #urlbar {
background-color: transparent !important;
color: var(--lwt-toolbar-field-color, black) !important;
} */
.urlbarView {
background: var(--toolbar-field-focus-background-color) !important;
border-bottom-left-radius: 10px !important;
border-bottom-right-radius: 10px !important;
box-shadow: 10px 45px 146px -64px rgba(0, 0, 0, 0.65);
margin-inline: 0 !important;
width: 100% !important;
}
#TabsToolbar .toolbarbutton-1 > .toolbarbutton-icon,
#TabsToolbar .toolbarbutton-1 > .toolbarbutton-text,
#TabsToolbar .toolbarbutton-1 > .toolbarbutton-badge-stack {
border-radius: 50rem !important;
height: 2rem !important;
width: 2rem !important;
padding: 4px !important;
}
#pocket-button {
padding-bottom: 4px !important;
}
.urlbar-icon-wrapper > .urlbar-icon:hover {
background-color: transparent !important;
}
.urlbar-icon-wrapper {
background-color: transparent !important;
transition: background-color var(--animation-speed) !important;
}
#urlbar:not([focused]) {
border-radius: 4px !important;
}
#identity-box:hover,
.urlbar-icon:hover,
.urlbar-icon-wrapper:hover,
[anonid="urlbar-go-button"]:hover {
border-radius: 10px !important;
}
#identity-box:active,
.urlbar-icon:active,
.urlbar-icon-wrapper:active,
[anonid="urlbar-go-button"]:active {
background-color: var(--toolbarbutton-active-background) !important;
}
[lwthemetextcolor="dark"] .urlbarView-body-outer {
background-color: #ff5340 !important;
color: var(--toolbar-color) !important;
}
.urlbarView-body-inner {
background-color: var(--toolbar-bgcolor) !important;
}
.downloadsPanelFooterButton:hover {
outline: none !important;
}
#TabsToolbar > .titlebar-buttonbox-container {
margin-right: 20px;
}
#urlbar,
#searchbar {
border: none !important;
}
#page-action-buttons > *:not(#star-button-box),
.urlbar-history-dropmarker {
opacity: 0 !important;
}
#urlbar:hover #page-action-buttons > *,
#urlbar:hover .urlbar-history-dropmarker {
opacity: 1 !important;
}
menu,
menuitem,
menucaption {
-moz-appearance: none !important;
height: 36px !important;
}
menu[disabled="true"][_moz-menuactive="false"],
menuitem[disabled="true"][_moz-menuactive="false"],
menucaption[disabled="true"][_moz-menuactive="false"] {
color: white !important;
}
menu[disabled="true"],
menuitem[disabled="true"],
menucaption[disabled="true"] {
color: var(
--toolbarbutton-hover-background,
rgba(182, 182, 182, 0.11)
) !important;
}
menu[disabled="true"][_moz-menuactive="true"],
menuitem[disabled="true"][_moz-menuactive="true"],
menucaption[disabled="true"][_moz-menuactive="true"] {
color: var(
--toolbarbutton-hover-background,
rgba(182, 182, 182, 0.11)
) !important;
background-color: transparent !important;
}
menu:not(.subviewbutton) > .menu-right {
margin-top: 2px !important;
margin-right: 0px !important;
width: 0px !important;
}
menu:not(.subviewbutton) > .menu-right image {
margin-right: -5px !important;
margin-top: -2px !important;
/*border: 6px solid var(--toolbar-color) !important;*/
border-top-color: transparent !important;
border-right-color: transparent !important;
border-bottom-color: transparent !important;
}
@media (-moz-os-version: windows-xp),
(-moz-os-version: windows-vista),
(-moz-os-version: windows-win7),
(-moz-os-version: windows-win8),
(-moz-os-version: windows-win10) {
menupopup .popup-internal-box {
margin: -2px !important;
padding-bottom: 3px !important;
padding-top: 3px !important;
}
.bookmark-item .scrollbutton-up {
margin-top: -3px !important;
}
.bookmark-item .scrollbutton-up > .toolbarbutton-icon {
margin-top: -2px !important;
border: 6px solid MenuText !important;
border-top-color: transparent !important;
border-right-color: transparent !important;
border-left-color: transparent !important;
}
.bookmark-item .scrollbutton-down {
margin-bottom: -3px !important;
}
.bookmark-item .scrollbutton-down > .toolbarbutton-icon {
margin-bottom: -2px !important;
border: 6px solid MenuText !important;
border-bottom-color: transparent !important;
border-right-color: transparent !important;
border-left-color: transparent !important;
}
menupopup {
margin-left: 1px !important;
}
menu,
menuitem,
menucaption {
padding-left: 5px !important;
padding-right: 5px !important;
}
menu:not(.subviewbutton) > .menu-right {
margin-right: 0px !important;
padding-left: 0px !important;
}
}
.titlebar-spacer[type="pre-tabs"],
.titlebar-spacer[type="post-tabs"] {
display: none !important;
}
:root:-moz-lwtheme-brighttext {
--autocomplete-popup-background: #2a2a2e !important;
--autocomplete-popup-highlight-background: #ff5340 !important;
--uc-active-tab-width: clamp(100px, 30vw, 300px);
--uc-inactive-tab-width: clamp(100px, 20vw, 200px);
/* Enable this to always show the Tab Close button
* possible values:
* show: -moz-inline-block
* hide: none
*/
--show-tab-close-button: none;
/* Enable this to only show the Tab Close button on tab hover
* possible values:
* show: -moz-inline-block
* hide: none
*/
--show-tab-close-button-hover: none;
}
@-moz-document url(about:blank),
url(about:newtab),
url(about:home) {
html:not(#ublock0-epicker),
html:not(#ublock0-epicker) body,
#newtab-customize-overlay {
background: black !important;
}
}
.tabbrowser-tab .tab-close-button {
visibility: collapse !important;
}
#tabs-newtab-button {
display: none;
margin-left: 4px !important;
border-radius: 100% !important;
}
.tabbrowser-tab::before,
.tabbrowser-tab::after {
display: none !important;
--uc-active-tab-width: clamp(100px, 30vw, 300px);
--uc-inactive-tab-width: clamp(100px, 20vw, 200px);
}
.tab-background[selected="true"] {
color: #111111 !important;
}
.tabbrowser-tab {
text-align: center !important;
justify-content: center;
align-items: center;
margin: 6px 0px 6px 6px !important;
border: 2px solid rgba(183, 189, 248, 0.5);
background-clip: padding-box;
padding-inline: 0 !important;
box-shadow: 3px 3px 1px 1px #18192637;
--uc-active-tab-width: clamp(100px, 30vw, 300px);
--uc-inactive-tab-width: clamp(100px, 20vw, 200px);
}
.tabbrowser-tab[selected="true"] {
box-shadow: 3px 3px 1px 1px #181926;
font-size: 1.1rem;
}
.tab-label-container[selected="true"] {
font-size: 1.1rem;
}
@keyframes fade {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
#nav-bar:not([customizing]) {
visibility: visible;
margin-top: -40px;
transition-delay: 1s;
filter: alpha(opacity=0);
opacity: 0;
transition:
visibility,
ease 0.5s,
margin-top,
ease 0.5s,
opacity,
ease 0.5s,
rotate,
ease 0.4s !important;
}
#tabs-newtab-button {
padding: 0.75rem 0.2rem 0.2rem 0.2rem !important;
}
#nav-bar:hover,
#nav-bar:focus-within,
#urlbar[focused="true"],
#identity-box[open="true"],
#titlebar:hover + #nav-bar:not([customizing]),
#toolbar-menubar:not([inactive="true"]) ~ #nav-bar:not([customizing]) {
visibility: visible;
margin-top: 0px;
filter: alpha(opacity=100);
opacity: 100;
margin-bottom: -0.2px;
}
#PersonalToolbar {
margin-top: 0px;
}
#nav-bar .toolbarbutton-1[open="true"] {
visibility: visible;
opacity: 100;
}
:-moz-any(#content, #appcontent) browser {
overflow-y: scroll;
margin-bottom: 0px !important;
overflow-x: scroll;
}
/*tooltip*/
#tabbrowser-tab-tooltip {
-moz-appearance: none !important;
font-size: 1.4rem !important;
width: 170px !important;
height: auto;
font-weight: normal !important;
color: var(--lwt-tab-text) !important;
background-color: var(--toolbar-bgcolor) !important;
padding: 6px;
border-radius: 10px;
box-shadow: none !important;
}
#bookmarksPanel {
--lwt-toolbar-field-focus: white !important;
--lwt-tab-text: black !important;
}
window#places[title="Library"] {
--lwt-toolbar-field-focus: white !important;
--lwt-tab-text: black !important;
}
menupopup {
-moz-appearance: none !important;
padding: 8px !important;
border-radius: 10px !important;
background: red !important;
background: var(--toolbar-field-focus-background-color) !important;
border: none !important;
min-width: 280px !important;
}
.menuitem-with-favicon {
color: var(--lwt-toolbar-field-focus-color) !important;
}
.openintabs-menuitem {
color: var(--lwt-toolbar-field-focus-color) !important;
}
.bookmark-item:hover {
color: var(--lwt-toolbar-field-focus-color) !important;
}
menuseparator {
-moz-appearance: none !important;
border: none !important;
background-color: none !important;
}
menuitem,
menu {
-moz-appearance: none !important;
padding: 7.5px 6px !important;
}
menuitem[disabled="true"],
menuitem[disabled="true"] > .menu-text {
color: gray !important;
}
menuitem:hover,
menu:hover,
menu[open="true"],
menuitem[_moz-menuactive="true"] {
-moz-appearance: none !important;
background-color: var(--toolbarbutton-hover-background) !important;
/* filter: brightness(200%); */
border-radius: 5px;
}
menugroup {
padding: 0px !important;
background-color: transparent !important;
}
menuitem[type="checkbox"] {
padding-left: 8px !important;
padding-top: 6.5px !important;
padding-bottom: 6.5px !important;
}
menuitem[type="radio"] {
padding-left: 8px !important;
padding-top: 6.5px !important;
padding-bottom: 6.5px !important;
}
menuitem[type="checkbox"] > .menu-iconic-text,
menuitem[type="radio"] > .menu-iconic-text {
padding-left: 5px !important;
}
menuitem[checked="true"][type="checkbox"] > .menu-iconic-left {
padding: 7px 0px 0px 0px !important;
border: solid white;
border-width: 0 0 2px 2px;
transform: rotate(-45deg) scale(0.75);
margin-bottom: 4px !important;
}
menuitem[checked="true"][type="radio"] > .menu-iconic-left {
padding: 1px !important;
border: solid white;
height: 17px !important;
border-radius: 100%;
background: white;
transform: scale(0.5);
}
menucaption {
background-color: transparent !important;
color: white !important;
}
#ContentSelectDropdown > menupopup {
background-image: none !important;
}
#ContentSelectDropdown {
padding: 0px !important;
}
menulist {
-moz-appearance: none !important;
padding: 4px 4px 4px 4px !important;
border: 2px solid #666666 !important;
background-color: transparent !important;
}
menulist:hover {
padding: 4px 4px 4px 4px !important;
border: 2px solid #999999 !important;
background-color: transparent !important;
}
menulist[open="true"] {
border: 2px solid #666666 !important;
background-color: #333333 !important;
}
#context-back > .menu-iconic-left,
#context-forward > .menu-iconic-left,
#context-reload > .menu-iconic-left,
#context-stop > .menu-iconic-left,
#context-bookmarkpage > .menu-iconic-left {
transform: scale(1.8);
}
.menu-iconic-left {
-moz-appearance: none !important;
padding: 0px 5px 0px 9px !important;
}
.menu-right {
-moz-appearance: none !important;
padding: 7.5px !important;
margin-right: 6px !important;
color: white !important;
border: solid white;
border-width: 0 2px 2px 0px;
transform: rotate(-45deg) scale(0.55);
}
menu[_moz-menuactive="true"],
menuitem[_moz-menuactive="true"] {
-moz-font-smoothing-background-color: -moz-mac-active-menuitem;
color: inherit !important;
}
/*
Clean and tight extensions menu
#unified-extensions-view .panel-header,
#unified-extensions-view .panel-header + toolbarseparator,
#unified-extensions-view .panel-subview-body + toolbarseparator,
#unified-extensions-view #unified-extensions-manage-extensions {
display:none !important;
}
#unified-extensions-view .unified-extensions-item-menu-button.subviewbutton{
visibility: hidden !important;
transition: 300ms !important;
-moz-margin-end: -3.6em !important;
}
#unified-extensions-view .panel-subview-body {
padding-top: 8px !important;
padding-bottom: 8px !important;
}
#unified-extensions-view:hover
.unified-extensions-item-menu-button.subviewbutton{
visibility: visible !important;
transition: 300ms !important;
-moz-margin-end: initial !important;
}
#unified-extensions-view .unified-extensions-item-icon,
#unified-extensions-view .unified-extensions-item[unified-extensions="true"] .webextension-browser-action
> .toolbarbutton-badge-stack > .toolbarbutton-icon {
height: 20px !important;
width: 20px !important;
}
#unified-extensions-view .unified-extensions-item-icon,
#unified-extensions-view .unified-extensions-item[unified-extensions="true"] .webextension-browser-action > .toolbarbutton-badge-stack {
margin-inline-end: 2px !important;
}
#unified-extensions-view .unified-extensions-item-name,
#unified-extensions-view .unified-extensions-item-message {
padding-inline-start: 0.5em !important;
width: 21em !important;
}
#unified-extensions-view .unified-extensions-item-action-button.subviewbutton {
padding-top: 2px !important;
padding-bottom: 2px !important;
}*/

View file

@ -1,11 +1,12 @@
/* Theming */
/* Catppuccin Macchiato Lavender userChrome.css*/
@media (prefers-color-scheme: dark) {
:root {
--zen-colors-primary: #24273a !important;
--zen-colors-primary: #363a4f !important;
--zen-primary-color: #b7bdf8 !important;
--zen-colors-secondary: #363a4f !important;
--zen-colors-tertiary: #1e2030 !important;
--zen-colors-border: #363a4f !important;
--zen-colors-border: #b7bdf8 !important;
--toolbarbutton-icon-fill: #b7bdf8 !important;
--lwt-text-color: #cad3f5 !important;
--toolbar-field-color: #cad3f5 !important;
@ -22,10 +23,13 @@
--newtab-background-color: #24273a !important;
--zen-themed-toolbar-bg: #1e2030 !important;
--zen-main-browser-background: #1e2030 !important;
--newtab-primary-action-background: #b7bdf8 !important;
--toolbox-bgcolor-inactive: #1e2030 !important;
}
#permissions-granted-icon {
color: #1e2030 !important;
}
.sidebar-placesTree {
background-color: #24273a !important;
}
@ -39,7 +43,7 @@
}
#urlbar-background {
background-color: #1e2030 !important;
background-color: #24273a !important;
}
.content-shortcuts {
@ -54,6 +58,75 @@
#zenEditBookmarkPanelFaviconContainer {
background: #181926 !important;
}
#zen-media-controls-toolbar {
& #zen-media-progress-bar {
&::-moz-range-track {
background: #363a4f !important;
}
}
}
toolbar .toolbarbutton-1 {
&:not([disabled]) {
&:is([open], [checked])
> :is(
.toolbarbutton-icon,
.toolbarbutton-text,
.toolbarbutton-badge-stack
) {
fill: #181926;
}
}
}
.identity-color-blue {
--identity-tab-color: #8aadf4 !important;
--identity-icon-color: #8aadf4 !important;
}
.identity-color-turquoise {
--identity-tab-color: #8bd5ca !important;
--identity-icon-color: #8bd5ca !important;
}
.identity-color-green {
--identity-tab-color: #a6da95 !important;
--identity-icon-color: #a6da95 !important;
}
.identity-color-yellow {
--identity-tab-color: #eed49f !important;
--identity-icon-color: #eed49f !important;
}
.identity-color-orange {
--identity-tab-color: #f5a97f !important;
--identity-icon-color: #f5a97f !important;
}
.identity-color-red {
--identity-tab-color: #ed8796 !important;
--identity-icon-color: #ed8796 !important;
}
.identity-color-pink {
--identity-tab-color: #f5bde6 !important;
--identity-icon-color: #f5bde6 !important;
}
.identity-color-purple {
--identity-tab-color: #c6a0f6 !important;
--identity-icon-color: #c6a0f6 !important;
}
hbox#titlebar {
background-color: #1e2030 !important;
}
#zen-appcontent-navbar-container {
background-color: #1e2030 !important;
}
}
#zen-essentials-container {

View file

@ -1,3 +1,5 @@
/* Catppuccin Macchiato Lavender userContent.css*/
@media (prefers-color-scheme: dark) {
/* Common variables affecting all pages */
@-moz-document url-prefix("about:") {
@ -19,6 +21,7 @@
--newtab-element-hover-color: #363a4f !important;
--newtab-text-primary-color: #cad3f5 !important;
--newtab-wordmark-color: #cad3f5 !important;
--newtab-primary-action-background: #b7bdf8 !important;
}
.icon {
@ -83,6 +86,46 @@
.main-content {
background-color: #181926 !important;
}
.identity-color-blue {
--identity-tab-color: #8aadf4 !important;
--identity-icon-color: #8aadf4 !important;
}
.identity-color-turquoise {
--identity-tab-color: #8bd5ca !important;
--identity-icon-color: #8bd5ca !important;
}
.identity-color-green {
--identity-tab-color: #a6da95 !important;
--identity-icon-color: #a6da95 !important;
}
.identity-color-yellow {
--identity-tab-color: #eed49f !important;
--identity-icon-color: #eed49f !important;
}
.identity-color-orange {
--identity-tab-color: #f5a97f !important;
--identity-icon-color: #f5a97f !important;
}
.identity-color-red {
--identity-tab-color: #ed8796 !important;
--identity-icon-color: #ed8796 !important;
}
.identity-color-pink {
--identity-tab-color: #f5bde6 !important;
--identity-icon-color: #f5bde6 !important;
}
.identity-color-purple {
--identity-tab-color: #c6a0f6 !important;
--identity-icon-color: #c6a0f6 !important;
}
}
/* Variables and styles specific to about:addons */

File diff suppressed because one or more lines are too long

View file

@ -1,347 +0,0 @@
//
/* You may copy+paste this file and use it as it is.
*
* If you make changes to your about:config while the program is running, the
* changes will be overwritten by the user.js when the application restarts.
*
* To make lasting changes to preferences, you will have to edit the user.js.
*/
/****************************************************************************
* Betterfox *
* "Ad meliora" *
* version: 129 *
* url: https://github.com/yokoffing/Betterfox *
****************************************************************************/
/****************************************************************************
* SECTION: FASTFOX *
****************************************************************************/
/** GENERAL ***/
user_pref("content.notify.interval", 100000);
/** GFX ***/
user_pref("gfx.canvas.accelerated.cache-items", 4096);
user_pref("gfx.canvas.accelerated.cache-size", 512);
user_pref("gfx.content.skia-font-cache-size", 20);
/** DISK CACHE ***/
user_pref("browser.cache.jsbc_compression_level", 3);
/** MEDIA CACHE ***/
user_pref("media.memory_cache_max_size", 65536);
user_pref("media.cache_readahead_limit", 7200);
user_pref("media.cache_resume_threshold", 3600);
/** IMAGE CACHE ***/
user_pref("image.mem.decode_bytes_at_a_time", 32768);
/** NETWORK ***/
user_pref("network.http.max-connections", 1800);
user_pref("network.http.max-persistent-connections-per-server", 10);
user_pref("network.http.max-urgent-start-excessive-connections-per-host", 5);
user_pref("network.http.pacing.requests.enabled", false);
user_pref("network.dnsCacheExpiration", 3600);
user_pref("network.ssl_tokens_cache_capacity", 10240);
/** SPECULATIVE LOADING ***/
user_pref("network.dns.disablePrefetch", true);
user_pref("network.dns.disablePrefetchFromHTTPS", true);
user_pref("network.prefetch-next", false);
user_pref("network.predictor.enabled", false);
user_pref("network.predictor.enable-prefetch", false);
/** EXPERIMENTAL ***/
user_pref("layout.css.grid-template-masonry-value.enabled", true);
user_pref("dom.enable_web_task_scheduling", true);
user_pref("dom.security.sanitizer.enabled", true);
/****************************************************************************
* SECTION: SECUREFOX *
****************************************************************************/
/** TRACKING PROTECTION ***/
user_pref("browser.contentblocking.category", "strict");
user_pref(
"urlclassifier.trackingSkipURLs",
"*.reddit.com, *.twitter.com, *.twimg.com, *.tiktok.com",
);
user_pref(
"urlclassifier.features.socialtracking.skipURLs",
"*.instagram.com, *.twitter.com, *.twimg.com",
);
user_pref("network.cookie.sameSite.noneRequiresSecure", true);
user_pref("browser.download.start_downloads_in_tmp_dir", true);
user_pref("browser.helperApps.deleteTempFileOnExit", true);
user_pref("browser.uitour.enabled", false);
user_pref("privacy.globalprivacycontrol.enabled", true);
/** OCSP & CERTS / HPKP ***/
user_pref("security.OCSP.enabled", 0);
user_pref("security.remote_settings.crlite_filters.enabled", true);
user_pref("security.pki.crlite_mode", 2);
/** SSL / TLS ***/
user_pref("security.ssl.treat_unsafe_negotiation_as_broken", true);
user_pref("browser.xul.error_pages.expert_bad_cert", true);
user_pref("security.tls.enable_0rtt_data", false);
/** DISK AVOIDANCE ***/
user_pref("browser.privatebrowsing.forceMediaMemoryCache", true);
user_pref("browser.sessionstore.interval", 60000);
/** SHUTDOWN & SANITIZING ***/
user_pref("privacy.history.custom", true);
/** SEARCH / URL BAR ***/
user_pref("browser.urlbar.trimHttps", true);
user_pref("browser.urlbar.untrimOnUserInteraction.featureGate", true);
user_pref("browser.search.separatePrivateDefault.ui.enabled", true);
user_pref("browser.urlbar.update2.engineAliasRefresh", true);
user_pref("browser.search.suggest.enabled", false);
user_pref("browser.urlbar.quicksuggest.enabled", false);
user_pref("browser.urlbar.suggest.quicksuggest.sponsored", false);
user_pref("browser.urlbar.suggest.quicksuggest.nonsponsored", false);
user_pref("browser.urlbar.groupLabels.enabled", false);
user_pref("browser.formfill.enable", false);
user_pref("security.insecure_connection_text.enabled", true);
user_pref("security.insecure_connection_text.pbmode.enabled", true);
user_pref("network.IDN_show_punycode", true);
/** HTTPS-FIRST POLICY ***/
user_pref("dom.security.https_first", true);
/** PASSWORDS ***/
user_pref("signon.formlessCapture.enabled", false);
user_pref("signon.privateBrowsingCapture.enabled", false);
user_pref("network.auth.subresource-http-auth-allow", 1);
user_pref("editor.truncate_user_pastes", false);
/** MIXED CONTENT + CROSS-SITE ***/
user_pref("security.mixed_content.block_display_content", true);
user_pref("pdfjs.enableScripting", false);
user_pref("extensions.postDownloadThirdPartyPrompt", false);
/** HEADERS / REFERERS ***/
user_pref("network.http.referer.XOriginTrimmingPolicy", 2);
/** CONTAINERS ***/
user_pref("privacy.userContext.ui.enabled", true);
/** WEBRTC ***/
user_pref("media.peerconnection.ice.proxy_only_if_behind_proxy", true);
user_pref("media.peerconnection.ice.default_address_only", true);
/** SAFE BROWSING ***/
user_pref("browser.safebrowsing.downloads.remote.enabled", false);
/** MOZILLA ***/
user_pref("permissions.default.desktop-notification", 2);
user_pref("permissions.default.geo", 2);
user_pref("permissions.manager.defaultsUrl", "");
user_pref("webchannel.allowObject.urlWhitelist", "");
/** TELEMETRY ***/
user_pref("datareporting.policy.dataSubmissionEnabled", false);
user_pref("datareporting.healthreport.uploadEnabled", false);
user_pref("toolkit.telemetry.unified", false);
user_pref("toolkit.telemetry.enabled", false);
user_pref("toolkit.telemetry.server", "data:,");
user_pref("toolkit.telemetry.archive.enabled", false);
user_pref("toolkit.telemetry.newProfilePing.enabled", false);
user_pref("toolkit.telemetry.shutdownPingSender.enabled", false);
user_pref("toolkit.telemetry.updatePing.enabled", false);
user_pref("toolkit.telemetry.bhrPing.enabled", false);
user_pref("toolkit.telemetry.firstShutdownPing.enabled", false);
user_pref("toolkit.telemetry.coverage.opt-out", true);
user_pref("toolkit.coverage.opt-out", true);
user_pref("toolkit.coverage.endpoint.base", "");
user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
user_pref("browser.newtabpage.activity-stream.telemetry", false);
/** EXPERIMENTS ***/
user_pref("app.shield.optoutstudies.enabled", false);
user_pref("app.normandy.enabled", false);
user_pref("app.normandy.api_url", "");
/** CRASH REPORTS ***/
user_pref("breakpad.reportURL", "");
user_pref("browser.tabs.crashReporting.sendReport", false);
user_pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false);
/** DETECTION ***/
user_pref("captivedetect.canonicalURL", "");
user_pref("network.captive-portal-service.enabled", false);
user_pref("network.connectivity-service.enabled", false);
/****************************************************************************
* SECTION: PESKYFOX *
****************************************************************************/
/** MOZILLA UI ***/
user_pref("browser.privatebrowsing.vpnpromourl", "");
user_pref("extensions.getAddons.showPane", false);
user_pref("extensions.htmlaboutaddons.recommendations.enabled", false);
user_pref("browser.discovery.enabled", false);
user_pref("browser.shell.checkDefaultBrowser", false);
user_pref(
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons",
false,
);
user_pref(
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features",
false,
);
user_pref("browser.preferences.moreFromMozilla", false);
user_pref("browser.aboutConfig.showWarning", false);
user_pref("browser.aboutwelcome.enabled", false);
user_pref("browser.tabs.tabmanager.enabled", false);
user_pref("browser.profiles.enabled", true);
/** THEME ADJUSTMENTS ***/
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
user_pref("browser.compactmode.show", true);
user_pref("browser.display.focus_ring_on_anything", true);
user_pref("browser.display.focus_ring_style", 0);
user_pref("browser.display.focus_ring_width", 0);
user_pref("layout.css.prefers-color-scheme.content-override", 2);
user_pref("browser.privateWindowSeparation.enabled", false); // WINDOWS
user_pref(
"browser.newtabpage.activity-stream.newtabWallpapers.v2.enabled",
true,
);
/** COOKIE BANNER HANDLING ***/
user_pref("cookiebanners.service.mode", 1);
user_pref("cookiebanners.service.mode.privateBrowsing", 1);
/** FULLSCREEN NOTICE ***/
user_pref("full-screen-api.transition-duration.enter", "0 0");
user_pref("full-screen-api.transition-duration.leave", "0 0");
user_pref("full-screen-api.warning.delay", -1);
user_pref("full-screen-api.warning.timeout", 0);
/** URL BAR ***/
user_pref("browser.urlbar.suggest.calculator", true);
user_pref("browser.urlbar.unitConversion.enabled", true);
user_pref("browser.urlbar.trending.featureGate", false);
/** NEW TAB PAGE ***/
user_pref("browser.newtabpage.activity-stream.feeds.topsites", false);
user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false);
/** POCKET ***/
user_pref("extensions.pocket.enabled", false);
/** DOWNLOADS ***/
user_pref("browser.download.manager.addToRecentDocs", false);
/** PDF ***/
user_pref("browser.download.open_pdf_attachments_inline", true);
/** TAB BEHAVIOR ***/
user_pref("browser.bookmarks.openInTabClosesMenu", false);
user_pref("browser.menu.showViewImageInfo", true);
user_pref("findbar.highlightAll", true);
user_pref("layout.word_select.eat_space_to_next_word", false);
/****************************************************************************
* START: MY OVERRIDES *
****************************************************************************/
// visit https://github.com/yokoffing/Betterfox/wiki/Common-Overrides
// visit https://github.com/yokoffing/Betterfox/wiki/Optional-Hardening
// Enter your personal overrides below this line:
// PREF: enable HTTPS-Only Mode
// Warn me before loading sites that don't support HTTPS
// in both Normal and Private Browsing windows.
user_pref("dom.security.https_only_mode", true);
user_pref("dom.security.https_only_mode_error_page_user_suggestions", true);
// PREF: disable the Firefox View tour from popping up
user_pref("browser.firefox-view.feature-tour", '{"screen":"","complete":true}');
// PREF: preferred color scheme for websites and sub-pages
// Dark (0), Light (1), System (2), Browser (3)
user_pref("layout.css.prefers-color-scheme.content-override", 0);
// PREF: disable login manager
user_pref("signon.rememberSignons", false);
// PREF: disable address and credit card manager
user_pref("extensions.formautofill.addresses.enabled", false);
user_pref("extensions.formautofill.creditCards.enabled", false);
// PREF: disable telemetry of what default browser you use [WINDOWS]
user_pref("default-browser-agent.enabled", false);
/****************************************************************************
* SECTION: SMOOTHFOX *
****************************************************************************/
// visit https://github.com/yokoffing/Betterfox/blob/main/Smoothfox.js
// Enter your scrolling overrides below this line:
/****************************************************************************************
* Smoothfox *
* "Faber est suae quisque fortunae" *
* priority: better scrolling *
* version: 126.1 *
* url: https://github.com/yokoffing/Betterfox *
***************************************************************************************/
// Use only one option at a time!
// Reset prefs if you decide to use different option.
/****************************************************************************************
* OPTION: SHARPEN SCROLLING *
****************************************************************************************/
// credit: https://github.com/black7375/Firefox-UI-Fix
// only sharpen scrolling
// user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
// user_pref("general.smoothScroll", true); // DEFAULT
// user_pref("mousewheel.min_line_scroll_amount", 10); // 10-40; adjust this number to your liking; default=5
// user_pref("general.smoothScroll.mouseWheel.durationMinMS", 80); // default=50
// user_pref("general.smoothScroll.currentVelocityWeighting", "0.15"); // default=.25
// user_pref("general.smoothScroll.stopDecelerationWeighting", "0.6"); // default=.4
// Firefox Nightly only:
// [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1846935
// user_pref("general.smoothScroll.msdPhysics.enabled", false); // [FF122+ Nightly]
/****************************************************************************************
* OPTION: INSTANT SCROLLING (SIMPLE ADJUSTMENT) *
****************************************************************************************/
// recommended for 60hz+ displays
// user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
// user_pref("general.smoothScroll", true); // DEFAULT
// user_pref("mousewheel.default.delta_multiplier_y", 275); // 250-400; adjust this number to your liking
// // Firefox Nightly only:
// // [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1846935
// user_pref("general.smoothScroll.msdPhysics.enabled", false); // [FF122+ Nightly]
/****************************************************************************************
* OPTION: SMOOTH SCROLLING *
****************************************************************************************/
// recommended for 90hz+ displays
user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
user_pref("general.smoothScroll", true); // DEFAULT
user_pref("general.smoothScroll.msdPhysics.enabled", true);
user_pref("mousewheel.default.delta_multiplier_y", 300); // 250-400; adjust this number to your liking
/****************************************************************************************
* OPTION: NATURAL SMOOTH SCROLLING V3 [MODIFIED] *
****************************************************************************************/
// credit: https://github.com/AveYo/fox/blob/cf56d1194f4e5958169f9cf335cd175daa48d349/Natural%20Smooth%20Scrolling%20for%20user.js
// recommended for 120hz+ displays
// largely matches Chrome flags: Windows Scrolling Personality and Smooth Scrolling
// user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
// user_pref("general.smoothScroll", true); // DEFAULT
// user_pref("general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS", 12);
// user_pref("general.smoothScroll.msdPhysics.enabled", true);
// user_pref("general.smoothScroll.msdPhysics.motionBeginSpringConstant", 600);
// user_pref("general.smoothScroll.msdPhysics.regularSpringConstant", 650);
// user_pref("general.smoothScroll.msdPhysics.slowdownMinDeltaMS", 25);
// user_pref("general.smoothScroll.msdPhysics.slowdownMinDeltaRatio", "2");
// user_pref("general.smoothScroll.msdPhysics.slowdownSpringConstant", 250);
// user_pref("general.smoothScroll.currentVelocityWeighting", "1");
// user_pref("general.smoothScroll.stopDecelerationWeighting", "1");
// user_pref("mousewheel.default.delta_multiplier_y", 300); // 250-400; adjust this number to your liking
/****************************************************************************
* END: BETTERFOX *
****************************************************************************/

View file

@ -0,0 +1,41 @@
// THIS USER.JS IS INTENTED TO USE ONLY WITH ZEN BROWSER
// Smooth Scrolling
user_pref("apz.overscroll.enabled", true);
user_pref("general.smoothScroll", true);
user_pref("general.smoothScroll.msdPhysics.enabled", true);
user_pref("mousewheel.default.delta_multiplier_y", 250);
// Custom Options
user_pref("ui.key.menuAccessKey", 0); // Disable alt key to allow custom bindings that uses it
// Firefox Options
user_pref("privacy.history.custom", true);
user_pref("privacy.clearHistory.formdata", true);
user_pref("browser.ctrlTab.sortByRecentlyUsed", true);
user_pref("browser.download.useDownloadDir", false);
user_pref("devtools.editor.keymap", "jim");
user_pref("devtools.theme", "dark");
user_pref("font.name.serif.x-western", "Maple Mono NF");
user_pref("signon.rememberSignons", false);
user_pref("signon.autofillForms", false);
// Zen Options
user_pref("browser.urlbar.trimURLs", true);
user_pref("browser.tabs.hoverPreview.enabled", true);
user_pref("toolkit.tabbox.switchByScrolling", false);
user_pref("zen.urlbar.replace-newtab", true);
user_pref("zen.tabs.vertical.right-side", true);
user_pref("zen.workspaces.open-new-tab-if-last-unpinned-tab-is-closed", false);
user_pref("zen.theme.gradient", true);
user_pref("zen.view.experimental-rounded-view", true);
user_pref("zen.view.experimental-force-window-controls-left", false); // Using the sidebar at the right
user_pref("zen.widget.linux.transparency", true);
user_pref("zen.pinned-tab-manager.restore-pinned-tabs-to-pinned-url", true);
user_pref("zen.splitView.change-on-hover", true);
user_pref("zen.tabs.show-newtab-under", false);
user_pref("zen.tabs.show-newtab-button-top", false);
user_pref("zen.tabs.show-newtab-vertical", false);
user_pref("zen.urlbar.behavior", "float");
user_pref("zen.view.compact.hide-toolbar", true);
user_pref("zen.workspaces.force-container-workspace", true);
user_pref("zen.glance.open-essential-external-links", false);

View file

@ -1,87 +0,0 @@
/****************************************************************************************
* Smoothfox *
* "Faber est suae quisque fortunae" *
* priority: better scrolling *
* version: 126.1 *
* url: https://github.com/yokoffing/Betterfox *
***************************************************************************************/
// Use only one option at a time!
// Reset prefs if you decide to use different option.
/****************************************************************************************
* OPTION: SHARPEN SCROLLING *
****************************************************************************************/
// credit: https://github.com/black7375/Firefox-UI-Fix
// only sharpen scrolling
// user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
// user_pref("general.smoothScroll", true); // DEFAULT
// user_pref("mousewheel.min_line_scroll_amount", 10); // 10-40; adjust this number to your liking; default=5
// user_pref("general.smoothScroll.mouseWheel.durationMinMS", 80); // default=50
// user_pref("general.smoothScroll.currentVelocityWeighting", "0.15"); // default=.25
// user_pref("general.smoothScroll.stopDecelerationWeighting", "0.6"); // default=.4
// Firefox Nightly only:
// [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1846935
// user_pref("general.smoothScroll.msdPhysics.enabled", false); // [FF122+ Nightly]
/****************************************************************************************
* OPTION: INSTANT SCROLLING (SIMPLE ADJUSTMENT) *
****************************************************************************************/
// recommended for 60hz+ displays
// user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
// user_pref("general.smoothScroll", true); // DEFAULT
// user_pref("mousewheel.default.delta_multiplier_y", 275); // 250-400; adjust this number to your liking
// // Firefox Nightly only:
// // [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1846935
// user_pref("general.smoothScroll.msdPhysics.enabled", false); // [FF122+ Nightly]
/****************************************************************************************
* OPTION: SMOOTH SCROLLING *
****************************************************************************************/
// recommended for 90hz+ displays
user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
user_pref("general.smoothScroll", true); // DEFAULT
user_pref("general.smoothScroll.msdPhysics.enabled", true);
user_pref("mousewheel.default.delta_multiplier_y", 250); // 250-400; adjust this number to your liking
/****************************************************************************************
* OPTION: NATURAL SMOOTH SCROLLING V3 [MODIFIED] *
****************************************************************************************/
// credit: https://github.com/AveYo/fox/blob/cf56d1194f4e5958169f9cf335cd175daa48d349/Natural%20Smooth%20Scrolling%20for%20user.js
// recommended for 120hz+ displays
// largely matches Chrome flags: Windows Scrolling Personality and Smooth Scrolling
// user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
// user_pref("general.smoothScroll", true); // DEFAULT
// user_pref("general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS", 12);
// user_pref("general.smoothScroll.msdPhysics.enabled", true);
// user_pref("general.smoothScroll.msdPhysics.motionBeginSpringConstant", 600);
// user_pref("general.smoothScroll.msdPhysics.regularSpringConstant", 650);
// user_pref("general.smoothScroll.msdPhysics.slowdownMinDeltaMS", 25);
// user_pref("general.smoothScroll.msdPhysics.slowdownMinDeltaRatio", "2");
// user_pref("general.smoothScroll.msdPhysics.slowdownSpringConstant", 250);
// user_pref("general.smoothScroll.currentVelocityWeighting", "1");
// user_pref("general.smoothScroll.stopDecelerationWeighting", "1");
// user_pref("mousewheel.default.delta_multiplier_y", 300); // 250-400; adjust this number to your liking
// Custom Options
user_pref("ui.key.menuAccessKey", 0);
user_pref("browser.tabs.hoverPreview.enabled", true);
user_pref("zen.urlbar.replace-newtab", false);
user_pref("zen.workspaces.open-new-tab-if-last-unpinned-tab-is-closed", false);
user_pref("browser.tabs.groups.enabled", false);
user_pref("browser.urlbar.trimURLs", true);
user_pref("zen.theme.gradient", true);
user_pref("zen.view.experimental-rounded-view", true);
user_pref("zen.view.experimental-force-window-controls-left", false); // Using the sidebar at the right
user_pref("toolkit.tabbox.switchByScrolling", false);
user_pref("zen.widget.linux.transparency", true);
user_pref("zen.pinned-tab-manager.restore-pinned-tabs-to-pinned-url", true);
user_pref("zen.splitView.change-on-hover", true);
user_pref("zen.tabs.show-newtab-under", false);
user_pref("zen.tabs.show-newtab-button-top", false);
user_pref("zen.tabs.show-newtab-vertical", false);
user_pref("zen.urlbar.behavior", "float");
user_pref("zen.view.compact.hide-toolbar", true);
user_pref("zen.workspaces.force-container-workspace", true);
user_pref("zen.workspaces.open-new-tab-if-last-unpinned-tab-is-closed", false);
user_pref("zen.glance.open-essential-external-links", false);

View file

@ -1,4 +1,4 @@
#? Config file for btop v. 1.4.0
#? Config file for btop v. 1.4.2
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
@ -210,6 +210,9 @@ net_sync = True
#* Starts with the Network Interface specified here.
net_iface = ""
#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes.
base_10_bitrate = "Auto"
#* Show battery stats in top right if battery is present.
show_battery = True
@ -226,6 +229,9 @@ log_level = "WARNING"
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
nvml_measure_pcie_speeds = True
#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
rsmi_measure_pcie_speeds = True
#* Horizontally mirror the GPU graph.
gpu_mirror_graph = True

View file

@ -1,7 +1,9 @@
{
"output": {
"blocklist": [],
"equalizer": {
"equalizer#0": {
"balance": 0.0,
"bypass": false,
"input-gain": -2.0,
"left": {
"band0": {
@ -12,7 +14,8 @@
"q": 1.504760237537245,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
},
"band1": {
"frequency": 64.0,
@ -22,7 +25,8 @@
"q": 1.5047602375372453,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
},
"band2": {
"frequency": 125.0,
@ -32,7 +36,8 @@
"q": 1.504760237537245,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
},
"band3": {
"frequency": 250.0,
@ -42,7 +47,8 @@
"q": 1.504760237537245,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
},
"band4": {
"frequency": 500.0,
@ -52,7 +58,8 @@
"q": 1.5047602375372453,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
},
"band5": {
"frequency": 1000.0,
@ -62,7 +69,8 @@
"q": 1.504760237537245,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
},
"band6": {
"frequency": 2000.0,
@ -72,7 +80,8 @@
"q": 1.5047602375372449,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
},
"band7": {
"frequency": 4000.0,
@ -82,7 +91,8 @@
"q": 1.5047602375372449,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
},
"band8": {
"frequency": 8000.0,
@ -92,7 +102,8 @@
"q": 1.5047602375372453,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
},
"band9": {
"frequency": 16000.0,
@ -102,12 +113,15 @@
"q": 1.504760237537245,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
}
},
"mode": "IIR",
"num-bands": 10,
"output-gain": 0.0,
"output-gain": 1.0,
"pitch-left": 0.0,
"pitch-right": 0.0,
"right": {
"band0": {
"frequency": 32.0,
@ -117,7 +131,8 @@
"q": 1.504760237537245,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
},
"band1": {
"frequency": 64.0,
@ -127,7 +142,8 @@
"q": 1.5047602375372453,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
},
"band2": {
"frequency": 125.0,
@ -137,7 +153,8 @@
"q": 1.504760237537245,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
},
"band3": {
"frequency": 250.0,
@ -147,7 +164,8 @@
"q": 1.504760237537245,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
},
"band4": {
"frequency": 500.0,
@ -157,7 +175,8 @@
"q": 1.5047602375372453,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
},
"band5": {
"frequency": 1000.0,
@ -167,7 +186,8 @@
"q": 1.504760237537245,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
},
"band6": {
"frequency": 2000.0,
@ -177,7 +197,8 @@
"q": 1.5047602375372449,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
},
"band7": {
"frequency": 4000.0,
@ -187,7 +208,8 @@
"q": 1.5047602375372449,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
},
"band8": {
"frequency": 8000.0,
@ -197,7 +219,8 @@
"q": 1.5047602375372453,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
},
"band9": {
"frequency": 16000.0,
@ -207,13 +230,14 @@
"q": 1.504760237537245,
"slope": "x1",
"solo": false,
"type": "Bell"
"type": "Bell",
"width": 4.0
}
},
"split-channels": false
},
"plugins_order": [
"equalizer"
"equalizer#0"
]
}
}

View file

@ -13,8 +13,8 @@ SETUVAR --export XDG_CACHE_HOME:/home/matt/\x2ecache
SETUVAR --export XDG_CONFIG_HOME:/home/matt/\x2econfig
SETUVAR --export XDG_DATA_HOME:/home/matt/\x2elocal/share
SETUVAR --export XDG_SCRIPT_HOME:/home/matt/\x2elocal/script
SETUVAR --export __ABBR_TIPS_KEYS:g\x1ed\x1ea__bruh\x1ea__c\x1ea__cat\x1ea__catp\x1ea__cl\x1ea__clock\x1ea__codeinfo\x1ea__cv\x1ea__disks\x1ea__dots\x1ea__dsize\x1ea__ex\x1ea__f\x1ea__fetch\x1ea__gfetch\x1ea__gpt\x1ea__gr\x1ea__i\x1ea__info\x1ea__ip\x1ea__l\x1ea__ld\x1ea__ldh\x1ea__lg\x1ea__lh\x1ea__lm\x1ea__ls\x1ea__lsh\x1ea__lt\x1ea__lth\x1ea__matrix\x1ea__mkdir\x1ea__ni\x1ea__nid\x1ea__nis\x1ea__nls\x1ea__nlsg\x1ea__no\x1ea__nu\x1ea__nud\x1ea__nup\x1ea__nus\x1ea__op\x1ea__pages\x1ea__proc\x1ea__pse\x1ea__q\x1ea__r\x1ea__s\x1ea__sc\x1ea__svn\x1ea__t\x1ea__ta\x1ea__test\x2dnet\x1ea__tr\x1ea__u\x1ea__up\x1ea__upall\x1ea__v\x1ea__vcl\x1ea__vv\x1ea__vvl\x1ea__vvn\x1ea__wget\x1ea__yarn\x1ea__z\x1ea__zi
SETUVAR --export __ABBR_TIPS_VALUES:git\x1edocker\x1egenact\x20\x2ds\x204\x1ez\x1ebat\x1ebat\x20\x2d\x2dpaging\x3dalways\x1eclear\x1etty\x2dclock\x20\x2dsbc\x1escc\x20\x2e/\x1ez\x20\x26\x26\x20v\x1eduf\x1eyadm\x20enter\x20lazygit\x1edua\x20i\x1esudo\x20chmod\x20\x2bx\x1efzf\x1efastfetch\x1eonefetch\x1etgpt\x20\x2di\x1ecd\x20\x22\x24\x28git\x20rev\x2dparse\x20\x2d\x2dshow\x2dtoplevel\x29\x22\x1eyay\x20\x2dS\x20\x1etldr\x1eip\x20\x2dc\x20a\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1elazydocker\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2d\x2dicons\x20\x2dD\x20\x2d\x2dgit\x1elazygit\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1el\x3deza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dtree\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2d\x2dicons\x20\x2d\x2dtree\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eunimatrix\x20\x2ds\x2095\x1emkdir\x20\x2dp\x1enpm\x20install\x1enpm\x20install\x20\x2d\x2dsave\x2ddev\x1enpm\x20install\x20\x2d\x2dsave\x1enpm\x20list\x1enpm\x20list\x20\x2d\x2dglobal\x1efloaterm\x1enpm\x20uninstall\x1enpm\x20uninstall\x20\x2d\x2dsave\x2ddev\x1enpm\x20update\x1enpm\x20uninstall\x20\x2d\x2dsave\x1ecd\x20\x7e/Documents/Obsidian/obsidianVault\x1enavi\x1esysz\x1epacseek\x1eexit\x1emise\x20run\x1esudo\x1er\x3dsource\x20\x24XDG_CONFIG_HOME/fish/config\x2efish\x1esvn\x20\x2d\x2dconfig\x2ddir\x20\x5c\x5c\x5c\x5c\x22\x24XDG_CONFIG_HOME\x5c\x5c\x5c\x5c\x22/subversion\x1etmux\x1etmux\x20attach\x20\x2dt\x1ecommand\x20up\x1etrash\x1eyay\x20\x2dR\x20\x1eyay\x20\x2dSyu\x1etopgrade\x1envim\x1envim\x20\x2d\x2dclean\x1ebob\x1ebob\x20use\x20latest\x1ebob\x20use\x20nightly\x1ewget\x20\x2d\x2dhsts\x2dfile\x3d\x22\x24XDG_DATA_HOME/wget\x2dhsts\x22\x1eyarn\x20\x2d\x2duse\x2dyarnrc\x20\x22\x24XDG_CONFIG_HOME/yarn/config\x22\x1e__zoxide_z\x1e__zoxide_zi
SETUVAR --export __ABBR_TIPS_KEYS:g\x1ed\x1ea__bruh\x1ea__c\x1ea__cat\x1ea__catp\x1ea__cl\x1ea__clock\x1ea__codeinfo\x1ea__cv\x1ea__disks\x1ea__dots\x1ea__dsize\x1ea__ex\x1ea__f\x1ea__fetch\x1ea__gfetch\x1ea__gpt\x1ea__gr\x1ea__i\x1ea__info\x1ea__ip\x1ea__l\x1ea__ld\x1ea__ldh\x1ea__lg\x1ea__lh\x1ea__lm\x1ea__ls\x1ea__lsh\x1ea__lt\x1ea__lth\x1ea__lzd\x1ea__matrix\x1ea__mkdir\x1ea__op\x1ea__pages\x1ea__proc\x1ea__pse\x1ea__q\x1ea__r\x1ea__s\x1ea__sc\x1ea__svn\x1ea__t\x1ea__ta\x1ea__test\x2dnet\x1ea__tr\x1ea__u\x1ea__up\x1ea__upall\x1ea__v\x1ea__vcl\x1ea__vv\x1ea__vvl\x1ea__vvn\x1ea__wget\x1ea__yarn\x1ea__z\x1ea__zi
SETUVAR --export __ABBR_TIPS_VALUES:git\x1edocker\x1egenact\x20\x2ds\x204\x1ez\x1ebat\x1ebat\x20\x2d\x2dpaging\x3dalways\x1eclear\x1etty\x2dclock\x20\x2dsbc\x1escc\x20\x2e/\x1ez\x20\x26\x26\x20v\x1eduf\x1eyadm\x20enter\x20lazygit\x1edua\x20i\x1esudo\x20chmod\x20\x2bx\x1efzf\x1efastfetch\x1eonefetch\x1etgpt\x20\x2di\x1ecd\x20\x22\x24\x28git\x20rev\x2dparse\x20\x2d\x2dshow\x2dtoplevel\x29\x22\x1eyay\x20\x2dS\x20\x1etldr\x1eip\x20\x2dc\x20a\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1elazydocker\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2d\x2dicons\x20\x2dD\x20\x2d\x2dgit\x1elazygit\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1el\x3deza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dtree\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2d\x2dicons\x20\x2d\x2dtree\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1elazydocker\x1eunimatrix\x20\x2ds\x2095\x1emkdir\x20\x2dp\x1ecd\x20\x7e/Documents/Obsidian/obsidianVault\x1enavi\x1esysz\x1epacseek\x1eexit\x1emise\x20run\x1esudo\x1er\x3dsource\x20\x24XDG_CONFIG_HOME/fish/config\x2efish\x1esvn\x20\x2d\x2dconfig\x2ddir\x20\x5c\x5c\x5c\x5c\x22\x24XDG_CONFIG_HOME\x5c\x5c\x5c\x5c\x22/subversion\x1etmux\x1etmux\x20attach\x20\x2dt\x1ecommand\x20up\x1etrash\x1eyay\x20\x2dR\x20\x1eyay\x20\x2dSyu\x1etopgrade\x1envim\x1envim\x20\x2d\x2dclean\x1ebob\x1ebob\x20use\x20latest\x1ebob\x20use\x20nightly\x1ewget\x20\x2d\x2dhsts\x2dfile\x3d\x22\x24XDG_DATA_HOME/wget\x2dhsts\x22\x1eyarn\x20\x2d\x2duse\x2dyarnrc\x20\x22\x24XDG_CONFIG_HOME/yarn/config\x22\x1e__zoxide_z\x1e__zoxide_zi
SETUVAR __fish_initialized:3800
SETUVAR _fish_abbr_d:docker
SETUVAR _fish_abbr_g:git

View file

@ -1,7 +1,7 @@
function cat --wraps=bat --description 'alias cat=bat'
if type -f bat &>/dev/null
if type -f bat &>/dev/null; and [ -t 1 ]
bat $argv
else
cat $argv
command cat $argv
end
end

View file

@ -1,5 +1,5 @@
function fish_greeting
if type -q colorscript
colorscript random
end
# if type -q colorscript
# colorscript random
# end
end

View file

@ -1,5 +1,5 @@
function lg --wraps=lazygit --description 'alias lg=lazygit'
if type -f eza &>/dev/null
if type -f lazygit &>/dev/null
lazygit $argv
else
missing_package lazygit

View file

@ -0,0 +1,7 @@
function lzd --wraps=lazydocker --description 'alias lzd=lazydocker'
if type -f lazydocker &>/dev/null
lazydocker $argv
else
missing_package lazygit
end
end

View file

@ -1,7 +0,0 @@
function ni --wraps='npm install' --description 'alias ni=npm install'
if type -f npm &>/dev/null
npm install $argv
else
missing_package npm
end
end

View file

@ -1,7 +0,0 @@
function nid --wraps='npm install --save-dev' --description 'alias nid=npm install --save-dev'
if type -f npm &>/dev/null
npm install --save-dev $argv
else
missing_package npm
end
end

View file

@ -1,7 +0,0 @@
function nis --wraps='npm install --save' --description 'alias nis=npm install --save'
if type -f npm &>/dev/null
npm install --save $argv
else
missing_package npm
end
end

View file

@ -1,7 +0,0 @@
function nls --wraps='npm list' --description 'alias nls=npm list'
if type -f npm &>/dev/null
npm list $argv
else
missing_package npm
end
end

View file

@ -1,7 +0,0 @@
function nlsg --wraps='npm list --global' --description 'alias nlsg=npm list --global'
if type -f npm &>/dev/null
npm list --global $argv
else
missing_package npm
end
end

View file

@ -1,3 +0,0 @@
function no --wraps=floaterm --description 'alias no=floaterm'
floaterm $argv
end

View file

@ -1,7 +0,0 @@
function nu --wraps='npm uninstall' --description 'alias nu=npm uninstall'
if type -f npm &>/dev/null
npm uninstall $argv
else
missing_package npm
end
end

View file

@ -1,7 +0,0 @@
function nud --wraps='npm uninstall --save-dev' --description 'alias nud=npm uninstall --save-dev'
if type -f npm &>/dev/null
npm uninstall --save-dev $argv
else
missing_package npm
end
end

View file

@ -1,7 +0,0 @@
function nup --wraps='npm update' --description 'alias nup=npm update'
if type -f npm &>/dev/null
npm update $argv
else
missing_package npm
end
end

View file

@ -1,7 +0,0 @@
function nus --wraps='npm uninstall --save' --description 'alias nus=npm uninstall --save'
if type -f npm &>/dev/null
npm uninstall --save $argv
else
missing_package npm
end
end

View file

@ -1,3 +1,3 @@
function op --wraps='cd ~/Documents/Obsidian/obsidianVault' --description 'alias op=cd ~/Documents/Obsidian/obsidianVault'
cd ~/documents/obsidian/personal-brain/ $argv
tmuxp load -y notes-tasks
end

View file

@ -70,9 +70,11 @@ set -xg GPG_TTY (tty)
# FZF
set -xg FZF_DEFAULT_COMMAND fd
set -xg FZF_DEFAULT_OPTS "--height=90% --layout=reverse --info=inline --border rounded --margin=1 --padding=1 \
--color=bg+:#363a4f,spinner:#f4dbd6,hl:#ed8796 \
--color=fg:#cad3f5,header:#ed8796,info:#c6a0f6,pointer:#f4dbd6 \
--color=marker:#f4dbd6,fg+:#cad3f5,prompt:#c6a0f6,hl+:#ed8796 \
--color=bg+:#363A4F,bg:#24273A,spinner:#F4DBD6,hl:#ED8796 \
--color=fg:#CAD3F5,header:#ED8796,info:#B7BDF8,pointer:#F4DBD6 \
--color=marker:#B7BDF8,fg+:#CAD3F5,prompt:#B7BDF8,hl+:#ED8796 \
--color=selected-bg:#494D64 \
--color=border:#6E738D,label:#CAD3F5 \
--bind 'ctrl-u:preview-half-page-up'
--bind 'ctrl-d:preview-half-page-down'
--bind 'ctrl-y:execute-silent(printf {} | cut -f 2- | wl-copy --trim-newline)'"
@ -85,3 +87,4 @@ if type -q vivid
set -xg LS_COLORS (vivid generate catppuccin-macchiato)
end
set -xg STARSHIP_LOG error
set -xg ATAC_KEY_BINDINGS $XDG_CONFIG_HOME/atac/vim_key_bindings.toml

BIN
.config/ghostty/.github/title.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

36
.config/ghostty/config Normal file
View file

@ -0,0 +1,36 @@
theme = catppuccin-macchiato
background-blur-radius = 20
font-family = Maple Mono NF
font-feature = +ss02
font-feature = +ss03
font-feature = +ss05
font-feature = +ss07
font-size = 14
adjust-cell-height = 28%
cursor-style = block
cursor-style-blink = true
cursor-invert-fg-bg = false
gtk-single-instance = true
window-theme = system
gtk-titlebar = false
gtk-wide-tabs = false
gtk-adwaita = false
macos-titlebar-style = hidden
macos-option-as-alt = true
mouse-hide-while-typing = true
confirm-close-surface = false
window-padding-x = 6
window-padding-y = 5,5
window-padding-balance = false
auto-update = check
auto-update-channel = stable
# extras
shell-integration-features = no-cursor
copy-on-select = clipboard

View file

@ -31,10 +31,11 @@
excludesfile = ~/.config/git/ignore
[interactive]
diffFilter = delta --color-only
diffFilter = delta
[delta]
features = catppuccin-macchiato
decoration = true
side-by-side = false
true-color = always
hyperlinks = true
@ -51,6 +52,7 @@
rebase = false
[commit]
template = ~/.config/git/gitmessage
gpgsign = true
[gpg]

7
.config/git/gitmessage Normal file
View file

@ -0,0 +1,7 @@
# Section 1: type(scope):subject line (try to keep under 50 characters)
# Types of Commits: feat, fix, docs, style, refactor, perf, test, chore, ci, build
# Section 2: Body (Try to keep under 72 characters)
# Section 3: Footer (Jira ID Issue)

View file

@ -1,10 +1,10 @@
[delta "catppuccin-latte"]
blame-palette = "#eff1f5 #e6e9ef #dce0e8 #ccd0da #bcc0cc"
commit-decoration-style = box ul
commit-decoration-style = "#9ca0b0" bold box ul
light = true
file-decoration-style = "#4c4f69"
file-decoration-style = "#9ca0b0"
file-style = "#4c4f69"
hunk-header-decoration-style = box ul
hunk-header-decoration-style = "#9ca0b0" box ul
hunk-header-file-style = bold
hunk-header-line-number-style = bold "#6c6f85"
hunk-header-style = file line-number syntax
@ -31,11 +31,11 @@
[delta "catppuccin-frappe"]
blame-palette = "#303446 #292c3c #232634 #414559 #51576d"
commit-decoration-style = box ul
commit-decoration-style = "#737994" bold box ul
dark = true
file-decoration-style = "#c6d0f5"
file-decoration-style = "#737994"
file-style = "#c6d0f5"
hunk-header-decoration-style = box ul
hunk-header-decoration-style = "#737994" box ul
hunk-header-file-style = bold
hunk-header-line-number-style = bold "#a5adce"
hunk-header-style = file line-number syntax
@ -62,11 +62,11 @@
[delta "catppuccin-macchiato"]
blame-palette = "#24273a #1e2030 #181926 #363a4f #494d64"
commit-decoration-style = box ul
commit-decoration-style = "#6e738d" bold box ul
dark = true
file-decoration-style = "#cad3f5"
file-decoration-style = "#6e738d"
file-style = "#cad3f5"
hunk-header-decoration-style = box ul
hunk-header-decoration-style = "#6e738d" box ul
hunk-header-file-style = bold
hunk-header-line-number-style = bold "#a5adcb"
hunk-header-style = file line-number syntax
@ -93,11 +93,11 @@
[delta "catppuccin-mocha"]
blame-palette = "#1e1e2e #181825 #11111b #313244 #45475a"
commit-decoration-style = box ul
commit-decoration-style = "#6c7086" bold box ul
dark = true
file-decoration-style = "#cdd6f4"
file-decoration-style = "#6c7086"
file-style = "#cdd6f4"
hunk-header-decoration-style = box ul
hunk-header-decoration-style = "#6c7086" box ul
hunk-header-file-style = bold
hunk-header-line-number-style = bold "#a6adc8"
hunk-header-style = file line-number syntax

View file

@ -4,7 +4,7 @@
include "~/.gtkrc-2.0.mine"
gtk-theme-name="Catppuccin-Macchiato-Standard-Lavender-Dark"
gtk-icon-theme-name="Catppuccin-SE"
gtk-font-name="JetBrainsMono Nerd Font 10"
gtk-font-name="Maple Mono NF 10"
gtk-cursor-theme-name="Catppuccin-Macchiato-Dark-Cursors"
gtk-cursor-theme-size=24
gtk-toolbar-style=GTK_TOOLBAR_BOTH

View file

@ -1,7 +1,7 @@
[Settings]
gtk-theme-name=catppuccin-macchiato-lavender-standard+default
gtk-icon-theme-name=Catppuccin-SE
gtk-font-name=JetBrainsMono Nerd Font 10
gtk-font-name=Maple Mono NF 10
gtk-cursor-theme-name=catppuccin-macchiato-dark-cursors
gtk-cursor-theme-size=24
gtk-toolbar-style=GTK_TOOLBAR_BOTH

View file

@ -7,56 +7,49 @@ $launcher-scripts = ~/.config/rofi/scripts
# Applications
bind = $mainMod, W, exec, $scripts/launch_app $browser
bind = $mainMod, O, exec, $scripts/launch_app $notetaking-app
bind = $mainMod SHIFT, O, exec, $scripts/launch_app $office-suite
bind = $mainMod SHIFT, E,exec, $scripts/launch_app $alter-file-manager
bind = $mainMod, E, exec, $scripts/launch_app $alter-file-manager
bind = $mainMod, RETURN, exec, $scripts/launch_app $terminal
bind = $mainMod, BACKSPACE, exec, $scripts/launch_app $editor
bind = $mainMod SHIFT, BACKSPACE, exec, $scripts/launch_app $alter-editor
## Notifications Menu
bind = $mainMod, N, exec, $notifications-menu-toggle
bind = $mainMod SHIFT, R, exec, $notifications-menu-reload
bind = $mainMod SHIFT, N, exec, $notifications-menu-read
bind = $mainMod CTRL, N, exec, $notifications-menu-disturb
## Bar
bind = $mainMod CTRL, R, exec, $bar-reload
bind = $mainMod CTRL, T, exec, $bar-toggle
bind = $mainMod, R, exec, $bar-reload
bind = $mainMod, T, exec, $bar-toggle
# Pickers/Launchers
bind = $mainMod, 23, exec, $launcher # Tab
bind = $mainMod, TAB, exec, $launcher
bind = $mainMod, ESCAPE, exec, $launcher-windows
bind = $mainMod SHIFT, W, exec, $launcher-scripts/wallpaper/wallpaper
bind = $mainMod, 61, exec, $launcher-scripts/keybindings/keybindings # /
bind = $mainMod SHIFT, V, exec, $launcher-scripts/wireguard/wireguard_selection menu
bind = $mainMod, ESCAPE, exec, $launcher-scripts/powermenu/powermenu
bind = ALT, ESCAPE, exec, $launcher-scripts/powermenu/powermenu
bind = $mainMod, Y, exec, $launcher-scripts/clipboard/clipboard
bind = $mainMod CTRL, E, exec, $launcher-scripts/emoji/emoji
bind = $mainMod, P, exec, rofi-rbw --action=copy --clear-after 10
## Screenshots
bind = CTRL, ESCAPE, exec, $launcher-scripts/screenshot/screenshot
bind = SHIFT, ESCAPE, exec, $launcher-scripts/screenshot/screenshot --freeze
bind = CTRL, ESCAPE, exec, $launcher-scripts/screenshot/screenshot --freeze
# Pyprland
## Scratchpad Module
bind = $mainMod, V, exec, pypr toggle volume
bind = $mainMod, 51, exec, pypr toggle terminal # Backslash
bind = $mainMod, T, exec, pypr toggle btop
bind = $mainMod SHIFT, T, exec, pypr toggle nvtop
bind = $mainMod SHIFT, I, exec, pypr toggle gpt
bind = $mainMod SHIFT, B, exec, pypr toggle bluetooth
bind = $mainMod, E, exec, pypr toggle yazi
bind = $mainMod, D, exec, pypr toggle dots
bind = $mainMod, B, exec, pypr toggle bluetooth
## Other Modules
bind = $mainMod, Z, exec, pypr zoom
bind = $mainMod CTRL, W, exec, $scripts/random_wallpaper_hyprpaper
bind = $mainMod CTRL, W, exec, $scripts/random_wallpaper
# Windows
## Basic Operations
bind = $mainMod, Q, killactive,
bind = $mainMod, A, exec, $scripts/toggle_floating
bind = $mainMod, P, pseudo
bind = $mainMod SHIFT, P, pseudo
bind = $mainMod, F, fullscreen, 0
bind = ALT, TAB, focuscurrentorlast
## Mouse
bindm = $mainMod, mouse:272, movewindow
@ -92,7 +85,7 @@ bind = $mainMod, C, exec, hyprctl dispatch centerwindow 1
## Group Control
bind = $mainMod, G, togglegroup
bind = $mainMod CTRL, G, lockactivegroup, toggle
bind = ALT, TAB, changegroupactive
bind = CTRL ALT, TAB, changegroupactive
## Resizing Windows
bind = $mainMod, R, submap, resize
@ -125,26 +118,26 @@ bind = $mainMod, 8, workspace, r~8
bind = $mainMod, 9, workspace, r~9
## Moving Windows to other Workspaces
bind = $mainMod SHIFT, 1, movetoworkspace, r~1
bind = $mainMod SHIFT, 2, movetoworkspace, r~2
bind = $mainMod SHIFT, 3, movetoworkspace, r~3
bind = $mainMod SHIFT, 4, movetoworkspace, r~4
bind = $mainMod SHIFT, 5, movetoworkspace, r~5
bind = $mainMod SHIFT, 6, movetoworkspace, r~6
bind = $mainMod SHIFT, 7, movetoworkspace, r~7
bind = $mainMod SHIFT, 8, movetoworkspace, r~8
bind = $mainMod SHIFT, 9, movetoworkspace, r~9
bind = $mainMod SHIFT, 1, movetoworkspacesilent, r~1
bind = $mainMod SHIFT, 2, movetoworkspacesilent, r~2
bind = $mainMod SHIFT, 3, movetoworkspacesilent, r~3
bind = $mainMod SHIFT, 4, movetoworkspacesilent, r~4
bind = $mainMod SHIFT, 5, movetoworkspacesilent, r~5
bind = $mainMod SHIFT, 6, movetoworkspacesilent, r~6
bind = $mainMod SHIFT, 7, movetoworkspacesilent, r~7
bind = $mainMod SHIFT, 8, movetoworkspacesilent, r~8
bind = $mainMod SHIFT, 9, movetoworkspacesilent, r~9
## Moving Windows to other Workspaces (Silent)
bind = $mainMod ALT, 1, movetoworkspacesilent, r~1
bind = $mainMod ALT, 2, movetoworkspacesilent, r~2
bind = $mainMod ALT, 3, movetoworkspacesilent, r~3
bind = $mainMod ALT, 4, movetoworkspacesilent, r~4
bind = $mainMod ALT, 5, movetoworkspacesilent, r~5
bind = $mainMod ALT, 6, movetoworkspacesilent, r~6
bind = $mainMod ALT, 7, movetoworkspacesilent, r~7
bind = $mainMod ALT, 8, movetoworkspacesilent, r~8
bind = $mainMod ALT, 9, movetoworkspacesilent, r~9
bind = $mainMod ALT, 1, movetoworkspace, r~1
bind = $mainMod ALT, 2, movetoworkspace, r~2
bind = $mainMod ALT, 3, movetoworkspace, r~3
bind = $mainMod ALT, 4, movetoworkspace, r~4
bind = $mainMod ALT, 5, movetoworkspace, r~5
bind = $mainMod ALT, 6, movetoworkspace, r~6
bind = $mainMod ALT, 7, movetoworkspace, r~7
bind = $mainMod ALT, 8, movetoworkspace, r~8
bind = $mainMod ALT, 9, movetoworkspace, r~9
## Moving to other Workspace with Mouse Control
bind = $mainMod, mouse_down, workspace, m-1
@ -164,8 +157,6 @@ bind = $mainMod, 60, focusmonitor, +1 # Period
# Media
## Audio
bind = $mainMod CTRL, V, exec, ~/.local/bin/restartAudio
bindl = $mainMod CTRL, mouse:280, exec, swayosd-client --output-volume mute-toggle # Extra Up Button
bindl = , XF86AudioMute, exec, swayosd-client --output-volume mute-toggle
bindl = $mainMod CTRL, mouse:281, exec, swayosd-client --input-volume mute-toggle # Extra Down Button
@ -183,9 +174,9 @@ bindl = $mainMod CTRL, mouse:276, exec, playerctl next # Extra Forward Button
bindl = $mainMod CTRL, 21, exec, playerctl next # Plus Key
bindle = , XF86AudioRaiseVolume, exec, swayosd-client --output-volume +10
bindle = $mainMod ALT, 21, exec, swayosd-client --output-volume raise # Minus key
bindle = $mainMod, 21, exec, swayosd-client --output-volume raise # Minus key
bindle = , XF86AudioLowerVolume, exec, swayosd-client --output-volume -10
bindle = $mainMod ALT, 20, exec, swayosd-client --output-volume lower # Plus key
bindle = $mainMod, 20, exec, swayosd-client --output-volume lower # Plus key
bindle = , XF86InputRaiseVolume, exec, swayosd-client --input-volume raise
bindle = $mainMod SHIFT, 21, exec, swayosd-client --input-volume raise # Minus key
@ -197,7 +188,7 @@ bindle = , XF86MonBrightnessUp, exec, swayosd-client --brightness +10
bindle = , XF86MonBrightnessDown, exec, swayosd-client --brightness -10
# Other
# Color picker
## Color picker
bind = $mainMod, INSERT, exec, $scripts/color_picker
## Disable anim, blur, etc
@ -212,3 +203,9 @@ bind = $mainMod, F1, exec, xdg-open https://wiki.hyprland.org/
## Zoom
bind = $mainMod SHIFT, mouse:276, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor | awk '/^float.*/ {print $2 + 0.5}')
bind = $mainMod SHIFT, mouse:275, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor | awk '/^float.*/ {print $2 - 0.5}')
## VM Keys
bind = $mainMod, 119, submap, passthru # Supr
submap = passthru
bind = $mainMod SHIFT, 119, submap, reset # Supr
submap = reset

View file

@ -1,5 +1,6 @@
# Define your programs
$launcher = rofi -show drun
$launcher-windows = rofi -show window
$bar = waybar
$bar-toggle = killall -SIGUSR1 $bar
@ -8,13 +9,14 @@ $bar-reload = killall $bar; $bar
$notifications-menu = swaync-client
$notifications-menu-read = $notifications-menu -C
$notifications-menu-toggle = $notifications-menu -t
$notifications-menu-disturb = $notifications-menu -d
$notifications-menu-reload = $notifications-menu -R && $notifications-menu -rs
$browser = zen-browser
$browser = librewolf
$notetaking-app = obsidian
$terminal = kitty
$terminal = ghostty --gtk-single-instance=true
$office-suite = libreoffice
$editor = $terminal nvim
$editor = $terminal vim
$alter-editor = vscodium
$file-manager = yazi
$file-manager = ranger
$alter-file-manager = nemo

View file

@ -1,9 +1,12 @@
input {
kb_layout = us, es
kb_options = compose:rctrl, level3:ralt_switch, grp:win_space_toggle
kb_layout=us,rs,rs,de
kb_variant=,latinyz,yz,qwerty
kb_options=caps:swapescape,grp:alt_shift_toggle
follow_mouse = 1
numlock_by_default = true
repeat_rate=50
repeat_delay=300
touchpad {
natural_scroll = yes
@ -11,3 +14,7 @@ input {
scroll_factor = 1
}
}
cursor {
inactive_timeout = 3
}

View file

@ -9,7 +9,7 @@ misc {
animate_manual_resizes = true
animate_mouse_windowdragging = false
enable_swallow = true
font_family = JetBrainsMono Nerd Font
font_family = Maple Mono NF
}
binds {

View file

@ -1,5 +1,5 @@
# Main Monitor
monitor=DP-1, 2560x1080@74.99, 0x1080,1.0
monitor=eDP-1, preferred, auto, 1
# Second Monitor
monitor=DP-3, 2560x1080@74.99, 0x0,1.0

View file

@ -1,32 +1,32 @@
# Main Monitor
workspace = 1, monitor:DP-1, default:true
workspace = 2, monitor:DP-1
workspace = 3, monitor:DP-1
workspace = 4, monitor:DP-1
workspace = 5, monitor:DP-1
workspace = 6, monitor:DP-1
workspace = 7, monitor:DP-1, rounding:false, decorate:false, gapsin:0, gapsout:0, border:false, decorate:false # Gaming Workspace
workspace = 8, monitor:DP-1
workspace = 9, monitor:DP-1
workspace = 1, monitor:eDP-1, default:true
workspace = 2, monitor:eDP-1
workspace = 3, monitor:eDP-1
workspace = 4, monitor:eDP-1
workspace = 5, monitor:eDP-1
workspace = 6, monitor:eDP-1
workspace = 7, monitor:eDP-1, rounding:false, decorate:false, gapsin:0, gapsout:0, border:false, decorate:false # Gaming Workspace
workspace = 8, monitor:eDP-1
workspace = 9, monitor:eDP-1
# Second Monitor
workspace = 10, monitor:DP-3, default:true
workspace = 11, monitor:DP-3
workspace = 12, monitor:DP-3
workspace = 13, monitor:DP-3
workspace = 14, monitor:DP-3
workspace = 15, monitor:DP-3
workspace = 16, monitor:DP-3
workspace = 17, monitor:DP-3
workspace = 18, monitor:DP-3
workspace = 10, monitor:HDMI-A-1, default:true
workspace = 11, monitor:HDMI-A-1
workspace = 12, monitor:HDMI-A-1
workspace = 13, monitor:HDMI-A-1
workspace = 14, monitor:HDMI-A-1
workspace = 15, monitor:HDMI-A-1
workspace = 16, monitor:HDMI-A-1
workspace = 17, monitor:HDMI-A-1
workspace = 18, monitor:HDMI-A-1
# Third Monitor
workspace = 19, monitor:HDMI-A-1, default:true
workspace = 20, monitor:HDMI-A-1
workspace = 21, monitor:HDMI-A-1
workspace = 22, monitor:HDMI-A-1
workspace = 23, monitor:HDMI-A-1
workspace = 24, monitor:HDMI-A-1
workspace = 25, monitor:HDMI-A-1
workspace = 26, monitor:HDMI-A-1
workspace = 27, monitor:HDMI-A-1
workspace = 19, monitor:HDMI-A-2, default:true
workspace = 20, monitor:HDMI-A-2
workspace = 21, monitor:HDMI-A-2
workspace = 22, monitor:HDMI-A-2
workspace = 23, monitor:HDMI-A-2
workspace = 24, monitor:HDMI-A-2
workspace = 25, monitor:HDMI-A-2
workspace = 26, monitor:HDMI-A-2
workspace = 27, monitor:HDMI-A-2

View file

@ -1,6 +1,6 @@
source = ./theme/colors.conf
$font = JetBrains Mono Nerd Font 10
$font = Maple Mono NF 10
general {
hide_cursor = true

View file

@ -0,0 +1,2 @@
# If you want a wallpaper that doesn't change everytime the system reloads
# preload = /home/matt/.config/hypr/theme/walls/city.png

View file

@ -5,7 +5,7 @@ plugin {
hyprbars {
bar_height = 20
bar_color = $mantle
bar_text_font = "JetBrainsMono Nerd Font"
bar_text_font = "Maple Mono NF"
bar_part_of_window = true
bar_precedence_over_border = false

View file

@ -15,4 +15,4 @@ plugin {
}
# Keybinds
bind = ALT, ESCAPE, hyprexpo:expo, toggle
bind = SHIFT, ESCAPE, hyprexpo:expo, toggle

View file

@ -8,7 +8,6 @@ plugin {
gap_size = 15
bg_color = $base
border_size = 3
exit_behavior = active
gaps {
rows = 3
@ -23,4 +22,4 @@ plugin {
}
# Keybinds
bind = ALT, ESCAPE, hyprtasking:toggle, cursor
bind = SHIFT, ESCAPE, hyprtasking:toggle, cursor

View file

@ -2,50 +2,15 @@
plugins = ["scratchpads", "magnify"]
[scratchpads.volume]
command = "pavucontrol"
unfocus = "hide"
command = "ghostty --class=com.ghostty-volume -e wiremix"
position = "1% 8%"
lazy = true
force_monitor = "DP-1"
[scratchpads.terminal]
command = "kitty --class scratchpad-large"
lazy = true
[scratchpads.yazi]
command = "kitty --class scratchpad-large fish -c yazi"
unfocus = "hide"
hysteresis = 0.1
lazy = true
[scratchpads.gpt]
command = "kitty --class scratchpad-large tgpt -m"
lazy = true
[scratchpads.dots]
command = "kitty --class scratchpad-large yadm enter lazygit"
lazy = true
[scratchpads.btop]
command = "kitty --class scratchpad-large btop"
lazy = true
[scratchpads.nvtop]
command = "kitty --class scratchpad-large nvtop"
lazy = true
[scratchpads.topgrade-system]
command = "kitty --class scratchpad-large fish -c 'up'"
lazy = true
[scratchpads.topgrade-all]
command = "kitty --class scratchpad-large fish -c 'upall'"
lazy = true
[scratchpads.bluetooth]
command = "overskride"
animation = "fromRight"
margin = 20
command = "ghostty --class=com.ghostty-volume -e bluetui"
position = "1% 8%"
unfocus = "hide"
lazy = true
[scratchpads.wifi]
@ -59,3 +24,10 @@ command = "nm-connection-editor"
animation = "fromRight"
margin = 20
lazy = true
[wallpapers]
path = "~/.config/hypr/theme/walls/"
interval = 1440 # change every day
command = "swww img --transition-bezier 0.5,1.19,.8,.4 --transition-type wipe --transition-duration 2 --transition-fps 75 \"[file]\" && notify-send 'Wallpaper Changed' -i \"[file]\" --app-name=Wallpaper"
clear_command = "swww clear"
extensions = ["jpg", "png", "gif", "jpeg"]

View file

@ -1,11 +1,9 @@
#!/bin/bash
# Apps
spotify &
vesktop &
thunderbird &
obsidian &
feishin &
# Terminal Apps
kitty --class btop btop &
kitty --class nvtop nvtop &
kitty --class radeontop radeontop &
ghostty --gtk-single-instance=true --quit-after-last-window-closed=false --initial-window=false &

View file

@ -1,5 +1,9 @@
#!/bin/bash
# Wallpaper engine
# swww-daemon --format xrgb &
hyprpaper &
# Automounter for removable media
udiskie &
@ -15,9 +19,6 @@ swaync &
# OSD Window
swayosd-server &
# Notify about devices connecting and disconnecting
devify &
# Idle daemon to screen lock
hypridle &
@ -27,14 +28,17 @@ wl-paste --watch cliphist store &
# Polkit authentication
/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &
# Audio
pipewire &
wireplumber &
pipewire-pulse &
easyeffects --gapplication-service &
libinput-gestures &
# Random Wallpaper
"$HOME"/.config/hypr/scripts/random_wallpaper &
# Screen sharing and portals
"$HOME"/.config/hypr/scripts/portal &
# xwaylandvideobridge & # Off when using Vesktop instead of Discord
# Audio
easyeffects --gapplication-service &
# Wallpaper Backend
hyprpaper &
# swww-daemon --format xrgb &
"$HOME"/.config/hypr/scripts/random_wallpaper &

View file

@ -1,5 +1,5 @@
animations {
enabled = 1
enabled = false
bezier = default, 0.05, 0.9, 0.1, 1.02
bezier = wind, 0.05, 0.9, 0.1, 1.02
@ -37,5 +37,5 @@ animations {
animation = fadeLayers, 1, 4, default
animation = workspaces, 1, 3.25, easeOutQuint, slide
animation = border, 1, 1, liner
animation = borderangle, 1, 30, liner, loop
# animation = borderangle, 1, 30, liner, loop
}

View file

@ -2,18 +2,18 @@ source = ./colors.conf
general {
border_size = 2
col.inactive_border = rgba($lavenderAlpha69)
col.active_border = rgba($textAlphaee) rgba($lavenderAlpha69) rgba($lavenderAlpha69) rgba($textAlphaee) 45deg
col.active_border = rgba($lavenderAlpha80)
col.inactive_border = rgba($textAlpha40)
gaps_in = 10
gaps_out = 15
gaps_in = 5
gaps_out = 10
}
decoration {
rounding = 7
rounding = 4
active_opacity = 0.92
inactive_opacity = 0.90
active_opacity = 1
inactive_opacity = 1
blur {
enabled = yes
@ -27,12 +27,12 @@ decoration {
}
shadow {
enabled = yes
range = 30
enabled = false
range = 10
scale = 2
render_power = 5
color = $crust
color_inactive = $surface0
color = $surface0
color_inactive = $crust
}
dim_inactive = false
@ -55,7 +55,7 @@ group {
col.inactive = rgba($subtext1Alpha99)
col.locked_active = rgba($maroonAlphaCC)
col.locked_inactive = rgba($subtext1Alpha99)
font_family = JetBrainsMono Nerd Font
font_family = Maple Mono NF
font_size = 15
text_color = $crust
height = 20

View file

@ -1,9 +1,4 @@
# Base Rules
$center-float-large = class:^(center-float-large)$|^(.*qimgv.*)$|^(.*mpv.*)$
windowrule = float, $center-float-large
windowrule = size 70% 70%, $center-float-large
windowrule = center 1, $center-float-large
$center-float = class:^(center-float)$
$center-float-title = title:^(.*Open Folder.*)$|^(.*Open File.*)$|^(.*Save File.*)$|^(.*Save Folder.*)$|^(.*Save Image.*)$|^(.*Save As.*)$|^(.*Open As.*)$
windowrule = float, $center-float
@ -24,6 +19,17 @@ windowrule = float, xfce-polkit|wleave|title:branchdialog|nwg-look|nm-connection
# Workspace Rules
## Smart Gaps
# workspace = w[t1], gapsout:0, gapsin:0
# workspace = w[tg1], gapsout:0, gapsin:0
# workspace = f[1], gapsout:0, gapsin:0
# windowrulev2 = bordersize 0, floating:0, onworkspace:w[t1]
# windowrulev2 = rounding 0, floating:0, onworkspace:w[t1]
# windowrulev2 = bordersize 0, floating:0, onworkspace:w[tg1]
# windowrulev2 = rounding 0, floating:0, onworkspace:w[tg1]
# windowrulev2 = bordersize 0, floating:0, onworkspace:f[1]
# windowrulev2 = rounding 0, floating:0, onworkspace:f[1]
## System
windowrule = workspace 8, class:^(.*virt-manager.*)$|(.*PikaBackup.*)$|(.*VirtualBox Manager.*)$|(.*Vmware*)$
windowrule = workspace 17, class:^(.*GParted.*)$|(.*clamtk.*)$|(.*gnome.Logs.*)$
@ -38,11 +44,12 @@ windowrule = workspace 6, class:^(.*kdenlive.*)$
windowrule = workspace 21 silent, class:^(.*thunderbird.*)$
windowrule = workspace 22 silent, class:^(.*btop.*)$
windowrule = workspace 22 silent, class:^(.*nvtop.*)$
windowrule = workspace 19 silent, class:^(.*[Ss]potify.*)$|(.*tidal-hifi.*)$|(.*You[Tt]ube Music.*)$
windowrule = workspace 20 silent, class:^(.*discord.*)$|(.*vesktop.*)$|(.*WebCord.*)$
windowrule = workspace 22 silent, class:^(.*radeontop.*)$
windowrule = workspace 19 silent, class:^(.*[Ss]potify.*)$|(.*tidal-hifi.*)$|(.*You[Tt]ube Music.*)$|^(.*feishin.*)$
windowrule = workspace 20 silent, class:^(.*discord.*)$|(.*vesktop.*)$|(.*WebCord.*)$|(.*legcord.*)$
windowrule = workspace 15, class:^(.*obsproject.*)$
windowrule = workspace 14, class:^(.*easyeffects.*)$|^(.*qpwgraph.*)$|(.*Helvum.*)$
windowrule = workspace 5, class:^(.*vital.*)$|(.*fl64.*)$|(.*nicotine_plus.*)$|(.*Picard*)$
windowrule = workspace 14, class:^(.*easyeffects.*)$|^(.*qpwgraph.*)$|(.*Helvum.*)$|(.*nicotine_plus.*)$|(.*Picard*)$
windowrule = workspace 5, class:^(.*vital.*)$|(.*fl64.*)$
windowrule = workspace 5, title:^(.*FL Studio.*)$
windowrule = workspace 4, class:^(.*pinta.*)$|(.*krita.*)$|(.*blender.*)$|(.*Upscayl.*)$
@ -78,7 +85,7 @@ windowrule = size 30% 40%, $scratchpad-mini
windowrule = animation slide, $scratchpad-mini
windowrule = workspace special: scratchpad-mini silent, $scratchpad-mini
$sideScratchpad = class:^(.*pavucontrol.*)$|(.*blueman-manager.*)$
$sideScratchpad = class:^(.*com.ghostty-bluetooth.*)$|(.*com.ghostty-volume.*)$
windowrule = workspace special:scratchpad silent, $sideScratchpad
windowrule = size 30% 90%, $sideScratchpad
windowrule = float, $sideScratchpad
@ -93,20 +100,15 @@ windowrule = noblur, $videobridge
windowrule = noinitialfocus, $videobridge
windowrule = maxsize 1 1, $videobridge
$zathura = class:^(.*zathura.*)$
windowrule = float, $zathura
windowrule = size 35% 90%, $zathura
windowrule = center 1, $zathura
$scrcpy = class:^(.*scrcpy.*)$
windowrule = center 1, $scrcpy
windowrule = float, $scrcpy
windowrule = noinitialfocus, class:(.*[Ss]potify.*)|(.*tidal-hifi.*)$|(.*You[Tt]ube Music.*)
windowrule = noinitialfocus, class:(.*[Ss]potify.*)|(.*tidal-hifi.*)$|(.*You[Tt]ube Music.*)|^(.*feishin.*)$
windowrule = idleinhibit always, class:^(.*steam_app.*)$
windowrule = idleinhibit focus, class:^(.*[Ss]potify.*)$|^(.*feishin.*)$
windowrule = idleinhibit fullscreen, class:^(.*celluloid.*)$|^(.*mpv.*)$|^(.*vlc.*)$
windowrule = idleinhibit fullscreen, class:^(.*[Ss]potify.*)$
windowrule = idleinhibit fullscreen, class:^(.*LibreWolf.*)$|^(.*floorp.*)$|^(.*Brave.*)$|^(.*firefox.*)$|^(.*chromium.*)$|^(.*zen-alpha.*)$
windowrule = immediate, class:^(.*steam_app.*)$
@ -121,6 +123,7 @@ layerrule = blur, waybar
layerrule = ignorezero, waybar
layerrule = ignorezero, swaync-notification-window
layerrule = ignorezero, swaync-control-center
layerrule = animation slide, swaync-notification-window
layerrule = animation slide, swaync-control-center

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

View file

@ -1,10 +1,10 @@
# Font
font_family JetBrainsMono Nerd Font
bold_font JetBrainsMono NF Bold
italic_font JetBrainsMono NF Italic
bold_italic_font JetBrainsMono NF Medium Italic
font_size 10.5
font_family JetBrains Maple Mono
bold_font Maple Mono NF Bold
italic_font Maple Mono NF Italic
bold_italic_font Maple Mono NF Medium Italic
font_size 11.5
modify_font cell_height 122%
# Theme

View file

@ -53,8 +53,8 @@ commandTemplates:
checkDockerComposeConfig: "{{ .DockerCompose }} config --quiet"
serviceTop: "{{ .DockerCompose }} top {{ .Service.Name }}"
oS:
openCommand: open {{filename}}
openLinkCommand: open {{link}}
openCommand: $EDITOR {{filename}}
openLinkCommand: xdg-open {{link}}
stats:
graphs:
- caption: CPU (%)

View file

@ -3,7 +3,7 @@
gui:
scrollHeight: 10 # how many lines you scroll by
scrollPastBottom: false # enable scrolling past the bottom
sidePanelWidth: 0.25 # number from 0 to 1
sidePanelWidth: 0.22 # number from 0 to 1
expandFocusedSidePanel: true
theme:
activeBorderColor:
@ -33,24 +33,28 @@ gui:
"feature": "#a6da95"
showBottomLine: false # for hiding the bottom information line (unless it has important information to tell you)
nerdFontsVersion: "3" # nerd fonts version to use ("2" or "3"); empty means don't show nerd font icons
showNumstatInFilesView: true
commandLogSize: 5
showDivergenceFromBaseBranch: "arrowAndNumber"
filterMode: "fuzzy"
showPanelJumps: false
skipRewordInEditorWarning: false # for skipping the confirmation before launching the reword editor
skipRewordInEditorWarning: true # for skipping the confirmation before launching the reword editor
border: "rounded" # one of 'single' | 'double' | 'rounded' | 'hidden'
statusPanelView: "dashboard"
statusPanelView: allBranchesLog
git:
paging:
colorArg: always
pager: delta --paging=never --hyperlinks-file-link-format="lazygit-edit://{path}:{line}"
branchLogCmd: "git log --graph --color=always --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)' {{branchName}} --"
allBranchesLogCmd: "git log --graph --all --color=always --abbrev-commit --date-relative --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(auto)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'"
pager: delta --paging=never --dark --hyperlinks-file-link-format="lazygit-edit://{path}:{line}"
branchLogCmd: "git log --graph --color=always --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)' {{branchName}} --"
parseEmoji: true
allBranchesLogCmds:
- git log --graph --all --color=always --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(auto)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'
os:
edit: '[ -z "$NVIM" ] && (nvim -- {{filename}}) || (nvim --server "$NVIM" --remote-send "q" && nvim --server "$NVIM" --remote {{filename}})'
editPreset: "nvim-remote"
# edit: '[ -z "$NVIM" ] && (nvim -- {{filename}}) || (nvim --server "$NVIM" --remote-send "q" && nvim --server "$NVIM" --remote {{filename}})'
disableStartupPopups: true
notARepository: "skip" # one of: 'prompt' | 'create' | 'skip' | 'quit'
promptToReturnFromSubprocess: false
keybinding:
universal:
quit: "q"
@ -116,10 +120,10 @@ keybinding:
checkForUpdate: "u"
recentRepos: "<enter>"
files:
commitChanges: "c"
commitChanges: "<c-c>"
commitChangesWithoutHook: "w" # commit changes without pre-commit hook
amendLastCommit: "A"
commitChangesWithEditor: "C"
commitChangesWithEditor: "c"
ignoreFile: "i"
refreshFiles: "r"
stashAllChanges: "s"
@ -146,8 +150,8 @@ keybinding:
fetchRemote: "f"
commits:
squashDown: "s"
renameCommit: "r"
renameCommitWithEditor: "R"
renameCommit: "R"
renameCommitWithEditor: "r"
viewResetOptions: "g"
markCommitAsFixup: "f"
createFixupCommit: "F" # create fixup commit for this commit
@ -176,9 +180,134 @@ keybinding:
update: "u"
bulkMenu: "b"
customCommands:
- key: "<c-n>"
description: "New branch with prefix"
prompts:
- type: "menu"
title: "Creating new branch. What kind of branch is it?"
options:
- name: "feature"
value: "feat"
- name: "hotfix"
value: "hotfix"
- name: "fix/bugfix"
value: "fix"
- name: "chore"
value: "chore"
- name: "experiment"
value: "experiment"
- type: "input"
title: "What is the new branch name?"
initialValue: ""
command: "git checkout -b {{index .PromptResponses 0}}/{{index .PromptResponses 1}}"
context: "localBranches"
loadingText: "Creating branch"
- key: "<c-r>"
description: "Create pull request on GitHub"
context: files, localBranches
prompts:
- type: "input"
title: "Pull Request Title"
key: "title"
initialValue: ""
- type: "input"
title: "Base Branch (leave empty for default branch)"
key: "base"
initialValue: ""
- type: "menu"
title: "Create as draft PR?"
key: "draft"
options:
- name: "No"
value: ""
- name: "Yes"
value: "--draft"
- type: "menu"
title: "Add Reviewers"
key: "reviewers"
options:
- name: "CNS"
value: "--reviewer peterbornerup,farhadh,benjaminbruun"
- name: "None"
value: ""
command: >
gh pr create --assignee @me --title "{{.Form.title}}" --fill {{ if ne .Form.base "" }}--base "{{.Form.base}}"{{ end }} {{.Form.draft}} {{ if eq .Form.reviewers "other" }}--reviewer "{{.Form.customReviewers}}"{{ else }}{{.Form.reviewers}}{{ end }}
loadingText: "Creating pull request on GitHub"
- key: "o"
command: "gh repo view --web"
context: "localBranches"
description: "View Repo on GitHub"
loadingText: "Opening GitHub - Repository ..."
- key: "O"
command: "gh pr view --web"
context: "localBranches"
description: "View PR on GitHub"
loadingText: "Opening GitHub - Pull request ..."
- key: "C"
command: "git cz"
description: "commit with commitizen"
context: "global"
description: "Create new conventional commit"
prompts:
- type: "menu"
key: "Type"
title: "Type of change"
options:
- name: "feat"
description: "A new feature"
value: "feat"
- name: "fix"
description: "A bug fix"
value: "fix"
- name: "chore"
description: "Other changes that don't modify src or test files"
value: "chore"
- name: "build"
description: "Changes that affect the build system or external dependencies"
value: "build"
- name: "ci"
description: "Changes to CI configuration files and scripts"
value: "ci"
- name: "docs"
description: "Documentation only changes"
value: "docs"
- name: "perf"
description: "A code change that improves performance"
value: "perf"
- name: "refactor"
description: "A code change that neither fixes a bug nor adds a feature"
value: "refactor"
- name: "revert"
description: "Reverts a previous commit"
value: "revert"
- name: "style"
description: "Changes that do not affect the meaning of the code"
value: "style"
- name: "test"
description: "Adding missing tests or correcting existing tests"
value: "test"
- type: "input"
title: "Scope"
key: "Scope"
initialValue: ""
- type: "menu"
key: "Breaking"
title: "Breaking change"
options:
- name: "no"
value: ""
- name: "yes"
value: "!"
- type: "input"
title: "message"
key: "Message"
initialValue: ""
- type: "confirm"
key: "Confirm"
title: "Commit"
body: "Are you sure you want to commit?"
command: "git commit --message '{{.Form.Type}}{{ if .Form.Scope }}({{ .Form.Scope }}){{ end }}{{.Form.Breaking}}: {{.Form.Message}}'"
loadingText: "Creating conventional commit..."
- key: "R"
command: "git reset --soft HEAD~1"
context: "files"
loadingText: "opening commitizen commit tool"
subprocess: true
description: "Undo last commit"

View file

@ -1,3 +0,0 @@
<div align="center">
<a href=""><img src="./title.png"></a>
</div>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

View file

@ -1,79 +0,0 @@
runtime:
threads: null
release:
check: true
manifest:
enable: false
secondary:
- url: https://cdn.losbroxas.org/manifest.yaml
enable: true
language: en-US
theme: dark
roots:
- store: steam
path: ~/.local/share/Steam
- store: heroic
path: ~/.config/heroic
- store: steam
path: ~/games/SteamLibrary
- store: other
path: ~/.local/share/dolphin-emu
- store: other
path: ~/.config/Ryujinx
redirects: []
backup:
path: /backups/gamesaves
ignoredGames: []
filter:
excludeStoreScreenshots: false
cloud:
exclude: false
epic: false
gog: false
origin: false
steam: false
uplay: false
ignoredPaths: []
ignoredRegistry: []
toggledPaths: {}
toggledRegistry: {}
sort:
key: status
reversed: false
retention:
full: 1
differential: 0
format:
chosen: simple
zip:
compression: deflate
compression:
deflate:
level: 6
bzip2:
level: 6
zstd:
level: 10
onlyConstructive: false
restore:
path: /backups/gamesaves/
ignoredGames: []
toggledPaths: {}
toggledRegistry: {}
sort:
key: status
reversed: false
reverseRedirects: false
scan:
showDeselectedGames: true
showUnchangedGames: true
showUnscannedGames: true
cloud:
remote: null
path: ludusavi-backup
synchronize: true
apps:
rclone:
path: ""
arguments: --fast-list --ignore-checksum
customGames: []

View file

@ -1,7 +1,6 @@
[tools]
usage = "latest"
bun = "latest"
"npm:five-server" = "latest"
node = "latest"
pnpm = "latest"
uv = "latest"
@ -10,7 +9,26 @@ age = "latest"
deno = "latest"
go = "latest"
watchexec = "latest"
# Cargo Tools
"cargo:cargo-cache" = "latest"
"cargo:kanata" = "latest"
"cargo:atac" = "latest"
# Go Tools
"go:github.com/stefanlogue/meteor" = "latest"
# "go:github.com/rszyma/kanata-tray" = "latest"
"go:github.com/jorgerojas26/lazysql" = "latest"
# "go:github.com/guyfedwards/nom" = "latest"
# Python Tools
"pipx:darrenburns/posting" = "latest"
"pipx:pytest" = "latest"
"pipx:b2" = "latest"
# Node Tools
"npm:five-server" = "latest"
"npm:opencode-ai" = "latest"
[settings]
# plugins can read the versions files used by other version managers (if enabled by the plugin)
@ -39,8 +57,7 @@ not_found_auto_install = true # see MISE_NOT_FOUND_AUTO_INSTALL
task_output = "prefix" # see Tasks Runner for more information
paranoid = false # see MISE_PARANOID
shorthands_file = '~/.config/mise/shorthands.toml' # path to the shorthands file, see `MISE_SHORTHANDS_FILE`
disable_default_shorthands = false # disable the default shorthands, see `MISE_DISABLE_DEFAULT_SHORTHANDS`
disable_default_shorthands = false # disable the default shorthands, see `MISE_DISABLE_DEFAULT_SHORTHANDS`
env_file = '.env' # load env vars from a dotenv file, see `MISE_ENV_FILE`
@ -50,3 +67,5 @@ experimental = true # enable experimental features
status = { missing_tools = "if_other_versions_installed", show_env = false, show_tools = false }
cargo_binstall = true # Install pre-compiled cargo packages
pipx_uvx = true # Use uvx instead of pipx
idiomatic_version_file_enable_tools = ["node"]
npm.bun = true

View file

@ -1,66 +0,0 @@
# Progress
# 60 seconds
CTRL+SHIFT+l seek 60
CTRL+SHIFT+l seek -60
CTRL+SHIFT+RIGHT seek 60
CTRL+SHIFT+LEFT seek -60
# 30 seconds
SHIFT+l seek 30
SHIFT+h seek -30
SHIFT+RIGHT seek 30
SHIFT+LEFT seek -30
# 10 seconds
CTRL+l seek 10
CTRL+h seek -10
CTRL+RIGHT seek 10
CTRL+LEFT seek -10
# 5 seconds
l seek 5
h seek -5
RIGHT seek 5
LEFT seek -5
# 2 seconds
ALT+l seek 2
ALT+h seek -2
ALT+RIGHT seek 2
ALT+LEFT seek -2
# Disables all normal mouse scrolls
WHEEL_LEFT ignore
WHEEL_RIGHT ignore
# Audio
# 100%
CTRL+SHIFT+k add volume 100
CTRL+SHIFT+j add volume -100
CTRL+SHIFT+UP add volume 100
CTRL+SHIFT+DOWN add volume -100
# 50%
SHIFT+k add volume 50
SHIFT+j add volume -50
SHIFT+UP add volume 50
SHIFT+DOWN add volume -50
# 25%
CTRL+k add volume 25
CTRL+j add volume -25
CTRL+UP add volume 25
CTRL+DOWN add volume -25
# 10%
k add volume 10
j add volume -10
UP add volume 10
DOWN add volume -10
# 5%
ALT+k add volume 5
ALT+j add volume -5
ALT+UP add volume 5
ALT+DOWN add volume -5

View file

@ -3,6 +3,7 @@
#vo=gpu
# Can cause performance problems with some GPU drivers and GPUs.
#profile=gpu-hq
gpu-context=wayland
# ===== REMOVE THE ABOVE FOUR LINES AND RESAVE IF YOU ENCOUNTER PLAYBACK ISSUES AFTER =====
@ -19,14 +20,17 @@ osd-color='#cad3f5'
osd-shadow-color='#24273a'
# Screenshots
screenshot-directory='~/Imagenes/Capturas/PC'
screenshot-directory='~'
screenshot-template='mpv-%f-%p'
# Enables best HW decoder; turn off for software decoding
hwdec=auto
# IPC
input-ipc-server=/tmp/mpv-socket
# Keeps open the window after a video is finished
keep-open
# keep-open
border=no # hides the window title bar
msg-color=yes # color log messages on terminal
@ -34,7 +38,7 @@ term-osd-bar=yes # displays a progress bar on the terminal
cursor-autohide=1000 # autohides the cursor after 1s
# Sets a custom font
osd-font='JetBrainsMono Nerd Font Light'
osd-font='Maple Mono NF'
osd-font-size=35
# osd-scale=0.5
@ -55,6 +59,10 @@ profile-restore=copy-equal
# Sets volume to 100%.
volume=100
# Sets maximum volume to 200%.
volume-max=200
# Audio language: German
alang=ger
# Normalizes audio
# af-add='dynaudnorm=g=5:f=250:r=0.9:p=0.5'
@ -79,6 +87,8 @@ deband-grain=48 # dynamic grain: set to "0" if using the static grain shader
# ===== Subtitles =====
blend-subtitles=yes
sub-auto=fuzzy
slang=ger
# ===== Motion Interpolation =====
override-display-fps=75
@ -288,3 +298,4 @@ profile=protocol.http
profile-restore=copy-equal # Sets the profile restore method to "copy if equal"
profile-desc=ytdl
profile=protocol.http
ytdl-raw-options=ignore-config=,sub-format=de,write-sub=

BIN
.config/mpv/mpv_websocket Executable file

Binary file not shown.

View file

@ -0,0 +1,2 @@
font_size=38
scale=3

View file

@ -0,0 +1,455 @@
------------- Instructions -------------
-- -- Video Demonstration: https://www.youtube.com/watch?v=M4t7HYS73ZQ
-- IF USING WEBSOCKET (RECOMMENDED)
-- -- Install the mpv_webscoket extension: https://github.com/kuroahna/mpv_websocket
-- -- Open a LOCAL copy of https://github.com/Renji-XD/texthooker-ui
-- -- Configure the script (if you're not using the Lapis note format)
-- IF USING CLIPBOARD INSERTER (NOT RECOMMENDED)
-- -- Install the clipboard inserter plugin: https://github.com/laplus-sadness/lap-clipboard-inserter
-- -- Open the texthooker UI, enable the plugin and enable clipboard pasting: https://github.com/Renji-XD/texthooker-ui
-- BOTH
-- -- Wait for an unknown word and create the card with Yomichan.
-- -- Select all the subtitle lines you wish to add to the card and copy with Ctrl + c.
-- -- Press Ctrl + v in MPV to add the lines, their Audio and the currently paused image to the back of the card.
---------------------------------------
------------- Credits -------------
-- Credits and copyright go to Anacreon DJT: https://anacreondjt.gitlab.io/
------------------------------------
------------- Original Credits (Outdated) -------------
-- This script was made by users of 4chan's Daily Japanese Thread (DJT) on /jp/
-- More information can be found here http://animecards.site/
-- Message @Anacreon with bug reports and feature requests on Discord (https://animecards.site/discord/) or 4chan (https://boards.4channel.org/jp/#s=djt)
--
-- If you like this work please consider subscribing on Patreon!
-- https://www.patreon.com/Quizmaster
------------------------------------
local utils = require 'mp.utils'
local msg = require 'mp.msg'
------------- User Config -------------
-- Set these to match your field names in Anki
local FRONT_FIELD = "Vocab"
local SENTENCE_AUDIO_FIELD = "SentAudio"
local SENTENCE_FIELD = "INVALID" -- the sentence is better taken care of by yomitan itself.
local IMAGE_FIELD = "Image"
-- Optional padding and fade settings in seconds.
-- Padding grabs extra audio around your selected subs.
-- Fade does a volume fade effect at the beginning and end of the resulting audio.
local AUDIO_CLIP_FADE = 0.2
local AUDIO_CLIP_PADDING = 0.75
-- Optional play sentence audio automatically after card update
local AUTOPLAY_AUDIO = false
-- Optional screenshot image format. Valid options: "webp" or "png"
-- Change to "png" if you plan to view cards on iOS or Mac.
local IMAGE_FORMAT = "png"
-- Optional set to true if you want your volume in mpv to affect Anki card volume.
local USE_MPV_VOLUME = false
-- Set to true if you want writing to clipboard to be enabled by default.
-- The more modern and recommended alternative is to use the websocket.
local ENABLE_SUBS_TO_CLIP = false
---------------------------------------
------------- Internal Variables -------------
local subs = {}
local debug_mode = true
local use_powershell_clipboard = nil
local prefix = ""
---------------------------------------
------------- Setup -------------
if unpack ~= nil then table.unpack = unpack end
local o = {}
-- Possible platforms: windows, linux, macos
local platform = mp.get_property_native("platform")
if platform == "darwin" then
platform = "macos"
end
local display_server
if os.getenv("WAYLAND_DISPLAY") then
display_server = 'wayland'
elseif platform == 'linux' then
display_server = 'xorg'
else
display_server = ""
end
local function dlog(...)
if debug_mode then
print(...)
end
end
local function verfiy_libmp3lame()
local encoderlist = mp.get_property("encoder-list")
if not encoderlist or not string.find(encoderlist, "libmp3lame") then
mp.osd_message("Error: libmp3lame encoder not found. Audio export will not work.\nPlease use a build of mpv with libmp3lame support.", 10)
msg.error("Error: libmp3lame encoder not found. MP3 audio export will not work.")
else
dlog("libmp3lame encoder found.")
end
end
mp.register_event("file-loaded", verfiy_libmp3lame)
dlog("Detected Platform: " .. platform)
dlog("Detected display server: " .. display_server)
---------------------------------------
-- Handle requests to AnkiConnect
local function anki_connect(action, params)
local request = utils.format_json({action=action, params=params, version=6})
local args = {'curl', '-s', 'localhost:8765', '-X', 'POST', '-d', request}
dlog("AnkiConnect request: " .. request)
local result = utils.subprocess({ args = args, cancellable = false, capture_stderr = true })
if result.status ~= 0 then
msg.error("Curl command failed with status: " .. tostring(result.status))
msg.error("Stderr: " .. (result.stderr or "none"))
return nil
end
if not result.stdout or result.stdout == "" then
msg.error("Empty response from AnkiConnect")
return nil
end
dlog("AnkiConnect response: " .. result.stdout)
local success, parsed_result = pcall(function() return utils.parse_json(result.stdout) end)
if not success or not parsed_result then
msg.error("Failed to parse JSON response: " .. (result.stdout or "empty"))
return nil
end
return parsed_result
end
-- Get media directory path from AnkiConnect
local function set_media_dir()
local media_dir_response = anki_connect('getMediaDirPath')
if not media_dir_response then
msg.error("Failed to communicate with AnkiConnect. Is Anki running and do you have AnkiConnect installed?")
mp.osd_message("Error: Failed to communicate with AnkiConnect. Is Anki running and do you have AnkiConnect installed?", 5)
return
elseif media_dir_response["error"] then
msg.error("AnkiConnect error: " .. tostring(media_dir_response["error"]))
mp.osd_message("AnkiConnect error: " .. tostring(media_dir_response["error"]), 5)
return
elseif media_dir_response["result"] then
prefix = media_dir_response["result"]
dlog("Got media directory path from AnkiConnect: " .. prefix)
else
msg.error("Unexpected response format from AnkiConnect")
mp.osd_message("Error: Unexpected response from AnkiConnect", 5)
return
end
end
local function clean(s)
for _, ws in ipairs({'%s', ' ', '', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', ' ', '', ''}) do
s = s:gsub(ws..'+', "")
end
return s
end
local function get_name(s, e)
return mp.get_property("filename"):gsub('%W','').. tostring(s) .. tostring(e)
end
local function get_clipboard()
local res
if platform == 'windows' then
res = utils.subprocess({ args = {
'powershell', '-NoProfile', '-Command', [[& {
Trap {
Write-Error -ErrorRecord $_
Exit 1
}
$clip = ""
if (Get-Command "Get-Clipboard" -errorAction SilentlyContinue) {
$clip = Get-Clipboard -Raw -Format Text -TextFormatType UnicodeText
} else {
Add-Type -AssemblyName PresentationCore
$clip = [Windows.Clipboard]::GetText()
}
$clip = $clip -Replace "`r",""
$u8clip = [System.Text.Encoding]::UTF8.GetBytes($clip)
[Console]::OpenStandardOutput().Write($u8clip, 0, $u8clip.Length)
}]]
} })
elseif platform == 'macos' then
return io.popen('LANG=en_US.UTF-8 pbpaste'):read("*a")
else -- platform == 'linux'
if display_server == 'wayland' then
res = utils.subprocess({ args = {
'wl-paste'
} })
else -- display_server == 'xorg'
res = utils.subprocess({ args = {
'xclip', '-selection', 'clipboard', '-out'
} })
end
end
if not res.error then
return res.stdout
end
end
local function powershell_set_clipboard(text)
utils.subprocess({ args = {
'powershell', '-NoProfile', '-Command', [[Set-Clipboard -Value @"]] .. "\n" .. text .. "\n" .. [["@]]
}})
end
local function cmd_set_clipboard(text)
local cmd = 'echo ' .. text .. ' | clip';
mp.command("run cmd /D /C " .. cmd);
end
local function determine_clip_type()
powershell_set_clipboard([[Anacreon様]])
use_powershell_clipboard = get_clipboard() == [[Anacreon様]]
end
local function linux_set_clipboard(text)
if display_server == 'wayland' then
os.execute('wl-copy <<EOF\n' .. text .. '\nEOF\n')
else -- display_server == 'xorg'
os.execute('xclip -selection clipboard <<EOF\n' .. text .. '\nEOF\n')
end
end
local function macos_set_clipboard(text)
os.execute('export LANG=en_US.UTF-8; cat <<EOF | pbcopy\n' .. text .. '\nEOF\n')
end
local function record_sub(_, text)
if text and mp.get_property_number('sub-start') and mp.get_property_number('sub-end') then
local sub_delay = mp.get_property_native("sub-delay")
local audio_delay = mp.get_property_native("audio-delay")
local newtext = clean(text)
if newtext == '' then
return
end
subs[newtext] = { mp.get_property_number('sub-start') + sub_delay - audio_delay, mp.get_property_number('sub-end') + sub_delay - audio_delay }
dlog(string.format("%s -> %s : %s", subs[newtext][1], subs[newtext][2], newtext))
if ENABLE_SUBS_TO_CLIP then
-- Remove newlines from text before sending it to clipboard.
-- This way pressing control+v without copying from texthooker page
-- will always give last line.
text = string.gsub(text, "[\n\r]+", " ")
if platform == 'windows' then
if use_powershell_clipboard == nil then
determine_clip_type()
end
if use_powershell_clipboard then
powershell_set_clipboard(text)
else
cmd_set_clipboard(text)
end
elseif platform == 'macos' then
macos_set_clipboard(text)
else
linux_set_clipboard(text)
end
end
end
end
local function create_audio(s, e)
if s == nil or e == nil then
return
end
local name = get_name(s, e)
local destination = utils.join_path(prefix, name .. '.mp3')
s = s - AUDIO_CLIP_PADDING
local t = e - s + AUDIO_CLIP_PADDING
local source = mp.get_property("path")
local aid = mp.get_property("aid")
local tracks_count = mp.get_property_number("track-list/count")
for i = 1, tracks_count do
local track_type = mp.get_property(string.format("track-list/%d/type", i))
local track_selected = mp.get_property(string.format("track-list/%d/selected", i))
if track_type == "audio" and track_selected == "yes" then
if mp.get_property(string.format("track-list/%d/external-filename", i), o) ~= o then
source = mp.get_property(string.format("track-list/%d/external-filename", i))
aid = 'auto'
end
break
end
end
local cmd = {
'run',
'mpv',
source,
'--loop-file=no',
'--video=no',
'--no-ocopy-metadata',
'--no-sub',
'--audio-channels=1',
string.format('--start=%.3f', s),
string.format('--length=%.3f', t),
string.format('--aid=%s', aid),
string.format('--volume=%s', USE_MPV_VOLUME and mp.get_property('volume') or '100'),
string.format("--af-append=afade=t=in:curve=ipar:st=%.3f:d=%.3f", s, AUDIO_CLIP_FADE),
string.format("--af-append=afade=t=out:curve=ipar:st=%.3f:d=%.3f", s + t - AUDIO_CLIP_FADE, AUDIO_CLIP_FADE),
string.format('-o=%s', destination)
}
mp.commandv(table.unpack(cmd))
dlog(utils.to_string(cmd))
end
local function create_screenshot(s, e)
local source = mp.get_property("path")
local img = utils.join_path(prefix, get_name(s,e) .. '.' .. IMAGE_FORMAT)
local cmd = {
'run',
'mpv',
source,
'--loop-file=no',
'--audio=no',
'--no-ocopy-metadata',
'--no-sub',
'--frames=1',
}
if IMAGE_FORMAT == 'webp' then
table.insert(cmd, '--ovc=libwebp')
table.insert(cmd, '--ovcopts-add=lossless=0')
table.insert(cmd, '--ovcopts-add=compression_level=6')
table.insert(cmd, '--ovcopts-add=preset=drawing')
elseif IMAGE_FORMAT == 'png' then
table.insert(cmd, '--vf-add=format=rgb24')
end
table.insert(cmd, '--vf-add=scale=480*iw*sar/ih:480')
table.insert(cmd, string.format('--start=%.3f', mp.get_property_number("time-pos")))
table.insert(cmd, string.format('-o=%s', img))
mp.commandv(table.unpack(cmd))
dlog(utils.to_string(cmd))
end
local function add_to_last_added(ifield, afield, tfield)
local added_notes = anki_connect('findNotes', {query='added:1'})["result"]
table.sort(added_notes)
local noteid = added_notes[#added_notes]
local note = anki_connect('notesInfo', {notes={noteid}})
if note ~= nil then
local word = note["result"][1]["fields"][FRONT_FIELD]["value"]
local new_fields = {
[SENTENCE_AUDIO_FIELD]=afield,
[SENTENCE_FIELD]=tfield,
[IMAGE_FIELD]=ifield
}
anki_connect('updateNoteFields', {
note={
id=noteid,
fields=new_fields
}
})
mp.osd_message("Updated note: " .. word, 3)
msg.info("Updated note: " .. word)
end
end
local function get_extract()
local lines = get_clipboard()
local e = 0
local s = 0
for line in lines:gmatch("[^\r\n]+") do
line = clean(line)
dlog(line)
if subs[line]~= nil then
if subs[line][1] ~= nil and subs[line][2] ~= nil then
if s == 0 then
s = subs[line][1]
else
s = math.min(s, subs[line][1])
end
e = math.max(e, subs[line][2])
end
else
mp.osd_message("ERR! Line not found: " .. line, 3)
return
end
end
dlog(string.format('s=%d, e=%d', s, e))
if e ~= 0 then
create_screenshot(s, e)
create_audio(s, e)
local ifield = '<img src='.. get_name(s,e) ..'.' .. IMAGE_FORMAT .. '>'
local afield = "[sound:".. get_name(s,e) .. ".mp3]"
local tfield = string.gsub(string.gsub(lines,"\n+", "<br />"), "\r", "")
add_to_last_added(ifield, afield, tfield)
if AUTOPLAY_AUDIO then
local name = get_name(s, e)
local audio = utils.join_path(prefix, name .. '.mp3')
local cmd = {'run', 'mpv', audio, '--loop-file=no', '--load-scripts=no'}
mp.commandv(table.unpack(cmd))
end
end
end
local function ex()
if not prefix or prefix == "" then
set_media_dir()
end
if debug_mode then
get_extract()
else
pcall(get_extract)
end
end
local function rec(...)
if debug_mode then
record_sub(...)
else
pcall(record_sub, ...)
end
end
local function toggle_sub_to_clipboard()
ENABLE_SUBS_TO_CLIP = not ENABLE_SUBS_TO_CLIP
mp.osd_message("Clipboard inserter " .. (ENABLE_SUBS_TO_CLIP and "activated" or "deactived"), 3)
end
local function toggle_debug_mode()
debug_mode = not debug_mode
mp.osd_message("Debug mode " .. (debug_mode and "activated" or "deactived"), 3)
end
local function clear_subs(_)
subs = {}
end
mp.observe_property("sub-text", 'string', rec)
mp.observe_property("filename", "string", clear_subs)
mp.add_key_binding("ctrl+v", "update-anki-card", ex)
mp.add_key_binding("ctrl+t", "toggle-clipboard-insertion", toggle_sub_to_clipboard)
mp.add_key_binding("ctrl+d", "toggle-debug-mode", toggle_debug_mode)
mp.add_key_binding("ctrl+V", ex)
mp.add_key_binding("ctrl+T", toggle_sub_to_clipboard)
mp.add_key_binding("ctrl+D", toggle_debug_mode)

View file

@ -0,0 +1,83 @@
-- mpv_websocket
-- https://github.com/kuroahna/mpv_websocket
local utils = require("mp.utils")
local platform = mp.get_property_native("platform")
local config_file_path = mp.find_config_file("mpv.conf")
local config_folder_path, config_file = utils.split_path(config_file_path)
local mpv_websocket_path =
utils.join_path(config_folder_path, platform == "windows" and "mpv_websocket.exe" or "mpv_websocket")
local initialised_websocket
local _, err = utils.file_info(config_file_path)
if err then
error("failed to open mpv config file `" .. config_file_path .. "`")
end
local _, err = utils.file_info(mpv_websocket_path)
if err then
error("failed to open mpv_websocket")
end
local function find_mpv_socket(config_file_path)
local file = io.open(config_file_path, "r")
if file == nil then
error("failed to read mpv config file `" .. config_file_path .. "`")
end
local mpv_socket
for line in file:lines() do
mpv_socket = line:match("^input%-ipc%-server%s*=%s*(%g+)%s*")
if mpv_socket then
break
end
end
file:close()
if not mpv_socket then
error("input-ipc-server option does not exist in `" .. config_file_path .. "`")
end
return mpv_socket
end
local mpv_socket = find_mpv_socket(config_file_path)
if platform == "windows" then
mpv_socket = "\\\\.\\pipe" .. mpv_socket:gsub("/", "\\")
end
local function start_websocket()
initialised_websocket = mp.command_native_async({
name = "subprocess",
playback_only = false,
capture_stdout = true,
capture_stderr = true,
args = {
mpv_websocket_path,
"-m",
mpv_socket,
"-w",
"6677",
},
})
end
local function end_websocket()
mp.abort_async_command(initialised_websocket)
initialised_websocket = nil
end
local function toggle_websocket()
local paused = mp.get_property_bool("pause")
if initialised_websocket and paused then
end_websocket()
elseif not initialised_websocket and not paused then
start_websocket()
end
end
mp.register_script_message("togglewebsocket", toggle_websocket)
start_websocket()

View file

@ -0,0 +1,757 @@
local mp = require 'mp'
local msg = require 'mp.msg'
local utils = require 'mp.utils'
local options = require 'mp.options'
-- Default options
local opts = {
-- All drawing is scaled by this value, including the text borders and the
-- cursor. Change it if you have a high-DPI display.
scale = 1,
-- Set the font used for the REPL and the console. This probably doesn't
-- have to be a monospaced font.
font = "",
-- Set the font size used for the REPL and the console. This will be
-- multiplied by "scale."
font_size = 16,
}
options.read_options(opts, "user_input")
local API_VERSION = "0.1.0"
local API_MAJOR_MINOR = API_VERSION:match("%d+%.%d+")
local co = nil
local queue = {}
local active_ids = {}
local histories = {}
local request = nil
local line = ''
--[[
The below code is a modified implementation of text input from mpv's console.lua:
https://github.com/mpv-player/mpv/blob/7ca14d646c7e405f3fb1e44600e2a67fc4607238/player/lua/console.lua
Modifications:
removed support for log messages, sending commands, tab complete, help commands
removed update timer
Changed esc key to call handle_esc function
handle_esc and handle_enter now resume the main coroutine with a response table
made history specific to request ids
localised all functions - reordered some to fit
keybindings use new names
]]--
------------------------------START ORIGINAL MPV CODE-----------------------------------
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
-- Copyright (C) 2019 the mpv developers
--
-- Permission to use, copy, modify, and/or distribute this software for any
-- purpose with or without fee is hereby granted, provided that the above
-- copyright notice and this permission notice appear in all copies.
--
-- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-- SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-- OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-- CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
local assdraw = require 'mp.assdraw'
local function detect_platform()
local o = {}
-- Kind of a dumb way of detecting the platform but whatever
if mp.get_property_native('options/vo-mmcss-profile', o) ~= o then
return 'windows'
elseif mp.get_property_native('options/macos-force-dedicated-gpu', o) ~= o then
return 'macos'
elseif os.getenv('WAYLAND_DISPLAY') then
return 'wayland'
end
return 'x11'
end
-- Pick a better default font for Windows and macOS
local platform = detect_platform()
if platform == 'windows' then
opts.font = 'Consolas'
elseif platform == 'macos' then
opts.font = 'Menlo'
else
opts.font = 'monospace'
end
local repl_active = false
local insert_mode = false
local cursor = 1
local key_bindings = {}
local global_margin_y = 0
-- Escape a string for verbatim display on the OSD
local function ass_escape(str)
-- There is no escape for '\' in ASS (I think?) but '\' is used verbatim if
-- it isn't followed by a recognised character, so add a zero-width
-- non-breaking space
str = str:gsub('\\', '\\\239\187\191')
str = str:gsub('{', '\\{')
str = str:gsub('}', '\\}')
-- Precede newlines with a ZWNBSP to prevent ASS's weird collapsing of
-- consecutive newlines
str = str:gsub('\n', '\239\187\191\\N')
-- Turn leading spaces into hard spaces to prevent ASS from stripping them
str = str:gsub('\\N ', '\\N\\h')
str = str:gsub('^ ', '\\h')
return str
end
-- Render the REPL and console as an ASS OSD
local function update()
local dpi_scale = mp.get_property_native("display-hidpi-scale", 1.0)
dpi_scale = dpi_scale * opts.scale
local screenx, screeny, aspect = mp.get_osd_size()
screenx = screenx / dpi_scale
screeny = screeny / dpi_scale
-- Clear the OSD if the REPL is not active
if not repl_active then
mp.set_osd_ass(screenx, screeny, '')
return
end
local ass = assdraw.ass_new()
local style = '{\\r' ..
'\\1a&H00&\\3a&H00&\\4a&H99&' ..
'\\1c&Heeeeee&\\3c&H111111&\\4c&H000000&' ..
'\\fn' .. opts.font .. '\\fs' .. opts.font_size ..
'\\bord1\\xshad0\\yshad1\\fsp0\\q1}'
local queue_style = '{\\r' ..
'\\1a&H00&\\3a&H00&\\4a&H99&' ..
'\\1c&Heeeeee&\\3c&H111111&\\4c&H000000&' ..
'\\fn' .. opts.font .. '\\fs' .. opts.font_size .. '\\c&H66ccff&' ..
'\\bord1\\xshad0\\yshad1\\fsp0\\q1}'
-- Create the cursor glyph as an ASS drawing. ASS will draw the cursor
-- inline with the surrounding text, but it sets the advance to the width
-- of the drawing. So the cursor doesn't affect layout too much, make it as
-- thin as possible and make it appear to be 1px wide by giving it 0.5px
-- horizontal borders.
local cheight = opts.font_size * 8
local cglyph = '{\\r' ..
'\\1a&H44&\\3a&H44&\\4a&H99&' ..
'\\1c&Heeeeee&\\3c&Heeeeee&\\4c&H000000&' ..
'\\xbord0.5\\ybord0\\xshad0\\yshad1\\p4\\pbo24}' ..
'm 0 0 l 1 0 l 1 ' .. cheight .. ' l 0 ' .. cheight ..
'{\\p0}'
local before_cur = ass_escape(line:sub(1, cursor - 1))
local after_cur = ass_escape(line:sub(cursor))
ass:new_event()
ass:an(1)
ass:pos(2, screeny - 2 - global_margin_y * screeny)
if (#queue == 2) then ass:append(queue_style .. string.format("There is 1 more request queued\\N"))
elseif (#queue > 2) then ass:append(queue_style .. string.format("There are %d more requests queued\\N", #queue-1)) end
ass:append(style .. request.text .. '\\N')
ass:append('> ' .. before_cur)
ass:append(cglyph)
ass:append(style .. after_cur)
-- Redraw the cursor with the REPL text invisible. This will make the
-- cursor appear in front of the text.
ass:new_event()
ass:an(1)
ass:pos(2, screeny - 2)
ass:append(style .. '{\\alpha&HFF&}> ' .. before_cur)
ass:append(cglyph)
ass:append(style .. '{\\alpha&HFF&}' .. after_cur)
mp.set_osd_ass(screenx, screeny, ass.text)
end
-- Naive helper function to find the next UTF-8 character in 'str' after 'pos'
-- by skipping continuation bytes. Assumes 'str' contains valid UTF-8.
local function next_utf8(str, pos)
if pos > str:len() then return pos end
repeat
pos = pos + 1
until pos > str:len() or str:byte(pos) < 0x80 or str:byte(pos) > 0xbf
return pos
end
-- As above, but finds the previous UTF-8 charcter in 'str' before 'pos'
local function prev_utf8(str, pos)
if pos <= 1 then return pos end
repeat
pos = pos - 1
until pos <= 1 or str:byte(pos) < 0x80 or str:byte(pos) > 0xbf
return pos
end
-- Insert a character at the current cursor position (any_unicode)
local function handle_char_input(c)
if insert_mode then
line = line:sub(1, cursor - 1) .. c .. line:sub(next_utf8(line, cursor))
else
line = line:sub(1, cursor - 1) .. c .. line:sub(cursor)
end
cursor = cursor + #c
update()
end
-- Remove the character behind the cursor (Backspace)
local function handle_backspace()
if cursor <= 1 then return end
local prev = prev_utf8(line, cursor)
line = line:sub(1, prev - 1) .. line:sub(cursor)
cursor = prev
update()
end
-- Remove the character in front of the cursor (Del)
local function handle_del()
if cursor > line:len() then return end
line = line:sub(1, cursor - 1) .. line:sub(next_utf8(line, cursor))
update()
end
-- Toggle insert mode (Ins)
local function handle_ins()
insert_mode = not insert_mode
end
-- Move the cursor to the next character (Right)
local function next_char(amount)
cursor = next_utf8(line, cursor)
update()
end
-- Move the cursor to the previous character (Left)
local function prev_char(amount)
cursor = prev_utf8(line, cursor)
update()
end
-- Clear the current line (Ctrl+C)
local function clear()
line = ''
cursor = 1
insert_mode = false
request.history.pos = #request.history.list + 1
update()
end
-- Close the REPL if the current line is empty, otherwise do nothing (Ctrl+D)
local function maybe_exit()
if line == '' then
else
handle_del()
end
end
local function handle_esc()
coroutine.resume(co, {
line = nil,
err = "exited"
})
end
-- Run the current command and clear the line (Enter)
local function handle_enter()
if request.history.list[#request.history.list] ~= line and line ~= "" then
request.history.list[#request.history.list + 1] = line
end
coroutine.resume(co, {
line = line
})
end
-- Go to the specified position in the command history
local function go_history(new_pos)
local old_pos = request.history.pos
request.history.pos = new_pos
-- Restrict the position to a legal value
if request.history.pos > #request.history.list + 1 then
request.history.pos = #request.history.list + 1
elseif request.history.pos < 1 then
request.history.pos = 1
end
-- Do nothing if the history position didn't actually change
if request.history.pos == old_pos then
return
end
-- If the user was editing a non-history line, save it as the last history
-- entry. This makes it much less frustrating to accidentally hit Up/Down
-- while editing a line.
if old_pos == #request.history.list + 1 and line ~= '' and request.history.list[#request.history.list] ~= line then
request.history.list[#request.history.list + 1] = line
end
-- Now show the history line (or a blank line for #history + 1)
if request.history.pos <= #request.history.list then
line = request.history.list[request.history.pos]
else
line = ''
end
cursor = line:len() + 1
insert_mode = false
update()
end
-- Go to the specified relative position in the command history (Up, Down)
local function move_history(amount)
go_history(request.history.pos + amount)
end
-- Go to the first command in the command history (PgUp)
local function handle_pgup()
go_history(1)
end
-- Stop browsing history and start editing a blank line (PgDown)
local function handle_pgdown()
go_history(#request.history.list + 1)
end
-- Move to the start of the current word, or if already at the start, the start
-- of the previous word. (Ctrl+Left)
local function prev_word()
-- This is basically the same as next_word() but backwards, so reverse the
-- string in order to do a "backwards" find. This wouldn't be as annoying
-- to do if Lua didn't insist on 1-based indexing.
cursor = line:len() - select(2, line:reverse():find('%s*[^%s]*', line:len() - cursor + 2)) + 1
update()
end
-- Move to the end of the current word, or if already at the end, the end of
-- the next word. (Ctrl+Right)
local function next_word()
cursor = select(2, line:find('%s*[^%s]*', cursor)) + 1
update()
end
-- Move the cursor to the beginning of the line (HOME)
local function go_home()
cursor = 1
update()
end
-- Move the cursor to the end of the line (END)
local function go_end()
cursor = line:len() + 1
update()
end
-- Delete from the cursor to the beginning of the word (Ctrl+Backspace)
local function del_word()
local before_cur = line:sub(1, cursor - 1)
local after_cur = line:sub(cursor)
before_cur = before_cur:gsub('[^%s]+%s*$', '', 1)
line = before_cur .. after_cur
cursor = before_cur:len() + 1
update()
end
-- Delete from the cursor to the end of the word (Ctrl+Del)
local function del_next_word()
if cursor > line:len() then return end
local before_cur = line:sub(1, cursor - 1)
local after_cur = line:sub(cursor)
after_cur = after_cur:gsub('^%s*[^%s]+', '', 1)
line = before_cur .. after_cur
update()
end
-- Delete from the cursor to the end of the line (Ctrl+K)
local function del_to_eol()
line = line:sub(1, cursor - 1)
update()
end
-- Delete from the cursor back to the start of the line (Ctrl+U)
local function del_to_start()
line = line:sub(cursor)
cursor = 1
update()
end
-- Returns a string of UTF-8 text from the clipboard (or the primary selection)
local function get_clipboard(clip)
if platform == 'x11' then
local res = utils.subprocess({
args = { 'xclip', '-selection', clip and 'clipboard' or 'primary', '-out' },
playback_only = false,
})
if not res.error then
return res.stdout
end
elseif platform == 'wayland' then
local res = utils.subprocess({
args = { 'wl-paste', clip and '-n' or '-np' },
playback_only = false,
})
if not res.error then
return res.stdout
end
elseif platform == 'windows' then
local res = utils.subprocess({
args = { 'powershell', '-NoProfile', '-Command', [[& {
Trap {
Write-Error -ErrorRecord $_
Exit 1
}
$clip = ""
if (Get-Command "Get-Clipboard" -errorAction SilentlyContinue) {
$clip = Get-Clipboard -Raw -Format Text -TextFormatType UnicodeText
} else {
Add-Type -AssemblyName PresentationCore
$clip = [Windows.Clipboard]::GetText()
}
$clip = $clip -Replace "`r",""
$u8clip = [System.Text.Encoding]::UTF8.GetBytes($clip)
[Console]::OpenStandardOutput().Write($u8clip, 0, $u8clip.Length)
}]] },
playback_only = false,
})
if not res.error then
return res.stdout
end
elseif platform == 'macos' then
local res = utils.subprocess({
args = { 'pbpaste' },
playback_only = false,
})
if not res.error then
return res.stdout
end
end
return ''
end
-- Paste text from the window-system's clipboard. 'clip' determines whether the
-- clipboard or the primary selection buffer is used (on X11 and Wayland only.)
local function paste(clip)
local text = get_clipboard(clip)
local before_cur = line:sub(1, cursor - 1)
local after_cur = line:sub(cursor)
line = before_cur .. text .. after_cur
cursor = cursor + text:len()
update()
end
-- List of input bindings. This is a weird mashup between common GUI text-input
-- bindings and readline bindings.
local function get_bindings()
local bindings = {
{ 'esc', handle_esc },
{ 'enter', handle_enter },
{ 'kp_enter', handle_enter },
{ 'shift+enter', function() handle_char_input('\n') end },
{ 'ctrl+j', handle_enter },
{ 'ctrl+m', handle_enter },
{ 'bs', handle_backspace },
{ 'shift+bs', handle_backspace },
{ 'ctrl+h', handle_backspace },
{ 'del', handle_del },
{ 'shift+del', handle_del },
{ 'ins', handle_ins },
{ 'shift+ins', function() paste(false) end },
{ 'mbtn_mid', function() paste(false) end },
{ 'left', function() prev_char() end },
{ 'ctrl+b', function() prev_char() end },
{ 'right', function() next_char() end },
{ 'ctrl+f', function() next_char() end },
{ 'up', function() move_history(-1) end },
{ 'ctrl+p', function() move_history(-1) end },
{ 'wheel_up', function() move_history(-1) end },
{ 'down', function() move_history(1) end },
{ 'ctrl+n', function() move_history(1) end },
{ 'wheel_down', function() move_history(1) end },
{ 'wheel_left', function() end },
{ 'wheel_right', function() end },
{ 'ctrl+left', prev_word },
{ 'alt+b', prev_word },
{ 'ctrl+right', next_word },
{ 'alt+f', next_word },
{ 'ctrl+a', go_home },
{ 'home', go_home },
{ 'ctrl+e', go_end },
{ 'end', go_end },
{ 'pgup', handle_pgup },
{ 'pgdwn', handle_pgdown },
{ 'ctrl+c', clear },
{ 'ctrl+d', maybe_exit },
{ 'ctrl+k', del_to_eol },
{ 'ctrl+u', del_to_start },
{ 'ctrl+v', function() paste(true) end },
{ 'meta+v', function() paste(true) end },
{ 'ctrl+bs', del_word },
{ 'ctrl+w', del_word },
{ 'ctrl+del', del_next_word },
{ 'alt+d', del_next_word },
{ 'kp_dec', function() handle_char_input('.') end },
}
for i = 0, 9 do
bindings[#bindings + 1] =
{'kp' .. i, function() handle_char_input('' .. i) end}
end
return bindings
end
local function text_input(info)
if info.key_text and (info.event == "press" or info.event == "down"
or info.event == "repeat")
then
handle_char_input(info.key_text)
end
end
local function define_key_bindings()
if #key_bindings > 0 then
return
end
for _, bind in ipairs(get_bindings()) do
-- Generate arbitrary name for removing the bindings later.
local name = "_userinput_" .. bind[1]
key_bindings[#key_bindings + 1] = name
mp.add_forced_key_binding(bind[1], name, bind[2], {repeatable = true})
end
mp.add_forced_key_binding("any_unicode", "_userinput_text", text_input,
{repeatable = true, complex = true})
key_bindings[#key_bindings + 1] = "_userinput_text"
end
local function undefine_key_bindings()
for _, name in ipairs(key_bindings) do
mp.remove_key_binding(name)
end
key_bindings = {}
end
-- Set the REPL visibility ("enable", Esc)
local function set_active(active)
if active == repl_active then return end
if active then
repl_active = true
insert_mode = false
define_key_bindings()
else
clear()
repl_active = false
undefine_key_bindings()
collectgarbage()
end
update()
end
mp.observe_property("user-data/osc/margins", "native", function(_, val)
if val then
global_margins = val
else
global_margins = { t = 0, b = 0 }
end
update()
end)
-- Redraw the REPL when the OSD size changes. This is needed because the
-- PlayRes of the OSD will need to be adjusted.
mp.observe_property('osd-width', 'native', update)
mp.observe_property('osd-height', 'native', update)
mp.observe_property('display-hidpi-scale', 'native', update)
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
-------------------------------END ORIGINAL MPV CODE------------------------------------
--[[
sends a response to the original script in the form of a json string
it is expected that all requests get a response, if the input is nil then err should say why
current error codes are:
exited the user closed the input instead of pressing Enter
already_queued a request with the specified id was already in the queue
cancelled a script cancelled the request
replace replaced by another request
]]
local function send_response(res)
if res.source then
mp.commandv("script-message-to", res.source, res.response, (utils.format_json(res)))
else
mp.commandv("script-message", res.response, (utils.format_json(res)))
end
end
-- push new request onto the queue
-- if a request with the same id already exists and the queueable flag is not enabled then
-- a nil result will be returned to the function
function push_request(req)
if active_ids[req.id] then
if req.replace then
for i, q_req in ipairs(queue) do
if q_req.id == req.id then
send_response{ err = "replaced", response = q_req.response, source = q_req.source }
queue[i] = req
if i == 1 then request = req end
end
end
update()
return
end
if not req.queueable then
send_response{ err = "already_queued", response = req.response, source = req.source }
return
end
end
table.insert(queue, req)
active_ids[req.id] = (active_ids[req.id] or 0) + 1
if #queue == 1 then coroutine.resume(co) end
update()
end
-- safely removes an item from the queue and updates the set of active requests
function remove_request(index)
local req = table.remove(queue, index)
active_ids[req.id] = active_ids[req.id] - 1
if active_ids[req.id] == 0 then active_ids[req.id] = nil end
return req
end
--an infinite loop that moves through the request queue
--uses a coroutine to handle asynchronous operations
local function driver()
while (true) do
while queue[1] do
request = queue[1]
line = request.default_input
cursor = request.cursor_pos
if repl_active then update()
else set_active(true) end
res = coroutine.yield()
if res then
res.source, res.response = request.source, request.response
send_response(res)
remove_request(1)
end
end
set_active(false)
coroutine.yield()
end
end
co = coroutine.create(driver)
--cancels any input request that returns true for the given predicate function
local function cancel_input_request(pred)
for i = #queue, 1, -1 do
if pred(i) then
req = remove_request(i)
send_response{ err = "cancelled", response = req.response, source = req.source }
--if we're removing the first item then that means the coroutine is waiting for a response
--we will need to tell the coroutine to resume, upon which it will move to the next request
--if there is something in the buffer then save it to the history before erasing it
if i == 1 then
local old_line = line
if old_line ~= "" then table.insert(histories[req.id].list, old_line) end
clear()
coroutine.resume(co)
end
end
end
end
mp.register_script_message("cancel-user-input/uid", function(uid)
cancel_input_request(function(i) return queue[i].response == uid end)
end)
-- removes all requests with the specified id from the queue
mp.register_script_message("cancel-user-input/id", function(id)
cancel_input_request(function(i) return queue[i].id == id end)
end)
-- ensures a request has the correct fields and is correctly formatted
local function format_request_fields(req)
assert(req.version, "input requests require an API version string")
if not string.find(req.version, API_MAJOR_MINOR, 1, true) then
error(("input request has invalid version: expected %s.x, got %s"):format(API_MAJOR_MINOR, req.version))
end
assert(req.response, "input requests require a response string")
assert(req.id, "input requests require an id string")
req.text = ass_escape(req.request_text or "")
req.default_input = req.default_input or ""
req.cursor_pos = tonumber(req.cursor_pos) or 1
req.id = req.id or "mpv"
if req.cursor_pos ~= 1 then
if req.cursor_pos < 1 then req.cursor_pos = 1
elseif req.cursor_pos > #req.default_input then req.cursor_pos = #req.default_input + 1 end
end
if not histories[req.id] then histories[req.id] = {pos = 1, list = {}} end
req.history = histories[req.id]
return req
end
-- updates the fields of a specific request
mp.register_script_message("update-user-input/uid", function(uid, req_opts)
req_opts = utils.parse_json(req_opts)
req_opts.response = uid
for i, req in ipairs(queue) do
if req.response == uid then
local success, result = pcall(format_request_fields, req_opts)
if not success then return msg.error(result) end
queue[i] = result
if i == 1 then request = queue[1] end
update()
return
end
end
end)
--the function that parses the input requests
local function input_request(req)
req = format_request_fields(req)
push_request(req)
end
-- script message to recieve input requests, get-user-input.lua acts as an interface to call this script message
mp.register_script_message("request-user-input", function(req)
msg.debug(req)
req = utils.parse_json(req)
local success, err = pcall(input_request, req)
if not success then
send_response{ err = err, response = req.response, source = req.source}
msg.error(err)
end
end)

2734
.config/mpv/scripts/webm.lua Normal file

File diff suppressed because it is too large Load diff

View file

@ -672,4 +672,3 @@ may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.

View file

@ -0,0 +1,74 @@
* About
This plugin allows mpv to stream magnet links (and any other torrent identifier [[https://github.com/webtorrent/webtorrent-cli][webtorrent-cli]] handles) directly. It will automatically remove videos after they are finished playing (by default) and will set the title to be the name of the video.
This script will detect =magnet:= links, torrent files/urls ending in =torrent=, and info hashes. You can also explicitly prefix the identifier with =webtorrent://= to let this plugin know the path/url is a torrent (e.g. you could do this to play a torrent file that didn't end in =torrent=)
* Comparison with using ~webtorrent --mpv~
One benefit is consistency of syntax (e.g. if you have a shell command or keybinding to call ~mpv <clipboard>~, you don't need to handle torrents differently).
This script also provides more functionality and options. For example, it can automatically delete downloaded files, and it can remember and jump to the last video you played in a torrent file with multiple videos. See the settings heading below for more information.
Another reason you might want to use this script is that you can start mpv with a playlist of multiple magnet links or add magnet links to the playlist of an already open mpv window (e.g. using one of the scripts that allow appending a link from the clipboard to the playlist such as [[https://github.com/Eisa01/mpv-scripts#smartcopypaste-ii-script][SmartCopyPaste-II]]).
By using this script, you can also see mpv output (which is hidden when calling ~webtorrent~ directly). On the other hand, you won't be able to see both the normal ~webtorrent~ output and mpv's output at the same time. By default, this script will print the download speed while waiting for the video to load (see the information on the =webtorrent_verbosity= setting below for more options).
* Requirements
- [[https://github.com/webtorrent/webtorrent-cli][webtorrent-cli]]
- on linux (or maybe similar)
- basic shell utilities (bash, awk, grep, nohup, tail)
- [[https://github.com/stedolan/jq][jq]]
- [[https://github.com/benibela/xidel][xidel]]
Webtorrent-cli does not currently provide a way to get a json list of files which is why jq and xidel are required.
* Installation Instructions
Clone this repo into the mpv scripts directory (e.g. =git clone <url> ~/.config/mpv/scripts/webtorrent-hook=). You must put this whole directory in the scripts directory not just the lua file.
* Comparison with Peerflix-hook
Peerflix is unmaintained, and webtorrent is supposedly significantly faster.
Peerflix's output is not parseable, so the peerflix version of this script had to do a bunch of extra work with ~lsof~ to figure out the location of video files, the title of video files, and the process id of peerflix (in order to kill it). This script is a lot cleaner by comparison (though it could be better if webtorrent had a way to give [[https://github.com/webtorrent/webtorrent-cli/issues/132][more script-friendly output]]).
This script also has a lot more functionality than the peerflix version (e.g support for torrents containing multiple media files).
* Comparison With Btfs-stream
Webtorrent has parseable output but is still not very script friendly. [[https://github.com/noctuid/mpv-btfs-stream][mpv-btfs-stream]] is cleaner and simpler by comparison and does not rely on parsing output. The advantage of webtorrent over btfs is that webtorrent is much faster. Functionally, I am not aware of any downsides of using webtorrent-hook instead of btfs-stream though. See [[https://github.com/noctuid/mpv-btfs-hook#comparison-with-mpv-webtorrent-hook][here]] for a full comparison.
* Comparison with webtorrent-mpv-hook
There is a similarly named plugin [[https://github.com/mrxdst/webtorrent-mpv-hook][webtorrent-mpv-hook]] which directly uses the webtorrent library instead of webtorrent-cli.
Here are advantages of the other plugin:
- it directly uses the webtorrent library, which simplifies how the code works somewhat
- it has a much prettier speed/progress display while you are waiting for the torrent to start
Here are missing features of the other plugin:
- it has no option to delete files after exiting mpv
- it has no option to continue seeding after exiting mpv
- it does not remember the last file played for previously played torrents (it will always start at the first file)
- it does not work correctly with scripts that allow pasting a path/url into the playlist (it only supports one webtorrent instance; this plugin supports an arbitrary number of webtorrent-cli instances)
* Configuration
In =~/.config/mpv/script-opts/webtorrent-hook.conf=, you can change the following settings:
- =close_webtorrent= - whether to close webtorrent after unloading the video; if =no=, keep seeding (default: =yes=)
- =remove_files= - whether to remove the video file from disk after unloading; =yes= only has an effect if =close_webtorrent= is also =yes= (default: =yes=)
- =download_directory= - directory to download videos to; the script will run mpv's =expand-path= command on the string first so that mpv path abbreviations such as =~/= and =~~/= can be used (default: =/tmp/webtorrent-hook=)
- =webtorrent_flags= - json array of extra flags to pass to webtorrent (default: []; flags always used: =webtorrent --port 0 --out <download_directory> --keep-streaming=; keep-streaming is always passed, and =close_webtorrent= determines whether or not to stop webtorrent)
- =show_speed= - whether to continuously output webtorrent-cli's download speed line; the output stops once the video is loaded to prevent clobbering mpv's output (default: =yes=)
- =remember_last_played= - whether to store the last played video in a title and start at it in the future (default: =yes=)
- =remember_directory= - directory to store last played information in; make this something outside of =/tmp= if you want it to be remembered after computer reboot (default: =/tmp/webtorrent-hook-last-played=)
If you set =close_webtorrent= to =no=, you will have to manually kill the =WebTorrent= processes yourself when you want to stop seeding (~pgrep WebTorrent~ should show all processes).
Here is an example configuration file:
#+begin_src conf-unix
close_webtorrent=yes
remove_files=yes
# change download directory
download_directory=~/tmp/webtorrent-hook
# do not use --out, --keep-streaming, --port or most other flags (should be
# obvious; don't use --quiet, --mpv, etc.)
webtorrent_flags=["--blocklist", "<blocklist url>"]
show_speed=no
remember_last_played=yes
remember_directory=~/tmp/webtorrent-remember
#+end_src

View file

@ -0,0 +1,249 @@
-- TODO start webtorrent instance immediately when pasting into playlist instead
-- of waiting for load?
-- TODO what happens with --prefetch-playlist?
local settings = {
close_webtorrent = true,
remove_files = true,
download_directory = "/tmp/webtorrent-hook",
webtorrent_flags = [[]],
show_speed = true,
remember_last_played = true,
remember_directory = "/tmp/webtorrent-hook-last-played"
}
(require "mp.options").read_options(settings, "webtorrent-hook")
local utils = require "mp.utils";
local webtorrent_instances = {}
local webtorrent_files = {}
local script_dir = mp.get_script_directory()
local printer_pid = nil
-- * Helpers
-- http://lua-users.org/wiki/StringRecipes
function ends_with(str, ending)
return ending == "" or str:sub(-#ending) == ending
end
function read_file(file)
local fh = assert(io.open(file, "rb"))
local contents = fh:read("*all")
fh:close()
return contents
end
function write_file(file, text)
local fh = io.open(file, "w")
fh:write(text)
fh:close()
end
function is_handled_url(url, load_failed)
if load_failed then
-- info hash
return (load_failed and string.match(url, "%w+"))
else
return (url:find("magnet:") == 1 or url:find("peerflix://") == 1
or url:find("webtorrent://") == 1 or ends_with(url, "torrent"))
end
end
function load_file_after_current(url, option_table, num_entries)
mp.command_native({
"loadfile", url, "append", -1, option_table
})
local index = mp.get_property("playlist-pos")
mp.command_native({
"playlist-move",
mp.get_property("playlist-count") - 1,
index + 1 + num_entries
})
end
-- * Store Last Played Files
function file_info_hash(filename)
return webtorrent_files[filename]
end
function get_remember_file_path(info_hash)
return utils.join_path(settings.remember_directory, info_hash)
end
function maybe_store_last_played_torrent_file(_)
if settings.remember_last_played then
mp.commandv("run", "mkdir", "-p", settings.remember_directory)
local filename = mp.get_property("media-title")
local info_hash = file_info_hash(filename)
if info_hash ~= nil then
local remember_file = get_remember_file_path(info_hash)
write_file(remember_file, filename)
end
end
end
mp.register_event("file-loaded", maybe_store_last_played_torrent_file)
function get_last_played_filename_for_torrent(info_hash)
local remember_file = get_remember_file_path(info_hash)
if utils.file_info(remember_file) then
return read_file(remember_file)
end
end
-- * Play Torrents
function load_webtorrent_files(info_hash, webtorrent_info)
local first = true
local found_last_played = false
local last_played_filename = ""
if settings.remember_last_played then
last_played_filename = get_last_played_filename_for_torrent(info_hash)
end
local should_remember = settings.remember_last_played
and last_played_filename
local file_index = 0
local file_play_index = 0
for _, file in pairs(webtorrent_info["files"]) do
local title = file["title"]
webtorrent_files[title] = info_hash
local option_table = {}
-- TODO is it actually necessary to set force-media-title for sub
-- plugins? it seems to be correctly set by default for what I've
-- tried
option_table["force-media-title"] = title
local url = file["url"]
if first then
load_file_after_current(url, option_table, 0)
mp.command_native({"playlist-remove", mp.get_property("playlist-pos")})
else
load_file_after_current(url, option_table,
file_index - (file_play_index + 1))
if should_remember and not found_last_played then
file_play_index = file_play_index + 1
mp.set_property("playlist-pos", mp.get_property("playlist-pos") + 1)
if title == last_played_filename then
found_last_played = true
end
end
end
file_index = file_index + 1
first = false
end
end
function maybe_kill_printer()
if printer_pid then
mp.commandv("run", "kill", printer_pid)
printer_pid = nil
end
end
mp.register_event("file-loaded", maybe_kill_printer)
function start_speed_printer(out_dir)
if utils.file_info(utils.join_path(out_dir, "webtorrent-output")) then
local speed_printer_path =
utils.join_path(script_dir, "webtorrent-speed-printer.sh")
os.execute(speed_printer_path .. ' "' .. out_dir .. '"')
printer_pid = read_file(utils.join_path(out_dir, "printer.pid"))
end
end
function start_webtorrent(url, torrent_info)
local base_dir = mp.command_native({
"expand-path", settings.download_directory
})
local info_hash = torrent_info["infoHash"]
local out_dir = utils.join_path(base_dir, info_hash)
local wrapper_path =
utils.join_path(script_dir, "webtorrent-wrap.sh")
local webtorrent_args = {wrapper_path, out_dir, url}
local flags = utils.parse_json(settings.webtorrent_flags)
if flags ~= nil then
for _, flag in pairs(flags) do
table.insert(webtorrent_args, flag)
end
end
mp.msg.info("Waiting for webtorrent server")
local webtorrent_result = mp.command_native({
name = "subprocess",
playback_only = false,
capture_stdout = true,
args = webtorrent_args
})
if webtorrent_result.status == 0 then
mp.msg.info("Webtorrent server is up")
local webtorrent_info = utils.parse_json(webtorrent_result.stdout)
local pid = webtorrent_info["pid"]
mp.msg.debug(webtorrent_info)
local name = "Unknown name"
if torrent_info["name"] ~= nil then
name = torrent_info["name"]
end
table.insert(webtorrent_instances,
{download_dir=out_dir,pid=pid,name=name})
if settings.show_speed then
start_speed_printer(out_dir)
end
load_webtorrent_files(info_hash, webtorrent_info)
else
mp.msg.info("Failed to start webtorrent")
end
end
-- check if the url is a torrent and play it if it is
function maybe_play_torrent(load_failed)
local url = mp.get_property("stream-open-filename")
if is_handled_url(url, load_failed) then
if url:find("webtorrent://") == 1 then
url = url:sub(14)
end
if url:find("peerflix://") == 1 then
url = url:sub(12)
end
local torrent_info_command = mp.command_native({
name = "subprocess",
playback_only = false,
capture_stdout = true,
args = {"webtorrent", "info", url},
})
if torrent_info_command.status == 0 then
local torrent_info = utils.parse_json(torrent_info_command.stdout)
local info_hash = torrent_info["infoHash"]
if info_hash ~= nil then
start_webtorrent(url, torrent_info)
end
end
end
end
function check_if_torrent_on_load()
maybe_play_torrent(false)
end
function check_if_torrent_on_load_fail()
maybe_play_torrent(true)
end
function webtorrent_cleanup()
if settings.close_webtorrent then
for _, instance in pairs(webtorrent_instances) do
mp.msg.verbose("Killing WebTorrent pid " .. instance.pid)
mp.commandv("run", "kill", instance.pid)
if settings.remove_files then
mp.msg.verbose("Removing files for torrent " .. instance.name)
mp.commandv("run", "rm", "-r", instance.download_dir)
end
end
end
end
mp.add_hook("on_load", 50, check_if_torrent_on_load)
mp.add_hook("on_load_fail", 50, check_if_torrent_on_load_fail)
mp.register_event("shutdown", webtorrent_cleanup)

View file

@ -0,0 +1,9 @@
#!/usr/bin/env bash
out_dir=$1
output_file="$out_dir"/webtorrent-output
printer_pid_file="$out_dir"/printer.pid
tail -f "$output_file" \
| awk '/Speed:/ { printf ("\r%s%s%s", "\033[1;31m", $0, "\033[0m "); }' \
>&2 &
echo -n $! > "$printer_pid_file"

View file

@ -0,0 +1,46 @@
#!/usr/bin/env bash
out_dir=$1
shift
mkdir -p "$out_dir"
# using file over pipe so multiple processes can read from it and because >(tee
# "$pipe" "$second-pipe-or file") ends up blocking mpv
webtorrent_output_file="$out_dir"/webtorrent-output
nohup webtorrent download "$@" --port 0 --out "$out_dir" --keep-seeding \
&> "$webtorrent_output_file" &
pid=$!
cleanup() {
if (( $? == 1 )); then
# kill webtorrent if exit with error
kill $pid
fi
}
# shellcheck disable=SC2064
trap cleanup EXIT
url=$(tail -f "$webtorrent_output_file" \
| awk '/Server running at: ?/ {gsub(/Server running at: ?/, ""); print $1; exit}')
base_url=$(echo "$url" | grep --extended-regexp --only-matching \
'http://localhost:[0-9]+')
webtorrent_hash=$(echo "$url" | grep --extended-regexp --only-matching \
'webtorrent/[0-9a-f]+')
# Get json of files
webtorrent_results=$(xidel --silent --extract "//a/@href" "$base_url/$webtorrent_hash" |
jq --null-input --raw-input "
{
pid: $pid,
files: [inputs | select(length>0)] | map({title: . | sub(\"/$webtorrent_hash/\"; \"\"), url: (\"$base_url\" + .)})
}
")
# Uncomment for debugging info
# echo "$webtorrent_results" > ~/webtorrent-wrap.log
# echo "URL - $url" >> ~/webtorrent-wrap.log
# echo "WEBTORRENT_HASH - $webtorrent_hash" >> ~/webtorrent-wrap.log
# echo "BASE_URL - $base_url" >> ~/webtorrent-wrap.log
# Print results
echo "$webtorrent_results"

View file

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

View file

@ -1,5 +1,16 @@
vim.keymap.set({ "n", "x" }, "]#", [[/^#\+ .*<CR>]], { desc = "Next Heading", buffer = true })
vim.keymap.set({ "n", "x" }, "[#", [[?^#\+ .*<CR>]], { desc = "Prev Heading", buffer = true })
vim.keymap.set({ "n", "x" }, "gj", [[/^#\+ .*<CR>]], { desc = "Next Heading", buffer = true })
vim.keymap.set({ "n", "x" }, "gk", [[?^#\+ .*<CR>]], { desc = "Prev Heading", buffer = true })
-- Bold selected text
vim.keymap.set("n", "<C-b>", function()
vim.cmd("normal viw")
vim.cmd("normal 2gsa*")
end, { desc = "Bold Selection" })
vim.keymap.set("v", "<C-b>", function()
vim.cmd("normal 2gsa*")
end, { desc = "Bold Selection" })
-- stylua: ignore start
if LazyVim.has("markdowny.nvim") then

View file

@ -1,46 +1,59 @@
{
"LazyVim": { "branch": "main", "commit": "3f034d0a7f58031123300309f2efd3bb0356ee21" },
"SchemaStore.nvim": { "branch": "main", "commit": "442901b78dca4da1078b32e25e1afb32460e0082" },
"LazyVim": { "branch": "main", "commit": "25abbf546d564dc484cf903804661ba12de45507" },
"SchemaStore.nvim": { "branch": "main", "commit": "a28cc71857f11a7370d81f5ba3c1f5bb8383b732" },
"autolist.nvim": { "branch": "main", "commit": "5f70a5f99e96c8fe3069de042abd2a8ed2deb855" },
"blink.cmp": { "branch": "main", "commit": "cb5e346d9e0efa7a3eee7fd4da0b690c48d2a98e" },
"blink.cmp": { "branch": "main", "commit": "bae4bae0eedd1fa55f34b685862e94a222d5c6f8" },
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
"catppuccin": { "branch": "main", "commit": "5b5e3aef9ad7af84f463d17b5479f06b87d5c429" },
"conform.nvim": { "branch": "master", "commit": "372fc521f8421b7830ea6db4d6ea3bae1c77548c" },
"dial.nvim": { "branch": "master", "commit": "2c7e2750372918f072a20f3cf754d845e143d7c9" },
"catppuccin": { "branch": "main", "commit": "3aaf3ab60221bca8edb1354e41bd514a22c89de2" },
"conform.nvim": { "branch": "master", "commit": "973f3cb73887d510321653044791d7937c7ec0fa" },
"dial.nvim": { "branch": "master", "commit": "78bd73aaf2b9c8f80715a878feaf56f7ffa8b6ff" },
"diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" },
"edgy.nvim": { "branch": "main", "commit": "7e8dedc39abebe40c289b8012cc89b11c69aa7a0" },
"flash.nvim": { "branch": "main", "commit": "3c942666f115e2811e959eabbdd361a025db8b63" },
"friendly-snippets": { "branch": "main", "commit": "fc8f183479a472df60aa86f00e295462f2308178" },
"gitsigns.nvim": { "branch": "main", "commit": "9cd665f46ab7af2e49d140d328b8e72ea1cf511b" },
"friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
"gitsigns.nvim": { "branch": "main", "commit": "6e3c66548035e50db7bd8e360a29aec6620c3641" },
"grapple.nvim": { "branch": "main", "commit": "b41ddfc1c39f87f3d1799b99c2f0f1daa524c5f7" },
"grug-far.nvim": { "branch": "main", "commit": "631331f9c6611b1a47e887f50b92b7cf450f51e7" },
"grug-far.nvim": { "branch": "main", "commit": "385d1949dc21d0c39e7a74b4f4a25da18817bc86" },
"kulala.nvim": { "branch": "main", "commit": "65d102f65cfee9f338ba8a0bd43187a7cac898e9" },
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
"lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" },
"lualine.nvim": { "branch": "master", "commit": "15884cee63a8c205334ab13ab1c891cd4d27101a" },
"lualine.nvim": { "branch": "master", "commit": "b8c23159c0161f4b89196f74ee3a6d02cdc3a955" },
"markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" },
"mason-nvim-dap.nvim": { "branch": "main", "commit": "86389a3dd687cfaa647b6f44731e492970034baa" },
"mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" },
"mini.ai": { "branch": "main", "commit": "e139eb1101beb0250fea322f8c07a42f0f175688" },
"mini.icons": { "branch": "main", "commit": "397ed3807e96b59709ef3292f0a3e253d5c1dc0a" },
"mini.pairs": { "branch": "main", "commit": "69864a2efb36c030877421634487fd90db1e4298" },
"mini.surround": { "branch": "main", "commit": "5aab42fcdcf31fa010f012771eda5631c077840a" },
"mini.ai": { "branch": "main", "commit": "1cd4f021a05c29acd4ab511c0981da14217daf38" },
"mini.icons": { "branch": "main", "commit": "b8f6fa6f5a3fd0c56936252edcd691184e5aac0c" },
"mini.pairs": { "branch": "main", "commit": "1e1ca3f60f58d4050bf814902b472eec9963a5dd" },
"mini.surround": { "branch": "main", "commit": "7a8606333affe7ce637a0ba91bbafc46fc42bfa0" },
"neo-tree.nvim": { "branch": "main", "commit": "8c6349bceb1d8a863964dd25dc7944d588a56aaa" },
"neotest": { "branch": "master", "commit": "ce178308ea30f96667f1c11f022880d8c04cafd3" },
"neotest-jest": { "branch": "main", "commit": "46ccc50273838f0b48e3c4814c1c46c0ccfe9edf" },
"neotest-mocha": { "branch": "main", "commit": "8239023d299a692784176f202f6a4a5e0a698ad2" },
"neotest-python": { "branch": "master", "commit": "ed9b4d794b89044cc32e5476e637936331473c6e" },
"neotest-vitest": { "branch": "main", "commit": "a6099e1fb55a2c2851da3dd0f4d510af9a234c92" },
"noice.nvim": { "branch": "main", "commit": "0427460c2d7f673ad60eb02b35f5e9926cf67c59" },
"nui.nvim": { "branch": "main", "commit": "8d5b0b568517935d3c84f257f272ef004d9f5a59" },
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
"nvim-dap": { "branch": "master", "commit": "a479e25ed5b5d331fb46ee4b9e160ff02ac64310" },
"nvim-dap-python": { "branch": "master", "commit": "261ce649d05bc455a29f9636dc03f8cdaa7e0e2c" },
"nvim-dap-ui": { "branch": "master", "commit": "cf91d5e2d07c72903d052f5207511bf7ecdb7122" },
"nvim-dap-view": { "branch": "main", "commit": "c0611ef470515e4ec7f6ffbe57b38ea640b8573b" },
"nvim-dap-virtual-text": { "branch": "master", "commit": "fbdb48c2ed45f4a8293d0d483f7730d24467ccb6" },
"nvim-highlight-colors": { "branch": "main", "commit": "b42a5ccec7457b44e89f7ed3b3afb1b375bb2093" },
"nvim-jqx": { "branch": "master", "commit": "07393e80fa8097e82f9038fec05e948fe8a60fd1" },
"nvim-lint": { "branch": "master", "commit": "9dfb77ef6c5092a19502883c02dc5a02ec648729" },
"nvim-lspconfig": { "branch": "master", "commit": "88d0824d85c0f74a012521d25678a5b01c76feb1" },
"nvim-treesitter": { "branch": "master", "commit": "3b308861a8d7d7bfbe9be51d52e54dcfd9fe3d38" },
"nvim-treesitter-textobjects": { "branch": "master", "commit": "ed373482db797bbf71bdff37a15c7555a84dce47" },
"nvim-lint": { "branch": "master", "commit": "7ef127aaede2a4d5ad8df8321e2eb4e567f29594" },
"nvim-lspconfig": { "branch": "master", "commit": "45ff1914044de7dbd4cd85053dc09f47312a2f4d" },
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
"nvim-treesitter-context": { "branch": "master", "commit": "dca8726fea2c14e1ce6adbaa76a04816fbfaff61" },
"nvim-treesitter-textobjects": { "branch": "master", "commit": "71385f191ec06ffc60e80e6b0c9a9d5daed4824c" },
"nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" },
"nvim_context_vt": { "branch": "master", "commit": "10e13ec47a9bb341192d893e58cf91c61cde4935" },
"obsidian.nvim": { "branch": "main", "commit": "4fd01de50c7fea3616f6809f19e9be8d2dc6ce63" },
"persistence.nvim": { "branch": "main", "commit": "166a79a55bfa7a4db3e26fc031b4d92af71d0b51" },
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
"py-requirements.nvim": { "branch": "main", "commit": "22da9093a75a33a4e022b86e2d2cd2fb78cdd37d" },
"refactoring.nvim": { "branch": "master", "commit": "2be7ea3f10b7e59658f5abf6dffc50b5d61964d6" },
"render-markdown.nvim": { "branch": "main", "commit": "5eaa6c2b6bb812a096bef91070549234973966da" },
"smart-splits.nvim": { "branch": "master", "commit": "d287d643afd928400aced3c7fa712e7ef3c3f96d" },
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
"py-requirements.nvim": { "branch": "main", "commit": "62363732a45e3200f38b772f4b3c0874f85342ba" },
"refactoring.nvim": { "branch": "master", "commit": "74b608dfee827c2372250519d433cc21cb083407" },
"render-markdown.nvim": { "branch": "main", "commit": "3da7bb459f6cff03980dd1e106c46f3e62ff4d9f" },
"snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" },
"suda.vim": { "branch": "master", "commit": "9adda7d195222d4e2854efb2a88005a120296c47" },
"todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" },
@ -48,10 +61,10 @@
"trouble.nvim": { "branch": "main", "commit": "85bedb7eb7fa331a2ccbecb9202d8abba64d37b3" },
"ts-comments.nvim": { "branch": "main", "commit": "1bd9d0ba1d8b336c3db50692ffd0955fe1bb9f0c" },
"ts-error-translator.nvim": { "branch": "main", "commit": "47e5ba89f71b9e6c72eaaaaa519dd59bd6897df4" },
"ts-node-action": { "branch": "master", "commit": "bfaa787cc85d753af3c19245b4142ed727a534b5" },
"tsc.nvim": { "branch": "main", "commit": "5bd25bb5c399b6dc5c00392ade6ac6198534b53a" },
"vim-wakatime": { "branch": "master", "commit": "e46d7c4f98ee0f40782008dd60cb2a79c377fb1d" },
"ts-node-action": { "branch": "master", "commit": "b0850ecd82a508ad846ba250ea13485b0e13321e" },
"tsc.nvim": { "branch": "main", "commit": "8c1b4ec6a48d038a79ced8674cb15e7db6dd8ef0" },
"vim-wakatime": { "branch": "master", "commit": "3403495670f0ee08887401a28f8430dc4ac67429" },
"which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" },
"yanky.nvim": { "branch": "main", "commit": "04775cc6e10ef038c397c407bc17f00a2f52b378" },
"yazi.nvim": { "branch": "main", "commit": "312bef6c94c5593f41650d8b1b4da921d0363a6e" }
"yazi.nvim": { "branch": "main", "commit": "74460dc4533bde424983702f1257df420455eebe" }
}

View file

@ -3,34 +3,40 @@
"lazyvim.plugins.extras.coding.mini-surround",
"lazyvim.plugins.extras.editor.dial",
"lazyvim.plugins.extras.editor.refactoring",
"lazyvim.plugins.extras.formatting.prettier",
"lazyvim.plugins.extras.test.core",
"lazyvim.plugins.extras.ui.treesitter-context",
"lazyvim.plugins.extras.util.dot",
"plugins.extras.coding.blink-extended",
"plugins.extras.coding.treesitter.node-action",
"plugins.extras.coding.yanky-extended",
"plugins.extras.dap.core-extended",
"plugins.extras.editor.docs.obsidian",
"plugins.extras.editor.flash-extended",
"plugins.extras.editor.git.diffview",
"plugins.extras.editor.gitsigns-extended",
"plugins.extras.editor.marks.grapple",
"plugins.extras.editor.suda",
"plugins.extras.editor.trouble-extended",
"plugins.extras.formatting.prettier-extended",
"plugins.extras.lang.docker-extended",
"plugins.extras.lang.fish",
"plugins.extras.lang.markdown-extended",
"plugins.extras.lang.python-extended",
"plugins.extras.lang.web.html-css",
"plugins.extras.lang.web.typescript-extended",
"plugins.extras.lang.web.vue-3-extended",
"plugins.extras.linting.eslint-extended",
"plugins.extras.lsp.lspconfig-extended",
"plugins.extras.lsp.mason-extended",
"plugins.extras.ui.bufferline-extended",
"plugins.extras.ui.colorschemes.catppuccin",
"plugins.extras.ui.context",
"plugins.extras.ui.edgy-extended",
"plugins.extras.ui.highlight-colors",
"plugins.extras.ui.lualine-extended",
"plugins.extras.ui.noice-extended",
"plugins.extras.ui.which-key-extended",
"plugins.extras.util.persistence-extended",
"plugins.extras.util.smart-splits",
"plugins.extras.util.rest-extended",
"plugins.extras.util.snacks-extended",
"plugins.extras.util.wakatime",
"plugins.extras.util.yazi"

View file

@ -1,13 +1,13 @@
local ac = vim.api.nvim_create_autocmd
local ag = vim.api.nvim_create_augroup
-- Disable diagnostics in a .env file
ac("BufRead", {
pattern = ".env",
callback = function()
vim.diagnostic.disable(false)
end,
})
-- -- Disable diagnostics in a .env file
-- ac("BufRead", {
-- pattern = ".env",
-- callback = function()
-- vim.diagnostic.disable(false)
-- end,
-- })
local auto_close_filetype = {
"lazy",
@ -70,14 +70,14 @@ ac("BufEnter", {
end,
})
-- Disable eslint on node_modules
ac({ "BufNewFile", "BufRead" }, {
group = ag("DisableEslintOnNodeModules", { clear = true }),
pattern = { "**/node_modules/**", "node_modules", "/node_modules/*" },
callback = function()
vim.diagnostic.disable(false)
end,
})
-- -- Disable eslint on node_modules
-- ac({ "BufNewFile", "BufRead" }, {
-- group = ag("DisableEslintOnNodeModules", { clear = true }),
-- pattern = { "**/node_modules/**", "node_modules", "/node_modules/*" },
-- callback = function()
-- vim.diagnostic.disable(false)
-- end,
-- })
-- Toggle between relative/absolute line numbers
local numbertoggle = ag("numbertoggle", { clear = true })
@ -113,15 +113,3 @@ ac("BufWritePre", {
vim.fn.mkdir(vim.fn.fnamemodify(file, ":p:h"), "p")
end,
})
-- Toggle lazygit instead of closing
ac("TermOpen", {
pattern = "*",
callback = function()
local term_title = vim.b.term_title
if term_title and term_title:match("lazygit") then
-- Create lazygit specific mappings
vim.keymap.set("t", "q", "<cmd>close<cr>", { buffer = true })
end
end,
})

View file

@ -32,7 +32,7 @@ map("n", "<", "<<", { desc = "Deindent" })
map("n", ">", ">>", { desc = "Indent" })
-- Save without formatting
map("n", "<A-s>", "<cmd>noautocmd w<CR>", { desc = "Save Without Formatting" })
map({ "n", "i" }, "<A-s>", "<cmd>noautocmd w<CR>", { desc = "Save Without Formatting" })
-- Cursor navigation on insert mode
map("i", "<M-h>", "<left>", { desc = "Move Cursor Left" })
@ -89,6 +89,7 @@ end, { desc = "Tabs" })
map("n", "<leader>bf", "<cmd>bfirst<cr>", { desc = "First Buffer" })
map("n", "<leader>ba", "<cmd>blast<cr>", { desc = "Last Buffer" })
map("n", "<leader>b<tab>", "<cmd>tabnew %<cr>", { desc = "Current Buffer in New Tab" })
map("n", "<M-CR>", "<cmd>e #<cr>", { desc = "Switch to Other Buffer" })
-- Toggle statusline
map("n", "<leader>uS", function()

View file

@ -6,10 +6,12 @@ vim.loader.enable()
-- Personal Config and LazyVim global options
go.lualine_info_extras = false
go.snacks_animate = true
go.codeium_cmp_hide = false
go.lazygit_config = false
go.lazyvim_cmp = "blink"
go.lazyvim_picker = "snacks"
go.trouble_lualine = false
-- Define leader key
go.mapleader = " "
@ -21,7 +23,7 @@ go.autoformat = true
-- Font
go.gui_font_default_size = 10
go.gui_font_size = go.gui_font_default_size
go.gui_font_face = "JetBrainsMono Nerd Font"
go.gui_font_face = "Maple Mono NF"
-- Enable EditorConfig integration
go.editorconfig = true
@ -38,6 +40,9 @@ o.showcmd = false
o.laststatus = 3
o.cmdheight = 0
-- Disable native bufferline
o.showtabline = 0
-- Enable spell checking
o.spell = true
o.spelllang:append("es")
@ -52,3 +57,8 @@ if vim.fn.has("nvim-0.10") == 1 then
end
o.conceallevel = 2
-- Fix the clipboard when using WSL. Install https://github.com/equalsraf/win32yank (https://github.com/microsoft/WSL/issues/4440#issuecomment-1212350183)
if os.getenv("WSL_DISTRO_NAME") ~= nil then
o.clipboard = "unnamedplus"
end

View file

@ -37,10 +37,30 @@ return {
},
})
end,
ollama31 = function()
return require("codecompanion.adapters").extend("ollama", {
name = "ollama3.1",
schema = {
model = {
default = "ollama3.1:latest",
},
},
})
end,
qwen3 = function()
return require("codecompanion.adapters").extend("ollama", {
name = "qwen3",
schema = {
model = {
default = "qwen3:14b",
},
},
})
end,
},
strategies = {
chat = {
adapter = "deepseek_r1",
adapter = "qwen3",
roles = {
llm = " CodeCompanion",
user = "" .. user:sub(1, 1):upper() .. user:sub(2),
@ -50,7 +70,7 @@ return {
stop = { modes = { n = "<C-c>" } },
},
},
inline = { adapter = "deepseek_r1" },
inline = { adapter = "ollama31" },
agent = { adapter = "deepseek_r1" },
},
display = {
@ -88,4 +108,14 @@ return {
})
end,
},
{
"saghen/blink.cmp",
opts = {
sources = {
per_filetype = {
codecompanion = { "codecompanion" },
},
},
},
},
}

View file

@ -4,11 +4,13 @@ return {
keymap = {
["<C-k>"] = { "select_prev", "fallback" },
["<C-j>"] = { "select_next", "fallback" },
["<C-u>"] = { "scroll_documentation_up", "fallback" },
["<C-d>"] = { "scroll_documentation_down", "fallback" },
},
completion = {
menu = {
border = "rounded",
winhighlight = "Normal:BlinkCmpDoc,FloatBorder:BlinkCmpDocBorder,CursorLine:BlinkCmpDocCursorLine,Search:None",
scrollbar = true,
},
documentation = {
window = {

View file

@ -34,7 +34,11 @@ return {
{
"<leader>sy",
function()
vim.cmd([[YankyRingHistory]])
if LazyVim.pick.picker.name == "snacks" then
Snacks.picker.yanky()
else
vim.cmd([[YankyRingHistory]])
end
end,
mode = { "n", "v" },
desc = "Yank History",

View file

@ -1,19 +1,35 @@
local prefix = "<leader>d"
return {
{ import = "lazyvim.plugins.extras.dap.core" },
{
"mfussenegger/nvim-dap",
opts = {
defaults = {
fallback = {
external_terminal = {
command = "/usr/bin/kitty",
args = { "--class", "kitty-dap", "--hold", "--detach", "nvim-dap", "-c", "DAP" },
},
},
dependencies = {
"igorlfs/nvim-dap-view",
opts = {},
config = function(_, opts)
local dap = require("dap")
dap.listeners.before.attach.dapui_config = function()
vim.cmd("DapViewOpen")
end
dap.listeners.before.launch.dapui_config = function()
vim.cmd("DapViewOpen")
end
dap.listeners.before.event_terminated.dapui_config = function()
vim.cmd("DapViewClose")
end
dap.listeners.before.event_exited.dapui_config = function()
vim.cmd("DapViewClose")
end
end,
keys = {
{ prefix .. "u", "<cmd>DapViewToggle<cr>", desc = "Dap UI" },
},
},
-- stylua: ignore
keys = {
{ prefix .. "O", function() require("dap").step_out() end, desc = "Debug: Step out" },
{ prefix .. "o", function() require("dap").step_over() end, desc = "Debug: Step over" },
{ "<F5>", function() require("dap").continue() end, desc = "Debug: Continue" },
{ "<F10>", function() require("dap").step_over() end, desc = "Debug: Step over" },
{ "<F11>", function() require("dap").step_into() end, desc = "Debug: Step into" },
@ -22,12 +38,16 @@ return {
{ "<S-F2>", function() require("dap").set_breakpoint(vim.fn.input('Breakpoint condition: ')) end, desc = "Breakpoint Condition" },
},
},
{
"rcarriga/nvim-dap-ui",
enabled = false,
},
{
"nvim-neotest/neotest",
optional = true,
-- stylua: ignore
keys = {
{ "<leader>tL", function() require("neotest").run.run_last({ strategy = "dap" }) end, desc = "Debug Last Test" },
{ "<leader>tD", function() require("neotest").run.run_last({ strategy = "dap" }) end, desc = "Debug Last" },
},
},
}

View file

@ -11,8 +11,8 @@ return {
opts = {
save_path = (os.getenv("HOME") .. "/pictures/screenshots/code"),
title = "CodeSnap.nvim",
code_font_family = "JetBrainsMono Nerd Font",
watermark_font_family = "JetBrainsMono Nerd Font",
code_font_family = "Maple Mono NF",
watermark_font_family = "Maple Mono NF",
watermark = "",
bg_theme = "summer",
},

View file

@ -5,24 +5,25 @@ return {
{
-- "epwalsh/obsidian.nvim",
"obsidian-nvim/obsidian.nvim", -- NOTE: Using a fork from the community
ft = "markdown",
-- ft = "markdown",
event = "BufReadPre " .. vim.fn.expand("~") .. "/documents/obsidian/**.md",
keys = {
{ prefix .. "o", "<cmd>ObsidianOpen<CR>", desc = "Open on App" },
{ prefix .. "g", "<cmd>ObsidianSearch<CR>", desc = "Grep" },
{ "<leader>sO", "<cmd>ObsidianSearch<CR>", desc = "Obsidian Grep" },
{ prefix .. "n", "<cmd>ObsidianNew<CR>", desc = "New Note" },
{ prefix .. "<space>", "<cmd>ObsidianQuickSwitch<CR>", desc = "Find Files" },
{ prefix .. "b", "<cmd>ObsidianBacklinks<CR>", desc = "Backlinks" },
{ prefix .. "t", "<cmd>ObsidianTags<CR>", desc = "Tags" },
{ prefix .. "t", "<cmd>ObsidianTemplate<CR>", desc = "Template" },
{ prefix .. "l", "<cmd>ObsidianLink<CR>", mode = "v", desc = "Link" },
{ prefix .. "L", "<cmd>ObsidianLinks<CR>", desc = "Links" },
{ prefix .. "N", "<cmd>ObsidianLinkNew<CR>", mode = "v", desc = "New Link" },
{ prefix .. "e", "<cmd>ObsidianExtractNote<CR>", mode = "v", desc = "Extract Note" },
{ prefix .. "w", "<cmd>ObsidianWorkspace<CR>", desc = "Workspace" },
{ prefix .. "r", "<cmd>ObsidianRename<CR>", desc = "Rename" },
{ prefix .. "i", "<cmd>ObsidianPasteImg<CR>", desc = "Paste Image" },
{ prefix .. "d", "<cmd>ObsidianDailies<CR>", desc = "Daily Notes" },
{ prefix .. "o", "<cmd>Obsidian open<CR>", desc = "Open on App" },
{ prefix .. "g", "<cmd>Obsidian search<CR>", desc = "Grep" },
{ prefix .. "n", "<cmd>Obsidian new<CR>", desc = "New Note" },
{ prefix .. "N", "<cmd>Obsidian new_from_template<CR>", desc = "New Note (Template)" },
{ prefix .. "<space>", "<cmd>Obsidian quick_switch<CR>", desc = "Find Files" },
{ prefix .. "b", "<cmd>Obsidian backlinks<CR>", desc = "Backlinks" },
{ prefix .. "t", "<cmd>Obsidian tags<CR>", desc = "Tags" },
{ prefix .. "T", "<cmd>Obsidian template<CR>", desc = "Template" },
{ prefix .. "L", "<cmd>Obsidian link<CR>", mode = "v", desc = "Link" },
{ prefix .. "l", "<cmd>Obsidian links<CR>", desc = "Links" },
{ prefix .. "l", "<cmd>Obsidian link_new<CR>", mode = "v", desc = "New Link" },
{ prefix .. "e", "<cmd>Obsidian extract_note<CR>", mode = "v", desc = "Extract Note" },
{ prefix .. "w", "<cmd>Obsidian workspace<CR>", desc = "Workspace" },
{ prefix .. "r", "<cmd>Obsidian rename<CR>", desc = "Rename" },
{ prefix .. "i", "<cmd>Obsidian paste_img<CR>", desc = "Paste Image" },
{ prefix .. "d", "<cmd>Obsidian dailies<CR>", desc = "Daily Notes" },
},
opts = {
workspaces = {
@ -46,37 +47,65 @@ return {
blink = true,
},
create_new = false,
picker = {
name = "snacks.pick",
note_mappings = {
-- Create a new note from your query.
new = "<C-x>",
-- Insert a link to the selected note.
insert_link = "<C-l>",
},
tag_mappings = {
-- Add tag(s) to current note.
tag_note = "<C-x>",
-- Insert a tag at the current location.
insert_tag = "<C-l>",
},
},
mappings = {
["gf"] = {
action = function()
return require("obsidian").util.gf_passthrough()
end,
opts = { noremap = false, expr = true, buffer = true },
},
["<C-c>"] = {
action = function()
return require("obsidian").util.toggle_checkbox()
end,
opts = { buffer = true },
},
["<cr>"] = {
action = function()
return require("obsidian").util.smart_action()
end,
opts = { buffer = true, expr = true },
},
callbacks = {
enter_note = function(_, note)
vim.keymap.set("n", "gf", "<cmd>ObsidianFollowLink<cr>", {
buffer = note.bufnr,
expr = note.expr,
noremap = note.noremap,
desc = "File Passthrough",
})
end,
},
new_notes_location = "notes_subdir",
templates = {
subdir = "00 - Data/Plantillas",
date_format = "%Y-%m-%d-%a",
date_format = "%Y-%m-%d",
time_format = "%H:%M",
},
---@param spec { id: string, dir: obsidian.Path, title: string|? }
---@return string|obsidian.Path The full path to the new note.
note_path_func = function(spec)
return spec.title
end,
note_frontmatter_func = function(note)
if note.title then
note:add_alias(note.title)
end
local out = { aliases = note.aliases }
if note.metadata ~= nil and not vim.tbl_isempty(note.metadata) then
for k, v in pairs(note.metadata) do
out[k] = v
end
end
return out
end,
follow_url_func = function(url)
vim.fn.jobstart({ "xdg-open", url })
end,
@ -85,7 +114,57 @@ return {
img_folder = "00 - Data/Documentos",
},
image = {
resolve = function(path, src)
if require("obsidian.api").path_is_note(path) then
return require("obsidian.api").resolve_image_path(src)
end
end,
},
ui = { enable = false },
statusline = {
enabled = true,
format = "{{backlinks}} backlinks | {{words}} words",
},
},
},
{
"folke/snacks.nvim",
keys = {
{
prefix .. "k",
function()
Snacks.picker.grep({
search = "^\\s*- \\[ \\]",
regex = true,
dirs = { vim.fn.getcwd() },
finder = "grep",
format = "file",
show_empty = true,
supports_live = false,
live = false,
})
end,
desc = "Tasks (Unfinished)",
},
{
prefix .. "K",
function()
Snacks.picker.grep({
search = "^\\s*- \\[x\\]:",
regex = true,
dirs = { vim.fn.getcwd() },
finder = "grep",
format = "file",
show_empty = true,
supports_live = false,
live = false,
})
end,
desc = "Tasks (Finished)",
},
},
},
{
@ -96,4 +175,11 @@ return {
},
},
},
{
"nvim-lualine/lualine.nvim",
optional = true,
opts = function(_, opts)
table.insert(opts.sections.lualine_x, 1, "g:obsidian")
end,
},
}

View file

@ -1,4 +1,6 @@
local prefix = "<leader>gC"
local prefix_conflicts = "<leader>gc"
local prefix_diffs = "<leader>gd"
local function toggle_diffview(cmd)
if next(require("diffview.lib").views) == nil then
vim.cmd(cmd)
@ -12,9 +14,9 @@ return {
"sindrets/diffview.nvim",
-- stylua: ignore
keys = {
{ "<leader>gD", function() toggle_diffview("DiffviewFileHistory") end, desc = "Diff Repo" },
{ "<leader>gd", function() toggle_diffview("DiffviewOpen") end, desc = "Diff View" },
{ "<leader>gF", function() toggle_diffview("DiffviewFileHistory %") end, desc = "Diff Current File" },
{ prefix_diffs .. "D", function() toggle_diffview("DiffviewFileHistory") end, desc = "Diff Repo" },
{ prefix_diffs .. "d", function() toggle_diffview("DiffviewOpen") end, desc = "Diff View" },
{ prefix_diffs .. "f", function() toggle_diffview("DiffviewFileHistory %") end, desc = "Diff Current File History" },
},
opts = function(_, opts)
local actions = require("diffview.actions")
@ -33,24 +35,24 @@ return {
opts.keymaps = {
--stylua: ignore
view = {
{ "n", prefix .. "o", actions.conflict_choose("ours"), { desc = "Choose the OURS version of a conflict" } },
{ "n", prefix .. "t", actions.conflict_choose("theirs"), { desc = "Choose the THEIRS version of a conflict" } },
{ "n", prefix .. "b", actions.conflict_choose("base"), { desc = "Choose the BASE version of a conflict" } },
{ "n", prefix .. "a", actions.conflict_choose("all"), { desc = "Choose all the versions of a conflict" } },
{ "n", prefix .. "x", actions.conflict_choose("none"), { desc = "Delete the conflict region" } },
{ "n", prefix .. "O", actions.conflict_choose_all("ours"), { desc = "Choose the OURS version of a conflict for the whole file" } },
{ "n", prefix .. "T", actions.conflict_choose_all("theirs"), { desc = "Choose the THEIRS version of a conflict for the whole file" } },
{ "n", prefix .. "B", actions.conflict_choose_all("base"), { desc = "Choose the BASE version of a conflict for the whole file" } },
{ "n", prefix .. "A", actions.conflict_choose_all("all"), { desc = "Choose all the versions of a conflict for the whole file" } },
{ "n", prefix .. "X", actions.conflict_choose_all("none"), { desc = "Delete the conflict region for the whole file" } },
{ "n", prefix_conflicts .. "o", actions.conflict_choose("ours"), { desc = "Ours" } },
{ "n", prefix_conflicts .. "t", actions.conflict_choose("theirs"), { desc = "Theirs" } },
{ "n", prefix_conflicts .. "b", actions.conflict_choose("base"), { desc = "Base" } },
{ "n", prefix_conflicts .. "a", actions.conflict_choose("all"), { desc = "All" } },
{ "n", prefix_conflicts .. "d", actions.conflict_choose("none"), { desc = "Delete" } },
{ "n", prefix_conflicts .. "O", actions.conflict_choose_all("ours"), { desc = "Ours (File)" } },
{ "n", prefix_conflicts .. "T", actions.conflict_choose_all("theirs"), { desc = "Theirs (File)" } },
{ "n", prefix_conflicts .. "B", actions.conflict_choose_all("base"), { desc = "Base (File)" } },
{ "n", prefix_conflicts .. "A", actions.conflict_choose_all("all"), { desc = "All (File)" } },
{ "n", prefix_conflicts .. "D", actions.conflict_choose_all("none"), { desc = "Delete (File)" } },
},
--stylua: ignore
file_panel = {
{ "n", prefix .. "O", actions.conflict_choose_all("ours"), { desc = "Choose the OURS version of a conflict for the whole file" } },
{ "n", prefix .. "T", actions.conflict_choose_all("theirs"), { desc = "Choose the THEIRS version of a conflict for the whole file" } },
{ "n", prefix .. "B", actions.conflict_choose_all("base"), { desc = "Choose the BASE version of a conflict for the whole file" } },
{ "n", prefix .. "A", actions.conflict_choose_all("all"), { desc = "Choose all the versions of a conflict for the whole file" } },
{ "n", prefix .. "X", actions.conflict_choose_all("none"), { desc = "Delete the conflict region for the whole file" } },
{ "n", prefix_conflicts .. "O", actions.conflict_choose_all("ours"), { desc = "Ours (File)" } },
{ "n", prefix_conflicts .. "T", actions.conflict_choose_all("theirs"), { desc = "Theirs (File)" } },
{ "n", prefix_conflicts .. "B", actions.conflict_choose_all("base"), { desc = "Base (File)" } },
{ "n", prefix_conflicts .. "A", actions.conflict_choose_all("all"), { desc = "All (File)" } },
{ "n", prefix_conflicts .. "X", actions.conflict_choose_all("none"), { desc = "Delete (File)" } },
},
}
end,
@ -68,7 +70,8 @@ return {
"folke/which-key.nvim",
opts = {
spec = {
{ prefix, group = "conflicts", icon = "" },
{ prefix_conflicts, group = "conflicts", icon = "" },
{ prefix_diffs, group = "diff", icon = "" },
},
},
},

View file

@ -1,4 +1,4 @@
local prefix = "<leader>gC"
local prefix = "<leader>gc"
vim.api.nvim_create_autocmd("User", {
pattern = "GitConflictDetected",
@ -11,27 +11,19 @@ return {
{
"akinsho/git-conflict.nvim",
opts = {
default_mappings = {
ours = prefix .. "o",
theirs = prefix .. "t",
none = prefix .. "n",
both = prefix .. "b",
},
},
cmd = {
"GitConflictChooseTheirs",
"GitConflictChooseOurs",
"GitConflictChooseBoth",
"GitConflictListQf",
"GitConflictRefresh",
"GitConflictNextConflict",
"GitConflictPrevConflict",
default_mappings = false,
disable_diagnostics = true,
},
event = "VeryLazy",
keys = {
{ "]g", "<cmd>GitConflictNextConflict<cr>", desc = "Next Conflict" },
{ "[g", "<cmd>GitConflictPrevConflict<cr>", desc = "Previous Conflict" },
{ prefix .. "l", "<cmd>GitConflictListQf<cr>", desc = "List Conflicts" },
{ prefix .. "r", "<cmd>GitConflictRefresh<cr>", desc = "Refresh Conflicts" },
{ prefix .. "b", mode = { "n", "v" }, "<cmd>GitConflictChooseBoth<cr>", desc = "Both" },
{ prefix .. "o", mode = { "n", "v" }, "<cmd>GitConflictChooseOurs<cr>", desc = "Ours" },
{ prefix .. "t", mode = { "n", "v" }, "<cmd>GitConflictChooseTheirs<cr>", desc = "Theirs" },
{ prefix .. "n", mode = { "n", "v" }, "<cmd>GitConflictChooseNone<cr>", desc = "None" },
},
},
{

View file

@ -2,9 +2,7 @@ return {
{
"otavioschwanck/arrow.nvim",
event = "VeryLazy",
opts = {
show_icons = true,
},
opts = {},
-- stylua: ignore
keys = {
{ "<leader>m", function() require("arrow.ui").openMenu() end, desc = "Marks" },

View file

@ -4,7 +4,7 @@ local keys = {}
-- stylua: ignore start
for i = 1, 9 do
table.insert(keys, { prefix .. i, "<cmd>Grapple select index=" .. i .. "<CR>", desc = "File " .. i })
table.insert(keys, { "<leader>" .. i, "<cmd>Grapple select index=" .. i .. "<CR>", desc = "File " .. i })
end
table.insert(keys, { prefix .. "a", "<cmd>Grapple tag<CR>", desc = "Add Mark" })
@ -65,13 +65,6 @@ return {
table.insert(opts.config.center, 5, grapple)
end,
},
{
"nvim-lualine/lualine.nvim",
optional = true,
opts = function(_, opts)
table.insert(opts.sections.lualine_c, { require("grapple").statusline, cond = require("grapple").exists })
end,
},
{
"folke/which-key.nvim",
opts = {

View file

@ -1,46 +0,0 @@
local prettier = { "prettierd", "prettier", stop_after_first = true }
return {
{ import = "lazyvim.plugins.extras.formatting.prettier" },
{
"williamboman/mason.nvim",
opts = {
ensure_installed = {
"prettierd",
},
},
},
{
"stevearc/conform.nvim",
optional = true,
opts = {
formatters_by_ft = {
["javascript"] = prettier,
["javascriptreact"] = prettier,
["typescript"] = prettier,
["typescriptreact"] = prettier,
["vue"] = prettier,
["css"] = prettier,
["scss"] = prettier,
["less"] = prettier,
["html"] = prettier,
["json"] = prettier,
["jsonc"] = prettier,
["yaml"] = prettier,
["markdown"] = prettier,
["markdown.mdx"] = prettier,
["graphql"] = prettier,
["handlebars"] = prettier,
},
},
},
{
"luckasRanarison/nvim-devdocs",
optional = true,
opts = {
ensure_installed = {
"prettier",
},
},
},
}

View file

@ -0,0 +1,26 @@
return {
{
"nvim-treesitter/nvim-treesitter",
opts = {
ensure_installed = {
"fish",
},
},
},
{
"neovim/nvim-lspconfig",
opts = {
servers = {
fish_lsp = {},
},
},
},
{
"williamboman/mason.nvim",
opts = {
ensure_installed = {
"fish-lsp",
},
},
},
}

View file

@ -1,55 +0,0 @@
return {
{ import = "lazyvim.plugins.extras.lang.go" },
{
"williamboman/mason.nvim",
opts = {
ensure_installed = {
"golangci-lint",
},
},
},
{
"ray-x/go.nvim",
dependencies = {
"ray-x/guihua.lua",
"neovim/nvim-lspconfig",
"nvim-treesitter/nvim-treesitter",
},
opts = {},
ft = { "go", "gomod" },
build = function()
require("go.install").update_all_sync()
end,
},
{
"mfussenegger/nvim-lint",
opts = function(_, opts)
local function add_linters(tbl)
for ft, linters in pairs(tbl) do
if opts.linters_by_ft[ft] == nil then
opts.linters_by_ft[ft] = linters
else
vim.list_extend(opts.linters_by_ft[ft], linters)
end
end
end
add_linters({
["go"] = { "golangcilint" },
["gomod"] = { "golangcilint" },
["gowork"] = { "golangcilint" },
})
return opts
end,
},
{
"luckasRanarison/nvim-devdocs",
optional = true,
opts = {
ensure_installed = {
"go",
},
},
},
}

View file

@ -44,7 +44,14 @@ return {
{
"MeanderingProgrammer/render-markdown.nvim",
opts = {
preset = "lazy",
render_modes = { "n", "c", "t" },
checkbox = {
enabled = true,
},
heading = {
atx = false,
},
preset = "obsidian",
},
},
{

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