aboutsummaryrefslogtreecommitdiff
path: root/.config
diff options
context:
space:
mode:
authorsrdusr <trevorgray@srdusr.com>2025-08-30 19:22:59 +0200
committersrdusr <trevorgray@srdusr.com>2025-08-30 19:22:59 +0200
commit19120d4f9761c67d99ed1ce3da6084b83f5a49c9 (patch)
treef234cad1bdad88114a63c9702144da487024967a /.config
parent5928998af5404ae2be84c6cecc10ebf84bd3f3ed (diff)
downloaddotfiles-19120d4f9761c67d99ed1ce3da6084b83f5a49c9.tar.gz
dotfiles-19120d4f9761c67d99ed1ce3da6084b83f5a49c9.zip
Linux-specific dotfiles
Diffstat (limited to '.config')
-rw-r--r--.config/Code/User/keybindings.json274
-rw-r--r--.config/Code/User/settings.json734
-rw-r--r--.config/Code/User/snippets/snippet.code-snippets126
-rw-r--r--.config/Code/User/spellright.dict14
-rw-r--r--.config/Code/User/vsc.css408
-rw-r--r--.config/Code/User/vsc.js100
-rw-r--r--.config/X11/.Xresources307
-rw-r--r--.config/X11/.xbindkeysrc31
-rwxr-xr-x.config/X11/.xinitrc34
-rw-r--r--.config/X11/.xprofile24
-rw-r--r--.config/ags/.eslintrc.yml130
-rw-r--r--.config/ags/.gitignore6
-rw-r--r--.config/ags/assets/arrows-down.svg10
-rw-r--r--.config/ags/assets/arrows-left.svg10
-rw-r--r--.config/ags/assets/arrows-right.svg10
-rw-r--r--.config/ags/assets/arrows-up.svg10
-rw-r--r--.config/ags/assets/battery-flash-symbolic.svg4
-rw-r--r--.config/ags/assets/bomb-kill.svg36
-rw-r--r--.config/ags/assets/chat-bubbles-symbolic.svg5
-rw-r--r--.config/ags/assets/controller-symbolic.svg4
-rw-r--r--.config/ags/assets/controls-symbolic.svg5
-rw-r--r--.config/ags/assets/dark-mode-symbolic.svg4
-rw-r--r--.config/ags/assets/float.svg44
-rw-r--r--.config/ags/assets/fullscreen.svg43
-rw-r--r--.config/ags/assets/hourglass-symbolic.svg4
-rw-r--r--.config/ags/assets/light-mode-symbolic.svg4
-rw-r--r--.config/ags/assets/mixer-symbolic.svg6
-rw-r--r--.config/ags/assets/nix-snowflake-symbolic.svg155
-rw-r--r--.config/ags/assets/nixos-symbolic.svg155
-rw-r--r--.config/ags/assets/nixos.svg277
-rw-r--r--.config/ags/assets/osk.svg132
-rw-r--r--.config/ags/assets/pinned.svg36
-rw-r--r--.config/ags/assets/preferences-desktop-theme-symbolic.svg321
-rw-r--r--.config/ags/assets/processor-symbolic.svg17
-rw-r--r--.config/ags/assets/rotation.svg8
-rw-r--r--.config/ags/assets/swapnext.svg8
-rw-r--r--.config/ags/assets/tbox-close.svg49
-rw-r--r--.config/ags/assets/terminal-symbolic.svg5
-rw-r--r--.config/ags/assets/togglesplit.svg10
-rw-r--r--.config/ags/assets/toolbars-symbolic.svg4
-rw-r--r--.config/ags/assets/wp-next.svg10
-rw-r--r--.config/ags/assets/wp-prev.svg10
-rw-r--r--.config/ags/config.js46
-rw-r--r--.config/ags/default.nix104
-rw-r--r--.config/ags/greeter.js18
-rw-r--r--.config/ags/greeter/auth.ts109
-rw-r--r--.config/ags/greeter/greeter.scss64
-rw-r--r--.config/ags/greeter/greeter.ts37
-rw-r--r--.config/ags/greeter/session.ts20
-rw-r--r--.config/ags/greeter/statusbar.ts46
-rw-r--r--.config/ags/lib/battery.ts16
-rw-r--r--.config/ags/lib/client.js134
-rw-r--r--.config/ags/lib/cursorhover.js86
-rw-r--r--.config/ags/lib/gtk.ts16
-rw-r--r--.config/ags/lib/hyprland.ts80
-rw-r--r--.config/ags/lib/iconUtils.js46
-rw-r--r--.config/ags/lib/icons.ts186
-rw-r--r--.config/ags/lib/init.ts19
-rw-r--r--.config/ags/lib/matugen.ts113
-rw-r--r--.config/ags/lib/notifications.ts16
-rw-r--r--.config/ags/lib/option.ts115
-rw-r--r--.config/ags/lib/session.ts16
-rw-r--r--.config/ags/lib/tmux.ts14
-rw-r--r--.config/ags/lib/utils.ts113
-rw-r--r--.config/ags/lib/variables.ts47
-rw-r--r--.config/ags/main.ts47
-rw-r--r--.config/ags/options.ts261
-rw-r--r--.config/ags/package.json18
-rw-r--r--.config/ags/service/asusctl.ts52
-rw-r--r--.config/ags/service/brightness.ts69
-rw-r--r--.config/ags/service/colorpicker.ts56
-rw-r--r--.config/ags/service/nix.ts109
-rw-r--r--.config/ags/service/powermenu.ts43
-rw-r--r--.config/ags/service/screenrecord.ts102
-rw-r--r--.config/ags/service/wallpaper.ts127
-rw-r--r--.config/ags/service/weather.ts59
-rw-r--r--.config/ags/style/extra.scss67
-rw-r--r--.config/ags/style/mixins/a11y-button.scss48
-rw-r--r--.config/ags/style/mixins/button.scss70
-rw-r--r--.config/ags/style/mixins/floating-widget.scss12
-rw-r--r--.config/ags/style/mixins/hidden.scss15
-rw-r--r--.config/ags/style/mixins/media.scss42
-rw-r--r--.config/ags/style/mixins/scrollable.scss42
-rw-r--r--.config/ags/style/mixins/slider.scss74
-rw-r--r--.config/ags/style/mixins/spacing.scss53
-rw-r--r--.config/ags/style/mixins/switch.scss16
-rw-r--r--.config/ags/style/mixins/unset.scss9
-rw-r--r--.config/ags/style/mixins/widget.scss7
-rw-r--r--.config/ags/style/style.ts103
-rw-r--r--.config/ags/tsconfig.json19
-rw-r--r--.config/ags/widget/PopupWindow.ts156
-rw-r--r--.config/ags/widget/RegularWindow.ts3
-rw-r--r--.config/ags/widget/bar/Bar.ts57
-rw-r--r--.config/ags/widget/bar/PanelButton.ts46
-rw-r--r--.config/ags/widget/bar/ScreenCorners.ts25
-rw-r--r--.config/ags/widget/bar/bar.scss242
-rw-r--r--.config/ags/widget/bar/buttons/BatteryBar.ts94
-rw-r--r--.config/ags/widget/bar/buttons/ColorPicker.ts37
-rw-r--r--.config/ags/widget/bar/buttons/Date.ts15
-rw-r--r--.config/ags/widget/bar/buttons/Launcher.ts49
-rw-r--r--.config/ags/widget/bar/buttons/Media.ts92
-rw-r--r--.config/ags/widget/bar/buttons/Messages.ts16
-rw-r--r--.config/ags/widget/bar/buttons/PowerMenu.ts15
-rw-r--r--.config/ags/widget/bar/buttons/ScreenRecord.ts21
-rw-r--r--.config/ags/widget/bar/buttons/SysTray.ts39
-rw-r--r--.config/ags/widget/bar/buttons/SystemIndicators.ts107
-rw-r--r--.config/ags/widget/bar/buttons/Taskbar.ts90
-rw-r--r--.config/ags/widget/bar/buttons/Workspaces.ts66
-rw-r--r--.config/ags/widget/bar/screencorner.scss51
-rw-r--r--.config/ags/widget/datemenu/DateColumn.ts58
-rw-r--r--.config/ags/widget/datemenu/DateMenu.ts36
-rw-r--r--.config/ags/widget/datemenu/NotificationColumn.ts113
-rw-r--r--.config/ags/widget/datemenu/datemenu.scss110
-rw-r--r--.config/ags/widget/desktop/Desktop.ts40
-rw-r--r--.config/ags/widget/dock/Dock.ts150
-rw-r--r--.config/ags/widget/dock/FloatingDock.ts70
-rw-r--r--.config/ags/widget/dock/ToolBox.ts122
-rw-r--r--.config/ags/widget/dock/ToolBoxDock.ts57
-rw-r--r--.config/ags/widget/dock/dock.scss73
-rw-r--r--.config/ags/widget/launcher/AppLauncher.ts125
-rw-r--r--.config/ags/widget/launcher/Launcher.ts134
-rw-r--r--.config/ags/widget/launcher/NixRun.ts118
-rw-r--r--.config/ags/widget/launcher/ShRun.ts89
-rw-r--r--.config/ags/widget/launcher/launcher.scss143
-rw-r--r--.config/ags/widget/notifications/Notification.ts138
-rw-r--r--.config/ags/widget/notifications/NotificationPopups.ts90
-rw-r--r--.config/ags/widget/notifications/notifications.scss79
-rw-r--r--.config/ags/widget/osd/OSD.ts111
-rw-r--r--.config/ags/widget/osd/Progress.ts74
-rw-r--r--.config/ags/widget/osd/osd.scss26
-rw-r--r--.config/ags/widget/overview/Overview.ts41
-rw-r--r--.config/ags/widget/overview/Window.ts48
-rw-r--r--.config/ags/widget/overview/Workspace.ts76
-rw-r--r--.config/ags/widget/overview/overview.scss34
-rw-r--r--.config/ags/widget/powermenu/PowerMenu.ts56
-rw-r--r--.config/ags/widget/powermenu/Verification.ts47
-rw-r--r--.config/ags/widget/powermenu/powermenu.scss110
-rw-r--r--.config/ags/widget/quicksettings/QuickSettings.ts84
-rw-r--r--.config/ags/widget/quicksettings/ToggleButton.ts154
-rw-r--r--.config/ags/widget/quicksettings/quicksettings.scss177
-rw-r--r--.config/ags/widget/quicksettings/widgets/Bluetooth.ts61
-rw-r--r--.config/ags/widget/quicksettings/widgets/Brightness.ts23
-rw-r--r--.config/ags/widget/quicksettings/widgets/DND.ts12
-rw-r--r--.config/ags/widget/quicksettings/widgets/DarkMode.ts12
-rw-r--r--.config/ags/widget/quicksettings/widgets/Header.ts69
-rw-r--r--.config/ags/widget/quicksettings/widgets/Media.ts153
-rw-r--r--.config/ags/widget/quicksettings/widgets/MicMute.ts18
-rw-r--r--.config/ags/widget/quicksettings/widgets/Network.ts61
-rw-r--r--.config/ags/widget/quicksettings/widgets/PowerProfile.ts99
-rw-r--r--.config/ags/widget/quicksettings/widgets/Volume.ts161
-rw-r--r--.config/ags/widget/settings/Group.ts34
-rw-r--r--.config/ags/widget/settings/Page.ts19
-rw-r--r--.config/ags/widget/settings/Row.ts55
-rw-r--r--.config/ags/widget/settings/Setter.ts93
-rw-r--r--.config/ags/widget/settings/SettingsDialog.ts63
-rw-r--r--.config/ags/widget/settings/Wallpaper.ts31
-rw-r--r--.config/ags/widget/settings/layout.ts147
-rw-r--r--.config/ags/widget/settings/settingsdialog.scss144
-rw-r--r--.config/betterlockscreen/betterlockscreenrc37
-rwxr-xr-x.config/bspwm/bspwmrc275
-rwxr-xr-x.config/bspwm/scripts/bspdragtofloat46
-rwxr-xr-x.config/bspwm/scripts/bspswallow12
-rwxr-xr-x.config/bspwm/scripts/bspwindows14
-rwxr-xr-x.config/bspwm/scripts/bspwm-monitor-setup59
-rwxr-xr-x.config/bspwm/scripts/bspwm-toggle-visibility.sh23
-rwxr-xr-x.config/bspwm/scripts/close-window11
-rwxr-xr-x.config/bspwm/scripts/drag-float42
-rwxr-xr-x.config/bspwm/scripts/external_rules.sh71
-rwxr-xr-x.config/bspwm/scripts/hide-window38
-rw-r--r--.config/dunst/assets/notification/fallback.pngbin54750 -> 0 bytes
-rw-r--r--.config/dunst/assets/notification/music.pngbin814 -> 0 bytes
-rw-r--r--.config/dunst/assets/notification/scrot.pngbin35737 -> 0 bytes
-rw-r--r--.config/dunst/assets/ui/volume-high.svg1
-rw-r--r--.config/dunst/assets/ui/volume-low.svg1
-rw-r--r--.config/dunst/assets/ui/volume-medium.svg1
-rw-r--r--.config/dunst/assets/ui/volume-muted.svg1
-rw-r--r--.config/dunst/dunstrc456
-rwxr-xr-x.config/dunst/scripts/openEwwPopup.sh36
-rwxr-xr-x.config/dunst/scripts/songArtLogger.sh17
-rw-r--r--.config/eww/eww.scss11
-rw-r--r--.config/eww/eww.yuck23
-rwxr-xr-x.config/hypr/autostart34
-rw-r--r--.config/hypr/hyprland.conf175
-rwxr-xr-x.config/hypr/scripts/move-scratchpad.sh9
-rw-r--r--.config/hypr/user/binds.conf167
-rw-r--r--.config/hypr/user/env.conf23
-rw-r--r--.config/hypr/user/exec.conf4
-rw-r--r--.config/hypr/user/monitors.conf4
-rw-r--r--.config/hypr/user/window_rules.conf70
-rw-r--r--.config/inputrc86
-rw-r--r--.config/jgmenu/jgmenurc32
-rw-r--r--.config/jgmenu/menu.csv32
-rw-r--r--.config/kitty/kitty.conf827
-rw-r--r--.config/mimeapps.list14
-rw-r--r--.config/picom/picom.conf494
-rw-r--r--.config/plank/dock/launchers/Alacritty.dockitem2
-rw-r--r--.config/plank/dock/launchers/com.obsproject.Studio.dockitem2
-rw-r--r--.config/plank/dock/launchers/discord.dockitem2
-rw-r--r--.config/plank/dock/launchers/firefox.dockitem2
-rw-r--r--.config/plank/dock/launchers/gimp.dockitem2
-rw-r--r--.config/plank/dock/launchers/google-chrome.dockitem2
-rw-r--r--.config/plank/dock/launchers/obsidian.dockitem2
-rw-r--r--.config/plank/dock/launchers/org.gnome.Nautilus.dockitem2
-rw-r--r--.config/plank/dock/launchers/spotify.dockitem2
-rw-r--r--.config/plank/dock/launchers/steam.dockitem2
-rw-r--r--.config/plank/dock/launchers/trash.dockitem2
-rw-r--r--.config/plank/dock/launchers/virtualbox.dockitem2
-rw-r--r--.config/plank/dock/launchers/vlc.dockitem2
-rw-r--r--.config/plank/dock1/launchers/code-oss.dockitem2
-rw-r--r--.config/plank/dock1/launchers/com.obsproject.Studio.dockitem2
-rw-r--r--.config/plank/dock1/launchers/discord.dockitem2
-rw-r--r--.config/plank/dock1/launchers/firefox.dockitem2
-rw-r--r--.config/plank/dock1/launchers/obsidian.dockitem2
-rw-r--r--.config/plank/dock1/launchers/org.qbittorrent.qBittorrent.dockitem2
-rw-r--r--.config/plank/dock1/launchers/pcmanfm.dockitem2
-rw-r--r--.config/plank/dock1/launchers/phototonic.dockitem2
-rw-r--r--.config/plank/dock1/launchers/steam.dockitem2
-rw-r--r--.config/plank/dock1/launchers/trash.dockitem2
-rw-r--r--.config/plank/dock1/launchers/vlc.dockitem2
-rw-r--r--.config/polybar/config.ini671
-rwxr-xr-x.config/polybar/launch.sh31
-rwxr-xr-x.config/polybar/scripts/bluetooth.sh12
-rwxr-xr-x.config/polybar/scripts/check-network.sh21
-rwxr-xr-x.config/polybar/scripts/check_updates.sh118
-rwxr-xr-x.config/polybar/scripts/cmus.sh39
-rwxr-xr-x.config/polybar/scripts/get_spotify_status.sh52
-rwxr-xr-x.config/polybar/scripts/menu.sh6
-rwxr-xr-x.config/polybar/scripts/menu.shsave63
-rwxr-xr-x.config/polybar/scripts/menu_full.sh65
-rwxr-xr-x.config/polybar/scripts/now-playing.sh217
-rwxr-xr-x.config/polybar/scripts/polybar_wrapper92
-rwxr-xr-x.config/polybar/scripts/popup-calendar.sh41
-rwxr-xr-x.config/polybar/scripts/rofi-power.sh45
-rwxr-xr-x.config/polybar/scripts/scroll_spotify_status.sh12
-rwxr-xr-x.config/polybar/scripts/sysmenu.sh42
-rwxr-xr-x.config/polybar/scripts/sysmenu.shsave40
-rwxr-xr-x.config/polybar/scripts/system-usb-mount.sh53
-rwxr-xr-x.config/polybar/scripts/temperature.sh18
-rwxr-xr-x.config/polybar/scripts/toggle_bluetooth.sh8
-rwxr-xr-x.config/polybar/scripts/vpn.sh28
-rw-r--r--.config/powershell/Microsoft.PowerShell_profile.ps114
-rw-r--r--.config/powershell/bloatware.ps1335
-rw-r--r--.config/powershell/bootstrap.ps1396
-rw-r--r--.config/powershell/initialize.ps1227
-rw-r--r--.config/pypoetry/config.toml3
-rw-r--r--.config/rofi/Notif.rasi153
-rw-r--r--.config/rofi/colors/gruvbox.rasi10
-rw-r--r--.config/rofi/colors/nord.rasi10
-rw-r--r--.config/rofi/colors/simple.rasi10
-rw-r--r--.config/rofi/config.rasi178
-rw-r--r--.config/rofi/options_menu.rasi71
-rw-r--r--.config/rofi/rofi-network-manager.conf41
-rw-r--r--.config/rofi/rofi-network-manager.rasi127
-rw-r--r--.config/rofi/styles/appmenu.rasi186
-rw-r--r--.config/rofi/styles/powermenu.rasi187
-rw-r--r--.config/rofi/themes/colors.rasi18
-rw-r--r--.config/rofi/themes/dmenu.rasi38
-rw-r--r--.config/rofi/themes/power.rasi34
-rwxr-xr-x.config/sxhkd/show_help.sh3
-rwxr-xr-x.config/sxhkd/sxhkdrc490
-rw-r--r--.config/tridactyl/tridactylrc170
-rw-r--r--.config/user-dirs.dirs15
-rw-r--r--.config/user-dirs.locale1
-rw-r--r--.config/waybar/config.jsonc292
-rw-r--r--.config/waybar/style.css434
-rw-r--r--.config/wezterm/wezterm.lua206
-rw-r--r--.config/windows-terminal/settings.json590
-rw-r--r--.config/wofi/config17
-rw-r--r--.config/wofi/style.css99
-rw-r--r--.config/xkb/symbols/custom-us27
-rwxr-xr-x.config/xob/launch.sh10
-rwxr-xr-x.config/xob/manage-brightness16
-rwxr-xr-x.config/xob/manage-microphone56
-rwxr-xr-x.config/xob/manage-volume46
-rw-r--r--.config/xob/styles.cfg100
-rw-r--r--.config/zathura/zathurarc27
-rw-r--r--.config/zsh/.zshenv348
-rw-r--r--.config/zsh/.zshrc63
-rw-r--r--.config/zsh/user/aliases.zsh129
-rw-r--r--.config/zsh/user/bindings.zsh39
-rw-r--r--.config/zsh/user/completion.zsh156
-rw-r--r--.config/zsh/user/functions.zsh813
-rw-r--r--.config/zsh/user/options.zsh50
-rw-r--r--.config/zsh/user/prompt.zsh202
284 files changed, 0 insertions, 23129 deletions
diff --git a/.config/Code/User/keybindings.json b/.config/Code/User/keybindings.json
deleted file mode 100644
index 9d04af3..0000000
--- a/.config/Code/User/keybindings.json
+++ /dev/null
@@ -1,274 +0,0 @@
-[
- {
- "key": "ctrl+shift+r",
- "command": "workbench.action.reloadWindow",
- "when": "editorTextFocus"
- },
- {
- "key": "ctrl+i",
- "command": "workbench.action.terminal.sendSequence",
- "when": "resourceExtname == .py",
- "args": {
- "text": "python \"${file}\" < ./i\n"
- }
- },
- {
- "key": "f5",
- "command": "python.execInTerminal",
- "when": "resourceExtname == .py",
- },
- {
- "key": "f5",
- "command": "workbench.action.terminal.sendSequence",
- "when": "resourceExtname == .dart",
- "args": {
- "text": "dart \"${file}\"\n"
- }
- },
- {
- "key": "f5",
- "command": "workbench.action.terminal.sendSequence",
- "when": "resourceExtname == .js",
- "args": {
- "text": "node \"${file}\"\n"
- }
- },
- {
- "key": "f5",
- "command": "workbench.action.terminal.sendSequence",
- "when": "resourceExtname == .java",
- "args": {
- "text": "java \"${file}\"\n"
- }
- },
- {
- "key": "f5",
- "command": "workbench.action.terminal.sendSequence",
- "when": "resourceExtname == .sh",
- "args": {
- "text": "\"${file}\"\n"
- }
- },
- {
- "key": "f5",
- "command": "workbench.action.terminal.sendSequence",
- "when": "resourceExtname == .cpp",
- "args": {
- "text": "g++ -g \"${file}\" -o \"${fileDirname}/${fileBasenameNoExtension}\" && \"${fileDirname}/${fileBasenameNoExtension}\"\n"
- }
- },
- {
- "key": "f5",
- "command": "workbench.action.terminal.sendSequence",
- "when": "resourceExtname == .c",
- "args": {
- "text": "gcc -g \"${file}\" -o \"${fileDirname}/${fileBasenameNoExtension}\" && \"${fileDirname}/${fileBasenameNoExtension}\"\n"
- }
- },
- {
- "key": "f5",
- "command": "workbench.action.terminal.sendSequence",
- "when": "resourceExtname == .asm",
- "args": {
- "text": "nasm -f elf64 \"${file}\" && ld -o \"${fileDirname}/${fileBasenameNoExtension}\" \"${fileDirname}/${fileBasenameNoExtension}.o\" && \"${fileDirname}/${fileBasenameNoExtension}\"\n"
- }
- },
- {
- "key": "ctrl+i",
- "command": "workbench.action.terminal.sendSequence",
- "when": "resourceExtname == .cpp",
- "args": {
- "text": "g++ -g \"${file}\" -o \"${fileDirname}/${fileBasenameNoExtension}\" && \"${fileDirname}/${fileBasenameNoExtension}\" < ./i\n"
- }
- },
- {
- "key": "ctrl+g",
- "command": "workbench.action.terminal.sendSequence",
- "when": "resourceExtname == .cpp",
- "args": {
- "text": "g++ -g \"${file}\" -o \"${fileDirname}/${fileBasenameNoExtension}\" -lgraph -lGL -lGLU -lglut && \"${fileDirname}/${fileBasenameNoExtension}\" 2>/dev/null\n"
- }
- },
- // {
- // "key": "f5",
- // "command": "workbench.action.tasks.runTask",
- // "when": "resourceExtname == .cpp",
- // "args": "Build and Run C++"
- // },
- {
- "key": "shift+f5",
- "command": "workbench.action.terminal.sendSequence",
- "when": "resourceExtname == .cpp",
- "args": {
- "text": "g++ -g \"${fileDirname}/*.cpp\" -o \"${fileDirname}/${fileBasenameNoExtension}\" && \"${fileDirname}/${fileBasenameNoExtension}\"\n"
- }
- },
- // {
- // "key": "shift+f5",
- // "command": "workbench.action.tasks.runTask",
- // "when": "resourceExtname == .cpp",
- // "args": "Build and Run C++ (Multiple cpp files)"
- // },
- {
- "key": "f4",
- "command": "workbench.action.debug.continue",
- "when": "inDebugMode"
- },
- {
- "key": "f4",
- "command": "workbench.action.debug.start",
- "when": "!inDebugMode"
- },
- {
- "key": "f4",
- "command": "workbench.action.debug.start",
- "when": "debuggersAvailable && !inDebugMode"
- },
- {
- "key": "f5",
- "command": "-workbench.action.debug.continue",
- "when": "inDebugMode"
- },
- {
- "key": "f5",
- "command": "-workbench.action.debug.start",
- "when": "!inDebugMode"
- },
- {
- "key": "f5",
- "command": "-workbench.action.debug.start",
- "when": "debuggersAvailable && !inDebugMode"
- },
- {
- "key": "shift+f4",
- "command": "workbench.action.debug.stop",
- "when": "inDebugMode"
- },
- {
- "key": "shift+f5",
- "command": "-workbench.action.debug.stop",
- "when": "inDebugMode"
- },
- {
- "key": "ctrl+v",
- "command": "workbench.action.terminal.paste",
- "when": "terminalFocus && terminalProcessSupported"
- },
- {
- "key": "ctrl+shift+v",
- "command": "-workbench.action.terminal.paste",
- "when": "terminalFocus && terminalProcessSupported"
- },
- {
- "key": "ctrl+alt+up",
- "command": "editor.action.copyLinesUpAction",
- "when": "editorTextFocus && !editorReadonly"
- },
- {
- "key": "ctrl+alt+down",
- "command": "editor.action.copyLinesDownAction",
- "when": "editorTextFocus && !editorReadonly"
- },
- {
- "key": "ctrl+shift+alt+up",
- "command": "-editor.action.copyLinesUpAction",
- "when": "editorTextFocus && !editorReadonly"
- },
- {
- "key": "ctrl+shift+alt+down",
- "command": "-editor.action.copyLinesDownAction",
- "when": "editorTextFocus && !editorReadonly"
- },
- {
- "key": "ctrl+,",
- "command": "-workbench.action.openSettings"
- },
- {
- "key": "ctrl+,",
- "command": "workbench.action.openSettingsJson"
- },
- {
- "key": "ctrl+i",
- "command": "-editor.action.triggerSuggest",
- "when": "editorHasCompletionItemProvider && textInputFocus && !editorReadonly"
- },
- {
- "key": "ctrl+c",
- "command": "workbench.action.terminal.copySelection",
- "when": "terminalFocus && terminalProcessSupported && terminalTextSelected && terminalTextSelected"
- },
- {
- "key": "ctrl+shift+c",
- "command": "-workbench.action.terminal.copySelection",
- "when": "terminalFocus && terminalProcessSupported && terminalTextSelected && terminalTextSelected"
- },
- {
- "key": "ctrl+k",
- "command": "workbench.action.terminal.kill",
- "when": "terminalIsOpen && terminalFocus"
- },
- {
- "key": "delete",
- "command": "-workbench.action.terminal.killInstance",
- "when": "terminalIsOpen && terminalTabsFocus || terminalProcessSupported && terminalTabsFocus"
- },
- {
- "key": "ctrl+shift+i",
- "command": "-editor.action.formatDocument.none",
- "when": "editorTextFocus && !editorHasDocumentFormattingProvider && !editorReadonly"
- },
- {
- "key": "ctrl+shift+i",
- "command": "-notebook.formatCell",
- "when": "editorHasDocumentFormattingProvider && editorTextFocus && inCompositeEditor && notebookEditable && !editorReadonly && activeEditor == 'workbench.editor.notebook'"
- },
- {
- "key": "ctrl+shift+i",
- "command": "editor.action.formatDocument",
- "when": "editorTextFocus"
- },
- {
- "key": "ctrl+shift+i",
- "command": "-editor.action.formatDocument",
- "when": "editorHasDocumentFormattingProvider && editorTextFocus && !editorReadonly && !inCompositeEditor"
- },
- {
- "key": "ctrl+shift+i",
- "command": "workbench.action.toggleDevTools",
- "when": "!editorTextFocus"
- },
- {
- "key": "ctrl+shift+i",
- "command": "-workbench.action.toggleDevTools",
- "when": "isDevelopment"
- },
- {
- "key": "ctrl+t",
- "command": "-workbench.action.showAllSymbols"
- },
- {
- "key": "ctrl+t",
- "command": "workbench.action.files.newUntitledFile"
- },
- {
- "key": "ctrl+n",
- "command": "-workbench.action.files.newUntitledFile"
- },
- {
- "key": "ctrl+shift+m",
- "command": "github.cweijan.mysql.focus"
- },
- {
- "key": "ctrl+shift+m",
- "command": "-workbench.actions.view.problems",
- "when": "workbench.panel.markers.view.active"
- },
- {
- "key": "ctrl+shift+0",
- "command": "workbench.action.zoomReset"
- },
- {
- "key": "ctrl+numpad0",
- "command": "-workbench.action.zoomReset"
- }
-]
diff --git a/.config/Code/User/settings.json b/.config/Code/User/settings.json
deleted file mode 100644
index 8686b1b..0000000
--- a/.config/Code/User/settings.json
+++ /dev/null
@@ -1,734 +0,0 @@
-{
- "workbench.colorCustomizations": {
- "[Chromodynamics]": {
- "terminal.background": "#060606",
- "terminal.foreground": "#e0e0e0",
- "terminal.selectionBackground": "#555555",
- "titleBar.activeBackground": "#020202",
- "titleBar.activeForeground": "#e0e0e0",
- "titleBar.inactiveBackground": "#020202",
- "titleBar.inactiveForeground": "#e0e0e0",
- "tab.inactiveBackground": "#0b0b0b",
- "editor.background": "#060606",
- "editor.findMatchBorder": "#0c0c0d",
- "editor.findMatchHighlightBorder": "#0c0c0d",
- "editor.lineHighlightBackground": "#060606",
- "editor.selectionBackground": "#222222",
- "editor.selectionHighlightBackground": "#e4dddd",
- "editor.selectionHighlightBorder": "#0c0c0d",
- "editorGroupHeader.tabsBackground": "#0b0b0b",
- "editorGutter.background": "#000000",
- "sideBar.background": "#060606",
- "sideBarSectionHeader.background": "#0b0b0b",
- "statusBar.background": "#060606"
- },
- "[Sweet Dracula]": {
- "editorGroupHeader.tabsBackground": "#161925",
- }
- },
- "editor.tokenColorCustomizations": {
- "[Chromodynamics]": {
- "textMateRules": [
- {
- "scope": [
- "constant.language.python",
- "variable.parameter.function.language.special.self.python"
- ],
- "settings": {
- "foreground": "#66D9EF"
- }
- },
- {
- "scope": [
- "entity.name.function.operator",
- "keyword.operator"
- ],
- "settings": {
- "foreground": "#E8364F",
- "fontStyle": ""
- }
- },
- {
- "scope": [
- "punctuation.definition.template-expression.begin.js",
- "punctuation.definition.template-expression.end.js"
- ],
- "settings": {
- "foreground": "#da70d6",
- "fontStyle": "italic"
- }
- },
- {
- "scope": [
- "variable.other.readwrite.js"
- ],
- "settings": {
- "foreground": "#c6c6c6",
- "fontStyle": ""
- }
- }
- ]
- },
- "textMateRules": [
- {
- "scope": [
- "entity.name.type.class",
- "storage.type.class",
- "storage.modifier",
- "storage.type",
- "constant",
- "comment",
- "keyword",
- "invalid"
- ],
- "settings": {
- "fontStyle": "italic"
- }
- }
- ]
- },
- // Window Settings
- "window.commandCenter": false,
- "window.menuBarVisibility": "toggle",
- "window.newWindowDimensions": "maximized",
- "window.restoreWindows": "all",
- "window.title": "${activeEditorShort}${separator}${rootName}",
- "window.titleBarStyle": "native",
- "window.titleSeparator": " ・ ・",
- "workbench.editor.enablePreviewFromQuickOpen": false,
- "workbench.editor.highlightModifiedTabs": true,
- "workbench.editor.restoreViewState": false,
- "workbench.editor.sharedViewState": false,
- "workbench.editor.showTabs": "multiple",
- "workbench.editor.tabCloseButton": "right",
- "workbench.editor.tabSizing": "shrink",
- "workbench.iconTheme": "sweet-vscode-icons",
- "workbench.layoutControl.type": "menu",
- "workbench.list.smoothScrolling": true,
- "workbench.panel.defaultLocation": "right",
- "workbench.startupEditor": "none",
- "workbench.statusBar.visible": true,
- "workbench.editorAssociations": {
- "*.ipynb": "jupyter-notebook"
- },
- "workbench.reduceMotion": "off",
- // Editor Settings
- "editor.acceptSuggestionOnEnter": "smart",
- "editor.autoClosingBrackets": "always",
- "editor.bracketPairColorization.enabled": true,
- "editor.codeActionsOnSave": {
- "source.organizeImports": "explicit"
- },
- "editor.colorDecorators": false,
- "editor.cursorBlinking": "phase",
- "editor.cursorSmoothCaretAnimation": "on",
- "editor.cursorStyle": "line-thin",
- "editor.detectIndentation": false,
- "editor.emptySelectionClipboard": false,
- "editor.fontFamily": "'Operator Mono SSm Lig Book', 'FiraCode Nerd Font', 'Hack Nerd Font Mono', 'codicon'",
- "editor.fontVariations": true,
- "editor.fontLigatures": "'ss01', 'ss02', 'ss03', 'ss04', 'ss05', 'ss06', 'zero', 'onum'",
- "editor.fontSize": 12,
- "editor.fontWeight": "normal",
- "editor.formatOnSave": true,
- "editor.formatOnType": true,
- "editor.glyphMargin": true,
- "editor.guides.bracketPairs": "active",
- "editor.guides.bracketPairsHorizontal": "active",
- "editor.guides.highlightActiveBracketPair": true,
- "editor.hover.above": false,
- "editor.inlayHints.enabled": "on",
- "editor.inlineSuggest.enabled": true,
- "editor.insertSpaces": true,
- "editor.linkedEditing": true,
- "editor.matchBrackets": "never",
- "editor.maxTokenizationLineLength": 99999999,
- "editor.minimap.enabled": false,
- "editor.mouseWheelScrollSensitivity": 1.5,
- "editor.occurrencesHighlight": "off",
- "editor.renderControlCharacters": true,
- "editor.renderFinalNewline": "on",
- "editor.renderLineHighlight": "gutter",
- "editor.renderWhitespace": "none",
- "editor.scrollbar.horizontal": "auto",
- "editor.scrollbar.vertical": "auto",
- "editor.selectionHighlight": true,
- "editor.smoothScrolling": true,
- "editor.stickyScroll.enabled": true,
- "editor.stickyScroll.maxLineCount": 5,
- "editor.stickyTabStops": false,
- "editor.suggestSelection": "first",
- "editor.suggest.insertMode": "replace",
- "editor.suggest.preview": true,
- "editor.suggest.snippetsPreventQuickSuggestions": false,
- "editor.tabCompletion": "on",
- "editor.tabSize": 4,
- "editor.wordBasedSuggestions": "matchingDocuments",
- "editor.wordBasedSuggestionsMode": "matchingDocuments",
- "editor.wordWrap": "on",
- "editor.quickSuggestions": {
- "other": "on",
- "comments": "on",
- "strings": "on",
- },
- // Emmet Settings
- "emmet.excludeLanguages": [],
- "emmet.includeLanguages": {
- "javascript": "javascriptreact",
- "markdown": "html",
- "vue-html": "html"
- },
- // Explorer Settings
- "explorer.compactFolders": false,
- "explorer.confirmDelete": false,
- "explorer.confirmDragAndDrop": false,
- // Customize UI
- // "customizeUI.activityBar": "bottom",
- // "customizeUI.activityBarHideSettings": true,
- // "customizeUI.listRowHeight": 20,
- // "customizeUI.font.monospace": "CaskaydiaCove Nerd Font",
- // "customizeUI.font.regular": "CaskaydiaCove Nerd Font",
- // "customizeUI.fontSizeMap": {
- // "13px": "12px",
- // "monospace": "12px",
- // "tab-title": "12px",
- // "window-title": "12.5px"
- // },
- // "customizeUI.titleBar": "inline",
- // "customizeUI.stylesheet": {
- // ":root,::after,::before": "--tab-height: 25px;--tab-radius: 8px;--ui-radius: 6px;--base-color: #bd93f9;--gradient-one: #c50ed2;--gradient-two: #8500f7;--side-pane-color: var(--vscode-editor-background);--focus-border: #3f4f81;--sash-size: 2px !important;--sash-hover-size: 2px !important;",
- // ".editor-container": "-webkit-font-smoothing: antialiased;",
- // ".monaco-workbench .part.editor > .content > .watermark": "display: none !important;",
- // ".monaco-workbench .part.titlebar .window-controls-container .layout-dropdown-container": "margin-left: auto !important;",
- // ".monaco-workbench .part.titlebar > .window-controls-container": "width: unset !important;",
- // ".monaco-workbench .part.titlebar > .window-controls-container > .window-icon": "width: 30px !important;",
- // ".monaco-workbench .part.titlebar > .titlebar-container .window-appicon > .home-bar-icon-badge, .monaco-workbench .part.titlebar > .titlebar-container > .window-appicon:not(.codicon)": "background-image: url(./vsc/vsc.svg) !important;",
- // ".monaco-workbench .part.editor > .content .editor-group-container.empty .editor-group-letterpress": "background-image: url(./vsc/vsc-back.svg) !important;",
- // ".monaco-workbench .part.editor.has-watermark > .content.empty .editor-group-container > .editor-group-letterpress": "background-position-y: 50% !important;",
- // ".monaco-sash.hover:before, .monaco-sash.active:before": "background: linear-gradient(to bottom, var(--gradient-one), var(--gradient-two)) !important;",
- // ".monaco-editor .squiggly-error": "background: none !important;border-bottom: 0.5px solid var(--vscode-editorError-foreground) !important;",
- // ".monaco-editor .squiggly-warning": "background: none !important;border-bottom: 0.5px solid var(--vscode-editorWarning-foreground) !important;",
- // ".monaco-editor .squiggly-info": "background: none !important;border-bottom: 0.5px solid var(--vscode-editorInfo-foreground) !important;",
- // ".monaco-editor .squiggly-hint": "background: none !important;border-bottom: 0.5px solid var(--vscode-editorHint-foreground) !important;",
- // "body.activity-bar-at-bottom .monaco-workbench .activitybar .active-item-indicator": "display: block !important;",
- // ".monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.checked .active-item-indicator:before": "border: 0 !important;width: 100% !important;height: 3px !important;position: absolute !important;bottom: 0 !important;left: 0 !important;top: unset !important;background-image: linear-gradient(to top, var(--gradient-one), var(--gradient-two)) !important;border-radius: 100vmax !important;",
- // ".monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab > .tab-border-bottom-container, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab > .tab-border-top-container": "background-image: linear-gradient(to left, var(--gradient-one), var(--gradient-two)) !important;height: 3px !important;",
- // ".monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .badge .badge-content": "background-image: linear-gradient(90deg, var(--gradient-one), var(--gradient-two)) !important;",
- // ".monaco-workbench .part.editor > .content .editor-group-container.active > .title .tabs-container > .tab.dirty > .tab-actions .action-label:not(:hover):before, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.dirty > .tab-actions .action-label:not(:hover):before": "content: '' !important;",
- // ".codicon-git-branch:before": "background: linear-gradient(to bottom, var(--gradient-one), var(--gradient-two)) !important;-webkit-background-clip: text !important;background-clip: text !important;color: rgba(255, 255, 255, 0.4) !important;",
- // ".monaco-editor, .split-view-view .monaco-editor-background": "background: url(./vsc/pek.png) bottom right / 10% auto no-repeat scroll;",
- // ".monaco-scrollable-element > .scrollbar > .slider": "border-radius: 7px !important;",
- // ".monaco-scrollable-element > .scrollbar > .slider.active": "background: linear-gradient(to top, var(--gradient-one), var(--gradient-two)) !important;",
- // "canvas.decorationsOverviewRuler, .monaco-scrollable-element > .scrollbar.vertical, .monaco-scrollable-element > .scrollbar.vertical > .slider": "width: 7px !important;",
- // ".monaco-scrollable-element > .scrollbar.horizontal, .monaco-scrollable-element > .scrollbar.horizontal > .slider": "height: 7px !important;",
- // ".monaco-scrollable-element > .scrollbar.horizontal > .slider": "width: 135px !important;",
- // ".monaco-editor .monaco-hover, .monaco-editor .suggest-widget, .monaco-editor .suggest-details": "border-radius: var(--ui-radius) !important;overflow: hidden !important;box-shadow: rgb(0 0 0 / 36%) 0px 2px calc(var(--ui-radius) + 2px) !important;",
- // ".pane .pane-body, .pane .pane-body .monaco-list, .pane .pane-body .monaco-list .monaco-scrollable-element, .pane .pane-body .monaco-list .monaco-scrollable-element .monaco-list-rows, .pane .pane-body .monaco-list .monaco-scrollable-element .monaco-list-rows .monaco-list-row": "overflow: visible !important;",
- // ".open-editors .monaco-list .monaco-list-row": "padding-left: 0px !important;",
- // ".monaco-list-row:hover, .monaco-list-row.selected, .monaco-list-row.focused": "border-radius: 0 var(--ui-radius) var(--ui-radius) 0 !important;",
- // ".monaco-workbench .monaco-list:not(.element-focused):focus:before, .monaco-select-box, .monaco-select-box-dropdown-container, .monaco-select-box-dropdown-container .monaco-list-row:hover, .monaco-select-box-dropdown-container .monaco-list-row.selected, .monaco-select-box-dropdown-container .monaco-list-row.focused": "border-radius: var(--ui-radius) !important;",
- // ".monaco-list-row.selected::before, .monaco-list-row.selected::after": "--ui-radius: 6px;content: '' !important;display: block !important;position: absolute !important;width: var(--ui-radius) !important;height: var(--ui-radius) !important;left: 0 !important;pointer-events: none !important;",
- // ".monaco-list-row.selected::before": "top: calc(0px - var(--ui-radius)) !important;background: radial-gradient(circle at 100% 0%, transparent 70.71%, var(--side-pane-color) 29.289%) no-repeat;background-position: 100% 0%;",
- // ".monaco-list-row.selected::after": "bottom: calc(0px - var(--ui-radius)) !important;background: radial-gradient(circle at 100% 100%, transparent 70.71%, var(--side-pane-color) 29.289%) no-repeat;background-position: 100% 100%;",
- // ".monaco-button.monaco-text-button": "border-radius: var(--ui-radius) !important;",
- // ".monaco-editor .cursors-layer.cursor-smooth-caret-animation > .cursor": "transition: all 100ms ease-out;",
- // ".tab:first-child": "margin-left: var(--tab-radius) !important;",
- // ".tab:last-child": "margin-right: var(--tab-radius) !important;",
- // ".tab.active": "border-radius: var(--tab-radius) var(--tab-radius) 0 0 !important;",
- // ".tab.dirty-border-top > .tab-border-top-container": "border-radius: var(--tab-radius) var(--tab-radius) 0 0 !important;",
- // ".tab.active::before, .tab.active::after": "content: '' !important;display: block !important;box-sizing: border-box !important;position: absolute !important;z-index: 1;width: var(--tab-radius) !important;height: var(--tab-radius) !important;bottom: 0px !important;pointer-events: none !important;",
- // ".tab.active::before": "left: calc(0px - var(--tab-radius)) !important;border-bottom-right-radius: var(--tab-radius) !important;box-shadow: 3px 3px 0 3px var(--vscode-editor-background) !important;",
- // ".tab.active::after": "right: 0 !important;transform: translateX(var(--tab-radius)) !important;border-bottom-left-radius: var(--tab-radius) !important;box-shadow: -3px 3px 0 3px var(--vscode-editor-background) !important;",
- // ".monaco-workbench .part.sidebar>.title>.title-label h2": "font-weight: bold !important;",
- // "body.activity-bar-at-bottom div.monaco-grid-view > div > div > div.monaco-scrollable-element > div.split-view-container > div.split-view-view.visible > div > div > div.monaco-scrollable-element > div.split-view-container > div:nth-child(1) > div > div > div.monaco-scrollable-element > div.split-view-container > div:nth-child(2)": "height: auto !important;",
- // "body.activity-bar-at-bottom .monaco-workbench .part.activitybar": "border: none !important; padding: 0px 6px 6px 6px !important;margin-top: -8px !important; background-color: var(--vscode-editor-background) !important; position: relative !important; z-index: 10 !important;",
- // "body.activity-bar-at-bottom .monaco-workbench .activitybar.bordered:before": "display: none !important;",
- // "body.activity-bar-at-bottom .monaco-workbench .activitybar > .content": "justify-content: center !important; border-radius: 6px; width: unset !important; border: 1px solid #3f4f818c !important;",
- // "body.activity-bar-at-bottom .monaco-workbench .activitybar>.content>.composite-bar": "margin-bottom: unset !important;",
- // "body.activity-bar-at-bottom .monaco-action-bar .action-item.icon > .action-label": "color: var(--vscode-editor-foreground) !important;opacity: 0.4;",
- // "body.activity-bar-at-bottom .monaco-action-bar .action-item.icon.checked > .action-label": "opacity: 1 !important;",
- // ".monaco-workbench .part.editor .tabs-and-actions-container .window-controls-container": "display: flex;flex-grow: 0;flex-shrink: 0;text-align: center; -webkit-app-region: no-drag; height: 100%;",
- // ".monaco-workbench .part.editor .tabs-and-actions-container .window-controls-container .window-icon": "width: 30px !important;height: 30px !important; display: flex; align-items: center; justify-content: center;",
- // ".monaco-workbench .part.editor .tabs-and-actions-container .window-controls-container .window-icon.window-close:hover": "background-color: #FF5555",
- // },
- // Terminal Settings
- "terminal.integrated.altClickMovesCursor": true,
- "terminal.integrated.cursorBlinking": true,
- "terminal.integrated.customGlyphs": true,
- "terminal.integrated.cursorStyle": "line",
- "terminal.integrated.enableMultiLinePasteWarning": false,
- "terminal.integrated.fontFamily": "'CaskaydiaCove Nerd Font', 'FiraCode Nerd Font', 'Hack Nerd Font Mono'",
- "terminal.integrated.fontSize": 13,
- "terminal.integrated.gpuAcceleration": "auto",
- "terminal.integrated.scrollback": 200000,
- "terminal.integrated.smoothScrolling": true,
- "terminal.integrated.tabs.enabled": false,
- "terminal.integrated.tabs.enableAnimation": true,
- "terminal.integrated.profiles.linux": {
- "zsh": {
- "path": "/usr/bin/zsh"
- }
- },
- "terminal.integrated.shellIntegration.enabled": false,
- "terminal.integrated.shellIntegration.decorationsEnabled": "never",
- // Language Settings
- "[python]": {
- "editor.semanticHighlighting.enabled": false
- },
- "python.analysis.completeFunctionParens": true,
- "python.formatting.provider": "black",
- "python.formatting.blackArgs": [
- "--line-length",
- "120"
- ],
- "python.languageServer": "Pylance",
- "python.linting.ignorePatterns": [
- ".vscode/*.py",
- "**/site-packages/**/*.py",
- ".git"
- ],
- "python.linting.enabled": true,
- "python.linting.pylintEnabled": true,
- "python.linting.pylintArgs": [
- "--rcfile",
- "${env:HOME}/.pylintrc"
- // "--load-plugins=pylint_django"
- ],
- "[cpp]": {
- "editor.semanticHighlighting.enabled": false,
- },
- "C_Cpp.default.includePath": [
- "${workspaceFolder}/**",
- "/usr/include",
- "/usr/local/include",
- "/usr/include/c++/11.1.0"
- ],
- "C_Cpp.default.defines": [
- "${default}"
- ],
- "C_Cpp.default.compilerPath": "/usr/bin/g++",
- "C_Cpp.default.cppStandard": "c++20",
- "C_Cpp.default.cStandard": "c17",
- "C_Cpp.default.intelliSenseMode": "gcc-x64",
- "C_Cpp.default.compilerArgs": [
- "-g"
- ],
- "launch": {
- "version": "0.2.0",
- "configurations": [
- {
- "name": "(gdb) Launch",
- "type": "cppdbg",
- "request": "launch",
- "program": "${fileDirname}/${fileBasenameNoExtension}",
- "args": [],
- "stopAtEntry": false,
- "cwd": "${workspaceFolder}",
- "environment": [],
- "externalConsole": false,
- "MIMode": "gdb",
- "miDebuggerPath": "/usr/bin/gdb",
- "preLaunchTask": "Build",
- "setupCommands": [
- {
- "description": "Enable pretty-printing for gdb",
- "text": "-enable-pretty-printing",
- "ignoreFailures": true
- }
- ]
- }
- ]
- },
- "tasks": {
- "version": "2.0.0",
- "tasks": [
- {
- "label": "Build",
- "type": "shell",
- "command": "g++ -g \"${file}\" -o \"${fileDirname}/${fileBasenameNoExtension}\"",
- "problemMatcher": [
- "$gcc"
- ],
- "group": {
- "kind": "build",
- "isDefault": true
- }
- },
- {
- "label": "Build (Multiple cpp files)",
- "type": "shell",
- "command": "g++ -g \"${fileDirname}/*.cpp\" -o \"${fileDirname}/${fileBasenameNoExtension}\"",
- "problemMatcher": [
- "$gcc"
- ],
- "group": {
- "kind": "build",
- "isDefault": true
- }
- }
- ]
- },
- "C_Cpp.autocompleteAddParentheses": true,
- "C_Cpp.codeFolding": "enabled",
- "C_Cpp.clang_format_fallbackStyle": "{ BasedOnStyle: Google, IndentWidth: 2, ColumnLimit: 0}",
- "C_Cpp.inlayHints.autoDeclarationTypes.enabled": true,
- "C_Cpp.inlayHints.autoDeclarationTypes.showOnLeft": true,
- "C_Cpp.inlayHints.parameterNames.enabled": true,
- "C_Cpp.inlayHints.parameterNames.hideLeadingUnderscores": true,
- "C_Cpp.inlayHints.parameterNames.suppressWhenArgumentContainsName": true,
- "C_Cpp.inlayHints.referenceOperator.enabled": true,
- "C_Cpp.inlayHints.referenceOperator.showSpace": false,
- "css.format.enable": true,
- "css.format.newlineBetweenRules": true,
- "css.format.newlineBetweenSelectors": true,
- "css.format.spaceAroundSelectorSeparator": true,
- "[css]": {
- "editor.tabSize": 2
- },
- "java.jdt.ls.java.home": "/usr/lib/jvm/java-11-openjdk-amd64",
- "java.configuration.runtimes": [
- {
- "name": "JavaSE-11",
- "path": "/usr/lib/jvm/java-11-openjdk-amd64"
- }
- ],
- "java.server.launchMode": "LightWeight",
- "[html]": {
- "editor.tabSize": 2
- },
- "html.autoClosingTags": true,
- "html.completion.attributeDefaultValue": "singlequotes",
- "[dart]": {
- "editor.suggestSelection": "first",
- "editor.tabCompletion": "onlySnippets",
- "editor.wordBasedSuggestions": "off"
- },
- "[javascript]": {
- "editor.tabSize": 2
- },
- "javascript.autoClosingTags": true,
- "javascript.suggest.autoImports": true,
- "javascript.suggest.completeFunctionCalls": true,
- "javascript.suggest.enabled": true,
- "javascript.updateImportsOnFileMove.enabled": "always",
- "javascript.validate.enable": false,
- "[json]": {
- "editor.tabSize": 2
- },
- "json.maxItemsComputed": 100000,
- "[markdown]": {
- "editor.quickSuggestions": {
- "other": "on",
- "comments": "on",
- "strings": "on",
- }
- },
- "[scss]": {
- "editor.tabSize": 2
- },
- "[typescript]": {
- "editor.tabSize": 2
- },
- "typescript.autoClosingTags": true,
- "typescript.suggest.autoImports": true,
- "typescript.updateImportsOnFileMove.enabled": "always",
- "typescript.validate.enable": false,
- "[typescriptreact]": {
- "editor.tabSize": 2,
- "editor.formatOnSave": false,
- },
- "js/ts.implicitProjectConfig.checkJs": true,
- //Latex
- "[latex]": {
- "editor.formatOnSave": false
- },
- // Empty-Indent Extension
- "emptyIndent.highlightColor": "rgba(246,36,89,0.6)",
- "emptyIndent.highlightIndent": false,
- "emptyIndent.removeIndent": true,
- // Github Co-pilot
- "github.copilot.inlineSuggest.enable": true,
- "github.copilot.enable": {
- "*": true,
- "yaml": false,
- "plaintext": true,
- "markdown": false
- },
- // Gitlens
- "gitlens.currentLine.enabled": true,
- "gitlens.hovers.currentLine.over": "line",
- "gitlens.codeLens.enabled": false,
- "gitlens.statusBar.enabled": true,
- // General Setting\
- "color-highlight.markRuler": false,
- "color-highlight.markerType": "background",
- "debug.onTaskErrors": "showErrors",
- "debug.openDebug": "openOnDebugBreak",
- "eslint.enable": true,
- "extensions.ignoreRecommendations": true,
- "files.autoSave": "onWindowChange",
- "files.insertFinalNewline": true,
- "files.restoreUndoStack": true,
- "files.trimFinalNewlines": true,
- "files.trimTrailingWhitespace": true,
- "git.autofetch": true,
- "grammarly.files.include": [
- "**/*.md",
- "**/*.txt",
- "**/*.tex",
- ],
- "latex-workshop.latex.autoBuild.cleanAndRetry.enabled": true,
- "latex-workshop.latex.autoBuild.run": "never",
- "latex-workshop.latex.clean.fileTypes": [
- "*/*.aux",
- "*/*.synctex.gz"
- ],
- "latex-workshop.latex.outDir": "/tmp/Review-Paper/",
- "latex-workshop.latex.recipe.default": "latexmk (lualatex)",
- "latex-workshop.latex.recipes": [
- {
- "name": "latexmk 🔃",
- "tools": [
- "latexmk"
- ]
- },
- {
- "name": "latexmk (latexmkrc)",
- "tools": [
- "latexmk_rconly"
- ]
- },
- {
- "name": "latexmk (lualatex)",
- "tools": [
- "lualatexmk"
- ]
- },
- {
- "name": "latexmk (xelatex)",
- "tools": [
- "xelatexmk"
- ]
- },
- {
- "name": "pdflatex ➞ bibtex ➞ pdflatex × 2",
- "tools": [
- "pdflatex",
- "bibtex",
- "pdflatex",
- "pdflatex"
- ]
- },
- {
- "name": "Compile Rnw files",
- "tools": [
- "rnw2tex",
- "latexmk"
- ]
- },
- {
- "name": "Compile Jnw files",
- "tools": [
- "jnw2tex",
- "latexmk"
- ]
- },
- {
- "name": "tectonic",
- "tools": [
- "tectonic"
- ]
- }
- ],
- "latex-workshop.latex.tools": [
- {
- "name": "latexmk",
- "command": "latexmk",
- "args": [
- "-synctex=1",
- "-interaction=nonstopmode",
- "-file-line-error",
- "-pdf",
- "-outdir=%OUTDIR%",
- "%DOC%"
- ],
- "env": {}
- },
- {
- "name": "lualatexmk",
- "command": "latexmk",
- "args": [
- "-synctex=1",
- "-interaction=nonstopmode",
- "-file-line-error",
- "-lualatex",
- "-outdir=%OUTDIR%",
- "%DOC%"
- ],
- "env": {}
- },
- {
- "name": "xelatexmk",
- "command": "latexmk",
- "args": [
- "-synctex=1",
- "-interaction=nonstopmode",
- "-file-line-error",
- "-xelatex",
- "-outdir=%OUTDIR%",
- "%DOC%"
- ],
- "env": {}
- },
- {
- "name": "latexmk_rconly",
- "command": "latexmk",
- "args": [
- "%DOC%"
- ],
- "env": {}
- },
- {
- "name": "pdflatex",
- "command": "pdflatex",
- "args": [
- "-synctex=1",
- "-interaction=nonstopmode",
- "-file-line-error",
- "-output-directory=%OUTDIR%",
- "%DOC%"
- ],
- "env": {}
- },
- {
- "name": "bibtex",
- "command": "bibtex",
- "args": [
- "%DOCFILE%"
- ],
- "env": {}
- },
- {
- "name": "rnw2tex",
- "command": "Rscript",
- "args": [
- "-e",
- "knitr::opts_knit$set(concordance = TRUE); knitr::knit('%DOCFILE_EXT%')"
- ],
- "env": {}
- },
- {
- "name": "jnw2tex",
- "command": "julia",
- "args": [
- "-e",
- "using Weave; weave(\"%DOC_EXT%\", doctype=\"tex\")"
- ],
- "env": {}
- },
- {
- "name": "jnw2texmintex",
- "command": "julia",
- "args": [
- "-e",
- "using Weave; weave(\"%DOC_EXT%\", doctype=\"texminted\")"
- ],
- "env": {}
- },
- {
- "name": "tectonic",
- "command": "tectonic",
- "args": [
- "--synctex",
- "--keep-logs",
- "%DOC%.tex"
- ],
- "env": {}
- }
- ],
- "liveServer.settings.donotShowInfoMsg": true,
- "liveServer.settings.donotVerifyTags": true,
- "liveServer.settings.file": "404.html",
- // "liveServer.settings.https": {
- // "enable": true,
- // "cert": "/home/proxzima/.ssh/cert/cert.pem",
- // "key": "/home/proxzima/.ssh/cert/key.pem",
- // "passphrase": "1234"
- // },
- "liveServer.settings.useLocalIp": true,
- "markdown.preview.markEditorSelection": true,
- "markdown.preview.scrollEditorWithPreview": false,
- "markdown.preview.scrollPreviewWithEditor": false,
- "svgPreview.autoOpen": true,
- "svgPreview.scaleToFit": true,
- "svgPreview.style": {
- "html": {
- "background-position": "0 0, 13px 13px",
- "background-size": "26px 26px",
- "background": "rgba(255, 255, 255, 1)",
- // "background-image": "linear-gradient(45deg, #141414 25%, transparent 25%, transparent 75%, #141414 75%, #141414), linear-gradient(45deg, #141414 25%, transparent 25%, transparent 75%, #141414 75%, #141414)"
- }
- },
- "print.folder.exclude": [
- "{bin,obj,out}",
- "node_module",
- "**/*.{bin,exe,dll,hex,pdb,pdf,pfx,png,jpg,gif,bmp,suo,pptx,ppt,jar,woff2,woff,ttf,eot,odt,otf,class}"
- ],
- "print.lineNumbers": "on",
- "print.printAndClose": false,
- "print.colourScheme": "XCode",
- "print.alternateBrowser": true,
- "print.browserPath": "/usr/bin/google-chrome",
- "spellright.documentTypes": [
- "markdown",
- "latex",
- "plaintext"
- ],
- "spellright.language": [
- "en_GB"
- ],
- "spellright.notificationClass": "information",
- "spellright.suggestionsInHints": false,
- "spellright.useDocumentSymbolsInCode": true,
- "telemetry.telemetryLevel": "off",
- "search.exclude": {
- "**/bower_components": true,
- "**/*.code-search": true,
- "**/node_modules": true,
- "**/env": true,
- "**/venv": true
- },
- "files.associations": {
- "*.xml": "html",
- "*.svg": "html",
- "*.json": "jsonc"
- },
- "files.exclude": {
- "**/.DS_Store": true,
- "**/.git": true,
- "**/.svn": true,
- "**/.hg": true,
- "**/CVS": true,
- "**/.classpath": true,
- "**/.project": true,
- "**/.settings": true,
- "**/.factorypath": true
- },
- "files.watcherExclude": {
- "**/.DS_Store/**": true,
- "**/.git/objects/**": true,
- "**/.git/subtree-cache/**": true,
- "**/.svn/**": true,
- "**/.hg/**": true,
- "**/CVS/**": true,
- "**/node_modules/**": true,
- "**/env/**": true,
- "**/venv/**": true,
- "env-*": true
- },
- "workbench.colorTheme": "Sweet Dracula",
- "security.workspace.trust.untrustedFiles": "open",
- "workbench.activityBar.location": "hidden",
- "workbench.editor.tabActionLocation": "right",
- "workbench.editor.empty.hint": "hidden"
-}
diff --git a/.config/Code/User/snippets/snippet.code-snippets b/.config/Code/User/snippets/snippet.code-snippets
deleted file mode 100644
index 16bdfed..0000000
--- a/.config/Code/User/snippets/snippet.code-snippets
+++ /dev/null
@@ -1,126 +0,0 @@
-{
- // Place your global snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and
- // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope
- // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is
- // used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
- // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders.
- // Placeholders with the same ids are connected.
- // Example:
- "if name is main": {
- "scope": "python",
- "prefix": "ifn",
- "body": [
- "if __name__ == '__main__':",
- "\t$0"
- ],
- "description": ""
- },
- "for in": {
- "scope": "python",
- "prefix": "fori",
- "body": [
- "for ${1:item} in ${2:items}:",
- "\t$0"
- ],
- "description": ""
- },
- "for in range": {
- "scope": "python",
- "prefix": "forr",
- "body": [
- "for ${1:i} in range($2):",
- "\t$0"
- ],
- "description": ""
- },
- "lambda": {
- "scope": "python",
- "prefix": "lamb",
- "body": [
- "lambda ${1:arg} : $0",
- ],
- "description": ""
- },
- "map input": {
- "scope": "python",
- "prefix": "mapi",
- "body": [
- "map(${1:func}, input($2).split())"
- ],
- "description": ""
- },
- "html boiler plate": {
- "scope": "html",
- "prefix": "html",
- "body": [
- "<!DOCTYPE html>",
- "<html lang=\"en\">",
- "",
- "<head>",
- " <meta charset=\"utf-8\">",
- " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">",
- "",
- " <title>${1:Basic HTML5}</title>",
- " <meta name=\"author\" content=\"${2:Trevor Gray}\">",
- " <meta name=\"description\" content=\"${3:HTML5 Template}\">",
- "",
- " <meta property=\"og:title\" content=\"${4:HTML5 Template}\">",
- " <meta property=\"og:type\" content=\"website\">",
- " <meta property=\"og:url\" content=\"https://$5\">",
- " <meta property=\"og:description\" content=\"${6:HTML5 Template}\">",
- " <meta property=\"og:image\" content=\"${7:./assets/preview.png}\">",
- "",
- " <link rel=\"icon\" href=\"${8:./assets/favicon.ico}\">",
- " <link rel=\"icon\" href=\"${9:./assets/favicon.svg}\" type=\"image/svg+xml\">",
- " <link rel=\"apple-touch-icon\" href=\"${10:./assets/apple-touch-icon.png}\">",
- "",
- " <link rel=\"stylesheet\" href=\"${11:./css/style.css}\">",
- "",
- "</head>",
- "",
- "<body>",
- " ${0:<!-- your content here... -->}",
- " <script src=\"${12:./js/main.js}\" defer></script>",
- "</body>",
- "",
- "</html>",
- ],
- "description": ""
- },
- "css boiler plate": {
- "scope": "css",
- "prefix": "css",
- "body": [
- "html {",
- " font-family: sans-serif;",
- " font-size: 100%;",
- " box-sizing: border-box;",
- "}",
- "",
- "*, ::before, ::after {",
- " box-sizing: inherit;",
- "}",
- "",
- "html, body {",
- " margin: 0;",
- " padding: 0;",
- " width: 100vw;",
- " min-height: 100%;",
- " text-rendering: optimizeLegibility;",
- "}",
- ""
- ]
- },
- "consoleLog": {
- "scope": "javascript",
- "prefix": "clg",
- "body": "console.log(${1:object});",
- "description": "Displays a message in the console"
- },
- "consoleLogObject": {
- "scope": "javascript",
- "prefix": "clo",
- "body": "console.log('${1:object} :>> ', ${1:object});",
- "description": "Displays an object in the console with its name"
- }
-}
diff --git a/.config/Code/User/spellright.dict b/.config/Code/User/spellright.dict
deleted file mode 100644
index 94f1e64..0000000
--- a/.config/Code/User/spellright.dict
+++ /dev/null
@@ -1,14 +0,0 @@
-srdusr
-gui
-url
-yara
-backend
-txt
-Regex
-github
-args
-grep
-res
-yar
-shipit
-json
diff --git a/.config/Code/User/vsc.css b/.config/Code/User/vsc.css
deleted file mode 100644
index 8316df0..0000000
--- a/.config/Code/User/vsc.css
+++ /dev/null
@@ -1,408 +0,0 @@
-/* *:not(.monaco-editor .margin):not(.monaco-editor .lines-content.monaco-editor-background):not(.monaco-editor .cursors-layer.cursor-smooth-caret-animation > .cursor):not(.monaco-scrollable-element > .scrollbar.vertical > .slider):not(.monaco-scrollable-element > .scrollbar.horizontal > .slider):not(.pane .pane-body .monaco-list .monaco-scrollable-element .monaco-list-rows) {
- transition-duration: 100ms !important;
-} */
-
-:root,
-::after,
-::before {
- --tab-height: 25px;
- --tab-radius: 8px;
- --ui-radius: 6px;
- --base-color: #bd93f9;
- --gradient-one: #cba6f7;
- --gradient-two: #89b4fa;
- --side-pane-color: var(--vscode-editor-background);
- --focus-border: #3f4f81;
- --sash-size: 2px !important;
- --sash-hover-size: 2px !important;
-}
-
-body > .monaco-workbench > .monaco-grid-view > .monaco-grid-branch-node > .monaco-split-view2 > .monaco-scrollable-element > .split-view-container {
- background: var(--vscode-editor-background) !important;
-}
-
-.editor-container {
- -webkit-font-smoothing: antialiased;
-}
-
-.monaco-workbench .part.titlebar .window-controls-container .window-icon,
-.monaco-workbench .part.editor > .content > .watermark {
- display: none !important;
-}
-
-.monaco-workbench .part.editor .tabs-and-actions-container .window-controls-container {
- display: flex;
- flex-grow: 0;
- flex-shrink: 0;
- text-align: center;
- -webkit-app-region: no-drag;
- height: 100%;
-}
-
-.monaco-workbench .part.editor .tabs-and-actions-container .window-controls-container .window-icon {
- width: 30px !important;
- height: 30px !important;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-.monaco-workbench .part.editor .tabs-and-actions-container .window-controls-container .window-icon.window-close:hover {
- background: #FF5555 !important;
-}
-
-.monaco-workbench .part.titlebar .window-controls-container .layout-dropdown-container {
- margin-left: auto !important;
-}
-
-.monaco-workbench .part.titlebar > .window-controls-container {
- width: unset !important;
-}
-
-.monaco-workbench .part.titlebar > .window-controls-container > .window-icon {
- width: 30px !important;
-}
-
-.monaco-workbench.linux .part.titlebar > .window-title {
- font-size: 12.5px !important;
-}
-
-.monaco-workbench .part.titlebar > .titlebar-container .window-appicon > .home-bar-icon-badge,
-.monaco-workbench .part.titlebar > .titlebar-container > .window-appicon:not(.codicon) {
- background-image: url(./vsc/vsc.svg) !important;
-}
-
-.monaco-workbench .part.editor > .content .editor-group-container.empty .editor-group-letterpress {
- background-image: url(./vsc/vsc-back.svg) !important;
-}
-
-.monaco-workbench .part.editor.has-watermark > .content.empty .editor-group-container > .editor-group-letterpress {
- background-position-y: 50% !important;
-}
-
-.mac,
-.windows,
-.linux {
- /* font-family: 'CaskaydiaCove Nerd Font' !important;
- --monaco-monospace-font: 'CaskaydiaCove Nerd Font' !important; */
- /* font-family: 'Delugia' !important;
- --monaco-monospace-font: 'Delugia Mono' !important; */
-}
-
-
-.monaco-workbench .part.sidebar > .title > .title-label h2 {
- font-weight: bold !important;
-}
-
-.monaco-sash.hover:before,
-.monaco-sash.active:before {
- background: linear-gradient(to bottom, var(--gradient-one), var(--gradient-two)) !important;
-}
-
-/* Squiggly lines to straight lines */
-
-.monaco-editor .squiggly-error {
- background: none !important;
- border-bottom: 0.5px solid var(--vscode-editorError-foreground) !important;
-}
-
-.monaco-editor .squiggly-warning {
- background: none !important;
- border-bottom: 0.5px solid var(--vscode-editorWarning-foreground) !important;
-}
-
-.monaco-editor .squiggly-info {
- background: none !important;
- border-bottom: 0.5px solid var(--vscode-editorInfo-foreground) !important;
-}
-
-.monaco-editor .squiggly-hint {
- background: none !important;
- border-bottom: 0.5px solid var(--vscode-editorHint-foreground) !important;
-}
-
-/* */
-
-/* Gradient Tab border */
-body.activity-bar-at-bottom .monaco-workbench .activitybar .active-item-indicator {
- display: block !important;
-}
-
-.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.checked .active-item-indicator:before {
- border: 0 !important;
- width: 3px !important;
- height: 100% !important;
- position: absolute !important;
- top: 0 !important;
- left: 0 !important;
- background-image: linear-gradient(to top, var(--gradient-one), var(--gradient-two)) !important;
- border-radius: 100vmax !important;
-}
-
-.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab > .tab-border-bottom-container,
-.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab > .tab-border-top-container {
- background-image: linear-gradient(to left, var(--gradient-one), var(--gradient-two)) !important;
- height: 3px !important;
- display: none !important;
-}
-
-.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .badge .badge-content {
- background-image: linear-gradient(90deg, var(--gradient-one), var(--gradient-two)) !important;
-}
-
-/* */
-
-/* Hides dirty tab white dot indicator */
-
-.monaco-workbench .part.editor > .content .editor-group-container.active > .title .tabs-container > .tab.dirty > .tab-actions .action-label:not(:hover):before,
-.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.dirty > .tab-actions .action-label:not(:hover):before {
- content: '' !important;
-}
-
-/* */
-
-/* Git icon background */
-
-.codicon-git-branch:before {
- background: linear-gradient(to bottom, var(--gradient-one), var(--gradient-two)) !important;
- -webkit-background-clip: text !important;
- background-clip: text !important;
- color: rgba(255, 255, 255, 0.4) !important;
-}
-
-/* */
-
-/* Editor Background */
-
-.monaco-editor,
-.split-view-view .lines-content.monaco-editor-background {
- background: url(./vsc/pek.png) bottom right / 10% auto no-repeat scroll;
- /*background: linear-gradient(rgba(0,0,0,.65), rgba(0,0,0,.65)), url(./vsc/bg.jpg) center center / auto 100vh no-repeat scroll;*/
-}
-
-/* */
-
-/* Scrollbar */
-.monaco-scrollable-element > .scrollbar > .slider {
- border-radius: 7px !important;
-}
-
-.monaco-scrollable-element > .scrollbar > .slider.active {
- background: linear-gradient(to top, var(--gradient-one), var(--gradient-two)) !important;
-}
-
-canvas.decorationsOverviewRuler,
-.monaco-scrollable-element > .scrollbar.vertical,
-.monaco-scrollable-element > .scrollbar.vertical > .slider {
- width: 7px !important;
-}
-
-.monaco-scrollable-element > .scrollbar.vertical > .slider {
- transition: all 100ms ease-out;
-}
-
-.monaco-scrollable-element > .scrollbar.horizontal,
-.monaco-scrollable-element > .scrollbar.horizontal > .slider {
- height: 7px !important;
-}
-
-.monaco-scrollable-element > .scrollbar.horizontal > .slider {
- transition: all 100ms ease-out;
-}
-
-.monaco-scrollable-element > .scrollbar.horizontal > .slider {
- width: 135px !important;
-}
-
-/* */
-
-/* Rounded UI */
-
-/* Suggestions */
-.monaco-editor .monaco-hover,
-.monaco-editor .suggest-widget,
-.monaco-editor .suggest-details {
- border-radius: var(--ui-radius) !important;
- overflow: hidden !important;
- box-shadow: rgb(0 0 0 / 36%) 0px 2px calc(var(--ui-radius) + 2px) !important;
-}
-
-/* Left pane selected file */
-.pane .pane-body,
-.pane .pane-body .monaco-list,
-.pane .pane-body .monaco-list .monaco-scrollable-element,
-.pane .pane-body .monaco-list .monaco-scrollable-element .monaco-list-rows,
-.pane .pane-body .monaco-list .monaco-scrollable-element .monaco-list-rows .monaco-list-row {
- overflow: visible !important;
-}
-
-.open-editors .monaco-list .monaco-list-row {
- padding-left: 0px !important;
-}
-
-.monaco-list-row:hover,
-.monaco-list-row.selected,
-.monaco-list-row.focused {
- border-radius: 0 var(--ui-radius) var(--ui-radius) 0 !important;
-}
-
-.monaco-workbench .monaco-list:not(.element-focused):focus:before,
-.monaco-select-box,
-.monaco-select-box-dropdown-container,
-.monaco-select-box-dropdown-container .monaco-list-row:hover,
-.monaco-select-box-dropdown-container .monaco-list-row.selected,
-.monaco-select-box-dropdown-container .monaco-list-row.focused {
- border-radius: var(--ui-radius) !important;
-}
-
-.monaco-list-row.selected::before,
-.monaco-list-row.selected::after {
- content: '' !important;
- display: block !important;
- position: absolute !important;
- width: var(--ui-radius) !important;
- height: var(--ui-radius) !important;
- left: 0 !important;
- pointer-events: none !important;
-}
-
-.monaco-list-row.selected::before {
- top: calc(0px - var(--ui-radius)) !important;
- background: radial-gradient(circle at 100% 0%, transparent 70.71%, var(--side-pane-color) 29.289%) no-repeat;
- background-position: 100% 0%;
-}
-
-.monaco-list-row.selected::after {
- bottom: calc(0px - var(--ui-radius)) !important;
- background: radial-gradient(circle at 100% 100%, transparent 70.71%, var(--side-pane-color) 29.289%) no-repeat;
- background-position: 100% 100%;
-}
-
-.monaco-button.monaco-text-button {
- border-radius: var(--ui-radius) !important;
-}
-
-/* */
-
-/* Smooth cursor */
-
-.monaco-editor .cursors-layer.cursor-smooth-caret-animation > .cursor {
- transition: all 100ms ease-out;
-}
-
-/* */
-
-/* Active tab (Without border) */
-
-..tab:first-child {
- margin-left: var(--tab-radius) !important;
- /* margin-left: calc(var(--tab-radius) - 2px) !important; */
-}
-
-..tab:last-child {
- margin-right: var(--tab-radius) !important;
- /* margin-right: calc(var(--tab-radius) - 2px) !important; */
-}
-
-..tab.active {
- /* border: 2px solid var(--base-color) !important; */
- /* background-color: transparent !important; */
- /* rgb(20, 24, 34) */
- border-radius: var(--tab-radius) var(--tab-radius) 0 0 !important;
- /* border-bottom: 2px solid #0c0e14 !important; */
- /* z-index: 1 !important; */
-}
-
-.tab.dirty-border-top > .tab-border-top-container {
- border-radius: var(--tab-radius) var(--tab-radius) 0 0 !important;
-}
-
-/* Border bottom radius*/
-..tab.active::before,
-..tab.active::after {
- content: '' !important;
- display: block !important;
- box-sizing: border-box !important;
- position: absolute !important;
- z-index: 1;
- width: var(--tab-radius) !important;
- height: var(--tab-radius) !important;
- bottom: 0px !important;
- /* bottom: -2px !important; */
- pointer-events: none !important;
- /* border-bottom: 2px solid var(--base-color) !important; */
-}
-
-...tab.active::before {
- left: calc(0px - var(--tab-radius)) !important;
- /* transform: translateX(calc(0px - var(--tab-radius))) !important; */
- /* border-right: 2px solid var(--base-color) !important; */
- border-bottom-right-radius: var(--tab-radius) !important;
- /* box-shadow: 3px 3px 0 3px var(--tab-color) !important; */
- box-shadow: 3px 3px 0 3px var(--vscode-editor-background) !important;
- /* background: radial-gradient(circle at 0% 0%, transparent 70.71%, var(--tab-color) 29.289%) no-repeat;
- background-position: 0% 0%; */
-}
-
-..tab.active::after {
- right: 0 !important;
- transform: translateX(var(--tab-radius)) !important;
- /* border-left: 2px solid var(--base-color) !important; */
- border-bottom-left-radius: var(--tab-radius) !important;
- /* box-shadow: -3px 3px 0 3px var(--tab-color) !important; */
- box-shadow: -3px 3px 0 3px var(--vscode-editor-background) !important;
- /* background: radial-gradient(circle at 100% 0%, transparent 70.71%, var(--tab-color) 29.289%) no-repeat;
- background-position: 100% 0%; */
-}
-
-/* .tabs-container:before {
- content: '' !important;
- top: 0 !important;
- left: 0 !important;
- right: 0 !important;
- bottom: 0 !important;
- background: linear-gradient(90deg, rgb(12, 14, 20), rgb(189, 172, 255), rgb(189, 147, 249), rgb(189, 147, 249), rgb(189, 147, 249), rgb(189, 172, 249), rgb(12, 14, 20)) !important;
- clip: rect(33px, 2600px, 33px, 0px) !important;
- position: absolute !important;
-}
-
-.tabs-container:after {
- content: '' !important;
- top: 0 !important;
- left: 0 !important;
- right: 0 !important;
- bottom: 0 !important;
- background: linear-gradient(90deg, rgb(12, 14, 20), rgb(189, 172, 255), rgb(189, 147, 249), rgb(189, 147, 249), rgb(189, 147, 249), rgb(189, 172, 249), rgb(12, 14, 20)) !important;
- clip: rect(33px, 2600px, 35px, 0px) !important;
- position: absolute !important;
-}
-
-.tab-label > .monaco-icon-label-container::after {
- background: transparent !important;
-} */
-
-/* */
-
-.tab{
- border-radius: 12px !important;
- margin: 5px !important;
- height: 40px !important;
- border:2px solid #313244 !important;
- background-color: #161925 !important;
-}
-.tab.active {
- border: 2px solid var(--gradient-one) !important;
- color: var(--gradient-one) !important;
- font-weight: bold !important;
-}
-.tab.dirty {
- border: 2px solid var(--gradient-two) !important;
-
-}
-.tabs-container{
- height: auto !important;
- padding: 5px !important;
-}
-.editor-actions {
- height: inherit !important;
-}
diff --git a/.config/Code/User/vsc.js b/.config/Code/User/vsc.js
deleted file mode 100644
index a14bf5a..0000000
--- a/.config/Code/User/vsc.js
+++ /dev/null
@@ -1,100 +0,0 @@
-function getOffset(el) {
- const rect = el.getBoundingClientRect();
- return {
- left: rect.left + window.scrollX,
- top: rect.top + window.scrollY,
- };
-}
-
-const prevOffset = {};
-
-const displayEffect = (event) => {
- if (prevOffset.top === undefined) {
- let initialOffset = getOffset(document.getElementsByClassName("cursor")[0]);
- prevOffset.top = initialOffset.top;
- prevOffset.left = initialOffset.left;
- }
-
- const existingRect = document.getElementById("myRect");
- if (existingRect !== null) {
- existingRect.remove();
- }
-
- setTimeout(function () {
- const currOffset = getOffset(document.getElementsByClassName("cursor")[0]);
- const top = prevOffset.top;
- const left = prevOffset.left;
- const rect = document.createElement("div");
-
- // console.log("prev: ", top, left);
- // console.log("curr: ", currOffset.top, currOffset.left);
-
- rect.id = "myRect";
- rect.style.cssText = `
- position:absolute;
- top:${top}px;
- left:${left}px;
- width:9px;
- height:20px;
- z-index:10;
- background-color:red;
- opacity: 0.5;
- `;
- rect.animate(
- [
- // keyframes
- { transform: "scale(1) skew(10deg)" },
- { transform: "scale(0) skew(10deg)" },
- ],
- {
- // timing options
- duration: 500,
- easing: "ease-in-out",
- direction: "alternate",
- iterations: Infinity,
- }
- );
-
- document.body.appendChild(rect);
- prevOffset.top = currOffset.top;
- prevOffset.left = currOffset.left;
- }, 24);
-};
-
-// NOTE: First enable editor.cursorSmoothCaretAnimation.
-// NOTE: Uncomment this to get a cursor trail effect.
-// document.addEventListener("keydown", displayEffect);
-
-const windowControls = document.createElement('div');
-windowControls.className = 'window-controls-container';
-const minimize = document.createElement('div');
-minimize.classList.add('window-icon', 'window-minimize', 'codicon', 'codicon-chrome-minimize');
-const restore = document.createElement('div');
-restore.classList.add('window-icon', 'window-max-restore', 'codicon', 'codicon-chrome-restore');
-const close = document.createElement('div');
-close.classList.add('window-icon', 'window-close', 'codicon', 'codicon-chrome-close');
-windowControls.appendChild(minimize);
-windowControls.appendChild(restore);
-windowControls.appendChild(close);
-// const html = '<div class="window-controls-container"><div class="window-icon window-minimize codicon codicon-chrome-minimize"></div><div class="window-icon window-max-restore codicon codicon-chrome-restore"></div><div class="window-icon window-close codicon codicon-chrome-close"></div></div>';
-// template.innerHTML = html;
-// const windowControls = template.content.firstChild;
-
-var observer = new MutationObserver(function (mutations, me) {
- console.warn('Observing if window controls present');
- // const windowControls = document.querySelector(".window-controls-container");
- const tabContainer = document.querySelector(".tabs-and-actions-container");
-
- if (windowControls && tabContainer) {
- tabContainer.appendChild(windowControls);
- console.warn('Observing completed');
- me.disconnect();
- return;
- }
-});
-
-
-// observer.observe(document, {
-// childList: true,
-// subtree: true
-// });
diff --git a/.config/X11/.Xresources b/.config/X11/.Xresources
deleted file mode 100644
index be509d1..0000000
--- a/.config/X11/.Xresources
+++ /dev/null
@@ -1,307 +0,0 @@
-st.alpha: 255
-!! Transparency (0-1):
-*.alpha: 0.2
-
-urxvt*shading: 10
-urxvt*tintColor: #000000
-urxvt*blurRadius: 5
-urxvt*transparent: true
-urxvt*depth: 32
-urxvt*background: rgba:0000/0000/1111/dddd
-!urxvt*background: rgba:0000/0000/0200/c800
-!URxvt*scrollstyle: plain
-URxvt.scrollBar: False
-!URxvt.font: xft:DejaVu Sans Mono:pixelsize=11:antialias=true
-URxvt.font: xft:monospace:Bold:pixelsize=12:antialias=true
-!URxvt*transparent: true
-!URxvt*shading: 5
-! change to whateva background
-URxvt.keysym.C-7: command:\033]11;#ff0000\007
-!URxvt*reverseVideo: True
-
-URxvt*saveLines : 10000
-
-!URxvt.keysym.Control-Up: \033[1;5A
-!URxvt.keysym.Control-Down: \033[1;5B
-!URxvt.keysym.Control-Left: \033[1;5D
-!URxvt.keysym.Control-Right: \033[1;5C
-
-URxvt.keysym.Control-1: command:\007\033]711;xft:monospace:Bold:pixelsize=12:antialias=true\007
-URxvt.keysym.Control-2: command:\007\033]711;xft:monospace:Bold:pixelsize=18:antialias=true\007
-URxvt.keysym.Control-3: command:\007\033]711;xft:monospace:Bold:pixelsize=28:antialias=true\007
-!URxvt.keysym.Control-1: command:\033]710;xft:Terminus:pixelsize=10:antialias=false\007\033]711;xft:Terminus:Bold:pixelsize=10:antialias=false\007
-!URxvt.keysym.Control-2: command:\033]710;xft:Terminus:pixelsize=14:antialias=false\007\033]711;xft:Terminus:Bold:pixelsize=14:antialias=false\007
-!URxvt.keysym.Control-3: command:\033]710;xft:Terminus:pixelsize=18:antialias=false\007\033]711;xft:Terminus:Bold:pixelsize=18:antialias=false\007
-!URxvt.keysym.Control-4: command:\033]710;xft:Terminus:Bold:pixelsize=20:antialias=false\007\033]711;xft:Terminus:Bold:pixelsize=20:antialias=false\007
-!URxvt.keysym.Control-5: command:\033]710;xft:Terminus:Bold:pixelsize=28:antialias=false\007\033]711;xft:Terminus:Bold:pixelsize=28:antialias=false\007
-
-
-
-
-
-
-
-!URxvt.perl-ext-common: selection-to-clipboard
-!URxvt.keysym.Shift-Control-V: eval:paste_clipboard
-!URxvt.keysym.Shift-Control-C: eval:selection_to_clipboard
-
-
-URxvt.iso14755: false
-URxvt.iso14755_52: false
-
-
-!URxvt.scrollBar: true
-!URxvt.scrollBar_right: true
-!URxvt.scrollBar_floating: true
-!URxvt.searchable-scrollback: false
-URxvt.url-select.underline: true
-URxvt.url-select.autocopy: true
-URxvt.cutchars: `""()''*<>[]{|}
-URxvt.cursorBlink: True
-URxvt.cursorColor: green
-URxvt.colorBD: yellow
-URxvt.colorUL: green
-!URxvt.blurRadius: 5
-
-
-!! Copy Paste & Other Extensions
-!URxvt.perl-ext-common: default,clipboard,url-select,keyboard-select
-!URxvt.copyCommand: xclip -i -selection clipboard
-!URxvt.pasteCommand: xclip -o -selection clipboard
-!URxvt.keysym.M-c: perl:clipboard:copy
-!URxvt.keysym.M-v: perl:clipboard:paste
-!URxvt.keysym.M-C-v: perl:clipboard:paste_escaped
-!URxvt.keysym.M-Escape: perl:keyboard-select:activate
-!URxvt.keysym.M-s: perl:keyboard-select:search
-!URxvt.keysym.M-u: perl:url-select:select_next
-!URxvt.urlLauncher: firefox
-!URxvt.underlineURLs: true
-!URxvt.urlButton: 1
-
-
-
-
-URxvt.keysym.Control-v: eval:paste_clipboard
-URxvt.keysym.Control-c: eval:selection_to_clipboard
-URxvt.keysym.Control-Meta-c: builtin-string:
-URxvt.keysym.Control-Meta-v: builtin-string:
-
-
-URxvt.keysym.Control-k: command:\033]720;1\007
-URxvt.keysym.Control-j: command:\033]721;1\007
-
-
-URxvt.keysym.Meta-Page_Up: perl:pageup
-URxvt.keysym.Meta-Page_Down: perl:pagedown
-URxvt.perl-lib: /usr/local/lib/urxvt/perl
-URxvt.perl-ext: custom.pl
-
-
-!URxvt*loginShell: true
-!URxvt*termName: screen-256color
-
-!URxvt*perl-ext-common:
-!URxvt*perl-ext:
-
-
-!URxvt.keysym.Control-B: eval:scroll_up_pages 1
-!URxvt.keysym.Control-F: eval:scroll_down_pages 1
-
-
-URxvt.perl-ext-common: default,matcher,clipboard,tabbed
-URxvt.clipboard.autocopy: true
-URxvt.keysym.M-c: perl:clipboard:copy
-URxvt.keysym.M-v: perl:clipboard:paste
-
-!URxvt.url-launcher: /usr/bin/xdg-open
-!URxvt.matcher.button: 1
-!URxvt.keysym.C-Delete: perl:matcher:last
-!URxvt.keysym.M-Delete: perl:matcher:list
-!URxvt.matcher.rend.0: Uline Bold fg5
-
-!URxvt.perl-ext-common: ...,tabbed,...
-
-
-!Key Description
-!Shift+Down New tab
-!Shift+Left Go to left tab
-!Shift+Right Go to right tab
-!Ctrl+Left Move tab to the left
-!Ctrl+Right Move tab to the right
-!Ctrl+d Close tab
-
-
-!URxvt.keysym.Control-k: \033[1;5A
-!URxvt.keysym.Control-j: \033[1;5B
-!URxvt.keysym.Control-l: \033[1;5C
-!URxvt.keysym.Control-h: \033[1;5D
-
-!^[[5~
-
-
-rofi.kb-row-up: Up,Control+k,Shift+Tab,Shift+ISO_Left_Tab
-rofi.kb-row-down: Down,Control+j
-rofi.kb-accept-entry: Control+m,Return,KP_Enter
-rofi.terminal: st
-rofi.kb-remove-to-eol: Control+Shift+e
-rofi.kb-mode-next: Shift+Right,Control+Tab,Control+l
-rofi.kb-mode-previous: Shift+Left,Control+Shift+Tab,Control+h
-rofi.kb-remove-char-back: BackSpace
-
-
-
-
-!! Set a default font and font size as below:
-!*.font: monospace:size=10
-rofi.font: Noto Sans 11
-
-/* name dark light */
-/* black 0 8 */
-/* red 1 9 */
-/* green 2 10 */
-/* yellow 3 11 */
-/* blue 4 12 */
-/* purple 5 13 */
-/* cyan 6 14 */
-/* white 7 15 */
-
-/* !! gruvbox: */
-/* *.color0: #1d2021 */
-/* *.color1: #cc241d */
-/* *.color2: #98971a */
-/* *.color3: #d79921 */
-/* *.color4: #458588 */
-/* *.color5: #b16286 */
-/* *.color6: #689d6a */
-/* *.color7: #a89984 */
-/* *.color8: #928374 */
-/* *.color9: #fb4934 */
-/* *.color10: #b8bb26 */
-/* *.color11: #fabd2f */
-/* *.color12: #83a598 */
-/* *.color13: #d3869b */
-/* *.color14: #8ec07c */
-/* *.color15: #ebdbb2 */
-/* *.color256: #1d2021 */
-/* *.color257: #ebdbb2 */
-
-* !! gruvbox light: */
-* *.color0: #fbf1c7 */
-* *.color1: #cc241d */
-* *.color2: #98971a */
-* *.color3: #d79921 */
-* *.color4: #458588 */
-* *.color5: #b16286 */
-* *.color6: #689d6a */
-* *.color7: #7c6f64 */
-* *.color8: #928374 */
-* *.color9: #9d0006 */
-* *.color10: #79740e */
-* *.color11: #b57614 */
-* *.color12: #076678 */
-* *.color13: #8f3f71 */
-* *.color14: #427b58 */
-* *.color15: #3c3836 */
-* *.background: #fbf1c7 */
-* *.foreground: #282828 */
-* st.alpha: 0.2 */
-
-/* !! brogrammer: */
-/* *.foreground: #d6dbe5 */
-/* *.background: #131313 */
-/* *.color0: #1f1f1f */
-/* *.color8: #d6dbe5 */
-/* *.color1: #f81118 */
-/* *.color9: #de352e */
-/* *.color2: #2dc55e */
-/* *.color10: #1dd361 */
-/* *.color3: #ecba0f */
-/* *.color11: #f3bd09 */
-/* *.color4: #2a84d2 */
-/* *.color12: #1081d6 */
-/* *.color5: #4e5ab7 */
-/* *.color13: #5350b9 */
-/* *.color6: #1081d6 */
-/* *.color14: #0f7ddb */
-/* *.color7: #d6dbe5 */
-/* *.color15: #ffffff */
-/* *.colorBD: #d6dbe5 */
-
-/* ! base16 */
-/* *.color0: #181818 */
-/* *.color1: #ab4642 */
-/* *.color2: #a1b56c */
-/* *.color3: #f7ca88 */
-/* *.color4: #7cafc2 */
-/* *.color5: #ba8baf */
-/* *.color6: #86c1b9 */
-/* *.color7: #d8d8d8 */
-/* *.color8: #585858 */
-/* *.color9: #ab4642 */
-/* *.color10: #a1b56c */
-/* *.color11: #f7ca88 */
-/* *.color12: #7cafc2 */
-/* *.color13: #ba8baf */
-/* *.color14: #86c1b9 */
-/* *.color15: #f8f8f8 */
-
-/* !! solarized */
-/* *.color0: #073642 */
-/* *.color1: #dc322f */
-/* *.color2: #859900 */
-/* *.color3: #b58900 */
-/* *.color4: #268bd2 */
-/* *.color5: #d33682 */
-/* *.color6: #2aa198 */
-/* *.color7: #eee8d5 */
-/* *.color9: #cb4b16 */
-/* *.color8: #fdf6e3 */
-/* *.color10: #586e75 */
-/* *.color11: #657b83 */
-/* *.color12: #839496 */
-/* *.color13: #6c71c4 */
-/* *.color14: #93a1a1 */
-/* *.color15: #fdf6e3 */
-
-/* !! xterm */
-/* *.color0: #000000 */
-/* *.color1: #cd0000 */
-/* *.color2: #00cd00 */
-/* *.color3: #cdcd00 */
-/* *.color4: #0000cd */
-/* *.color5: #cd00cd */
-/* *.color6: #00cdcd */
-/* *.color7: #e5e5e5 */
-/* *.color8: #4d4d4d */
-/* *.color9: #ff0000 */
-/* *.color10: #00ff00 */
-/* *.color11: #ffff00 */
-/* *.color12: #0000ff */
-/* *.color13: #ff00ff */
-/* *.color14: #00ffff */
-/* *.color15: #aabac8 */
-/* *.background: #000000 */
-
-/* ! Dracula Xresources palette */
-/* *.foreground: #F8F8F2 */
-/* *.background: #282A36 */
-/* *.color0: #000000 */
-/* *.color8: #4D4D4D */
-/* *.color1: #FF5555 */
-/* *.color9: #FF6E67 */
-/* *.color2: #50FA7B */
-/* *.color10: #5AF78E */
-/* *.color3: #F1FA8C */
-/* *.color11: #F4F99D */
-/* *.color4: #BD93F9 */
-/* *.color12: #CAA9FA */
-/* *.color5: #FF79C6 */
-/* *.color13: #FF92D0 */
-/* *.color6: #8BE9FD */
-/* *.color14: #9AEDFE */
-/* *.color7: #BFBFBF */
-/* *.color15: #E6E6E6 */
-
-/* *.background: .color0 */
-/* *.color256: 0#1d2021 */
-/* *.color257: 15#ebdbb2 */
diff --git a/.config/X11/.xbindkeysrc b/.config/X11/.xbindkeysrc
deleted file mode 100644
index 481943d..0000000
--- a/.config/X11/.xbindkeysrc
+++ /dev/null
@@ -1,31 +0,0 @@
-# # Up
-# "xdotool mousemove_relative --sync -- 0 -24"
-# alt + w
-#
-# # Left
-# "xdotool mousemove_relative --sync -- -24 0"
-# alt + a
-#
-# # Down
-# "xdotool mousemove_relative --sync -- 0 24"
-# alt + s
-#
-# # Right
-# "xdotool mousemove_relative --sync -- 24 0"
-# alt + d
-#
-# # left + up
-# "xdotool mousemove_relative --sync -- -24 -24"
-# Shift+alt + q
-#
-# # right + up
-# "xdotool mousemove_relative --sync -- 24 -24"
-# Shift+alt + e
-#
-# # right + down
-# "xdotool mousemove_relative --sync -- 24 24"
-# Shift+alt + d
-#
-# # left + down
-# "xdotool mousemove_relative --sync -- -24 24"
-# Shift+alt + a
diff --git a/.config/X11/.xinitrc b/.config/X11/.xinitrc
deleted file mode 100755
index d500044..0000000
--- a/.config/X11/.xinitrc
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/bin/sh
-#
-#░█▀▀░▀█▀░█▀█░█▀▄░▀█▀░█░█
-#░▀▀█░░█░░█▀█░█▀▄░░█░░▄▀▄
-#░▀▀▀░░▀░░▀░▀░▀░▀░░▀░░▀░▀
-#
-
-# xinitrc.d
-if [ -d /etc/X11/xinit/xinitrc.d ]; then
- for f in /etc/X11/xinit/xinitrc.d/*; do
- [ -x "$f" ] && . "$f"
- done
- unset f
-fi
-
-# Keyboard layout
-setxkbmap -model pc105 -layout us -variant qwerty
-
-# xinitrc runs automatically when you run startx.
-
-# There are some small but important commands that need to be run when we start
-# the graphical environment. There is a link to this file in ~/.xprofile
-# because that file is run automatically if someone uses a display manager
-# (login screen) and so they are needed there. To prevent doubling up commands,
-# I source them here with the line below.
-
-# Profile
-[[ -f /etc/profile ]] && source /etc/profile
-
-if [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/X11/.xprofile" ]; then
- . "${XDG_CONFIG_HOME:-$HOME/.config}/X11/.xprofile"
-else
- . "$HOME/.xprofile"
-fi
diff --git a/.config/X11/.xprofile b/.config/X11/.xprofile
deleted file mode 100644
index bc2e5f8..0000000
--- a/.config/X11/.xprofile
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-# Xresources
-[[ -f ~/.config/X11/.Xresources ]] && xrdb -merge ~/.config/X11/.Xresources
-
-#Xset
-xset r rate 150 50
-#xset r rate 290 70
-
-# Xbindkeys
-xbindkeys -f "$XDG_CONFIG_HOME"/X11/xbindkeysrc
-
-# XKB
-setxkbmap -print | xkbcomp -I"$HOME"/.config/xkb - "$DISPLAY"
-
-#export XAUTHORITY="$XDG_RUNTIME_DIR/.Xauthority" # This line will break some DMs.
-export USERXSESSION="$XDG_CACHE_HOME/X11/xsession"
-export USERXSESSIONRC="$XDG_CACHE_HOME/X11/xsessionrc"
-export ALTUSERXSESSION="$XDG_CACHE_HOME/X11/Xsession"
-export ERRFILE="$XDG_CACHE_HOME/X11/xsession-errors"
-
-if [[ "$(tty)" = "/dev/tty1" ]]; then
- pgrep bspwm || startx "$XDG_CONFIG_HOME/X11/.xinitrc"
-fi
diff --git a/.config/ags/.eslintrc.yml b/.config/ags/.eslintrc.yml
deleted file mode 100644
index ff96a83..0000000
--- a/.config/ags/.eslintrc.yml
+++ /dev/null
@@ -1,130 +0,0 @@
-env:
- es2022: true
-extends:
- - "eslint:recommended"
- - "plugin:@typescript-eslint/recommended"
-parser: "@typescript-eslint/parser"
-parserOptions:
- ecmaVersion: 2022
- sourceType: "module"
- project: "./tsconfig.json"
- warnOnUnsupportedTypeScriptVersion: false
-root: true
-ignorePatterns:
- - types/
-plugins:
- - "@typescript-eslint"
-rules:
- "@typescript-eslint/ban-ts-comment":
- - "off"
- "@typescript-eslint/no-non-null-assertion":
- - "off"
- # "@typescript-eslint/no-explicit-any":
- # - "off"
- "@typescript-eslint/no-unused-vars":
- - error
- - varsIgnorePattern: (^unused|_$)
- argsIgnorePattern: ^(unused|_)
- "@typescript-eslint/no-empty-interface":
- - "off"
-
- arrow-parens:
- - error
- - as-needed
- comma-dangle:
- - error
- - always-multiline
- comma-spacing:
- - error
- - before: false
- after: true
- comma-style:
- - error
- - last
- curly:
- - error
- - multi-or-nest
- - consistent
- dot-location:
- - error
- - property
- eol-last:
- - error
- eqeqeq:
- - error
- - always
- indent:
- - error
- - 4
- - SwitchCase: 1
- keyword-spacing:
- - error
- - before: true
- lines-between-class-members:
- - error
- - always
- - exceptAfterSingleLine: true
- padded-blocks:
- - error
- - never
- - allowSingleLineBlocks: false
- prefer-const:
- - error
- quotes:
- - error
- - double
- - avoidEscape: true
- semi:
- - error
- - never
- nonblock-statement-body-position:
- - error
- - below
- no-trailing-spaces:
- - error
- no-useless-escape:
- - off
- max-len:
- - error
- - code: 100
- func-call-spacing:
- - error
- array-bracket-spacing:
- - error
- space-before-function-paren:
- - error
- - anonymous: never
- named: never
- asyncArrow: ignore
- space-before-blocks:
- - error
- key-spacing:
- - error
- object-curly-spacing:
- - error
- - always
-globals:
- Widget: readonly
- Utils: readonly
- App: readonly
- Variable: readonly
- Service: readonly
- pkg: readonly
- ARGV: readonly
- Debugger: readonly
- GIRepositoryGType: readonly
- globalThis: readonly
- imports: readonly
- Intl: readonly
- log: readonly
- logError: readonly
- print: readonly
- printerr: readonly
- window: readonly
- TextEncoder: readonly
- TextDecoder: readonly
- console: readonly
- setTimeout: readonly
- setInterval: readonly
- clearTimeout: readonly
- clearInterval: readonly
diff --git a/.config/ags/.gitignore b/.config/ags/.gitignore
deleted file mode 100644
index f56dbd1..0000000
--- a/.config/ags/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-node_modules
-types
-package-lock.json
-bun.lockb
-flake.lock
-.weather
diff --git a/.config/ags/assets/arrows-down.svg b/.config/ags/assets/arrows-down.svg
deleted file mode 100644
index 5851aed..0000000
--- a/.config/ags/assets/arrows-down.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" version="1.1">
- <defs>
- <style id="current-color-scheme" type="text/css">
- .ColorScheme-Text { color:#dfdfdf; } .ColorScheme-Highlight { color:#4285f4; } .ColorScheme-NeutralText { color:#ff9800; } .ColorScheme-PositiveText { color:#4caf50; } .ColorScheme-NegativeText { color:#f44336; }
- </style>
- </defs>
- <g transform="matrix(1,0,0,1,4,4)">
- <path class="ColorScheme-Text" d="M 7,2 V 10 L 3.5,6.5 2,8 8,14 14,8 12.5,6.5 9,10 V 2 Z" style="fill:currentColor"/>
- </g>
-</svg>
diff --git a/.config/ags/assets/arrows-left.svg b/.config/ags/assets/arrows-left.svg
deleted file mode 100644
index f3c1b2e..0000000
--- a/.config/ags/assets/arrows-left.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" version="1.1">
- <defs>
- <style id="current-color-scheme" type="text/css">
- .ColorScheme-Text { color:#dfdfdf; } .ColorScheme-Highlight { color:#4285f4; } .ColorScheme-NeutralText { color:#ff9800; } .ColorScheme-PositiveText { color:#4caf50; } .ColorScheme-NegativeText { color:#f44336; }
- </style>
- </defs>
- <g transform="matrix(1,0,0,1,4,4)">
- <path class="ColorScheme-Text" d="M 14,7 H 6 L 9.5,3.5 8,2 2,8 8,14 9.5,12.5 6,9 H 14 Z" style="fill:currentColor"/>
- </g>
-</svg>
diff --git a/.config/ags/assets/arrows-right.svg b/.config/ags/assets/arrows-right.svg
deleted file mode 100644
index 30baa8f..0000000
--- a/.config/ags/assets/arrows-right.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" version="1.1">
- <defs>
- <style id="current-color-scheme" type="text/css">
- .ColorScheme-Text { color:#dfdfdf; } .ColorScheme-Highlight { color:#4285f4; } .ColorScheme-NeutralText { color:#ff9800; } .ColorScheme-PositiveText { color:#4caf50; } .ColorScheme-NegativeText { color:#f44336; }
- </style>
- </defs>
- <g transform="matrix(1,0,0,1,4,4)">
- <path class="ColorScheme-Text" d="M 2,9 H 10 L 6.5,12.5 8,14 14,8 8,2 6.5,3.5 10,7 H 2 Z" style="fill:currentColor"/>
- </g>
-</svg>
diff --git a/.config/ags/assets/arrows-up.svg b/.config/ags/assets/arrows-up.svg
deleted file mode 100644
index 68b9944..0000000
--- a/.config/ags/assets/arrows-up.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" version="1.1">
- <defs>
- <style id="current-color-scheme" type="text/css">
- .ColorScheme-Text { color:#dfdfdf; } .ColorScheme-Highlight { color:#4285f4; } .ColorScheme-NeutralText { color:#ff9800; } .ColorScheme-PositiveText { color:#4caf50; } .ColorScheme-NegativeText { color:#f44336; }
- </style>
- </defs>
- <g transform="matrix(1,0,0,1,4,4)">
- <path class="ColorScheme-Text" d="M 7,14 V 6 L 3.5,9.5 2,8 8,2 14,8 12.5,9.5 9,6 V 14 Z" style="fill:currentColor"/>
- </g>
-</svg>
diff --git a/.config/ags/assets/battery-flash-symbolic.svg b/.config/ags/assets/battery-flash-symbolic.svg
deleted file mode 100644
index 21b5e33..0000000
--- a/.config/ags/assets/battery-flash-symbolic.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
- <path d="m 8.96875 0 c -0.332031 0.0117188 -0.640625 0.1875 -0.816406 0.46875 l -5 8 c -0.105469 0.171875 -0.152344 0.355469 -0.152344 0.53125 v 1 h 3 v 5 c 0 1.003906 1.316406 1.378906 1.847656 0.53125 l 5 -8 c 0.105469 -0.171875 0.152344 -0.355469 0.152344 -0.53125 v -1 h -3 v -5 c 0 -0.5625 -0.464844 -1.015625 -1.03125 -1 z m 0 0"/>
-</svg>
diff --git a/.config/ags/assets/bomb-kill.svg b/.config/ags/assets/bomb-kill.svg
deleted file mode 100644
index a6e9f09..0000000
--- a/.config/ags/assets/bomb-kill.svg
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- viewBox="0 0 22 22"
- version="1.1"
- id="svg1"
- sodipodi:docname="bomb-kill.svg"
- inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:svg="http://www.w3.org/2000/svg">
- <sodipodi:namedview
- id="namedview1"
- pagecolor="#ffffff"
- bordercolor="#000000"
- borderopacity="0.25"
- inkscape:showpageshadow="2"
- inkscape:pageopacity="0.0"
- inkscape:pagecheckerboard="0"
- inkscape:deskcolor="#d1d1d1"
- inkscape:zoom="28.545455"
- inkscape:cx="11"
- inkscape:cy="11"
- inkscape:current-layer="svg1" />
- <defs
- id="defs3051">
- <style
- type="text/css"
- id="current-color-scheme">.ColorScheme-Text { color: #fcfcfc; } </style>
- </defs>
- <path
- style="fill:currentColor;fill-opacity:1;stroke:none;stroke-width:0.855269"
- d="m 17.858728,4.1743879 c -1.13103,0.2314779 -2.107737,0.9080479 -2.727751,1.858046 -0.214576,-0.095764 -0.450425,-0.1516429 -0.701613,-0.1516429 -0.178764,0 -0.347261,0.034927 -0.509046,0.084986 -0.975172,-0.5918778 -2.11854,-0.9381881 -3.348989,-0.9381881 -3.5622531,0 -6.4300571,2.8539574 -6.4300571,6.3990111 0,3.545055 2.867804,6.399011 6.4300571,6.399011 3.562254,0 6.430058,-2.853956 6.430058,-6.39901 0,-1.224507 -0.347991,-2.3623553 -0.94274,-3.3328191 0.0503,-0.1610043 0.0854,-0.3286874 0.0854,-0.5065884 0,-0.3822616 -0.128156,-0.7309813 -0.339922,-1.0148431 0.459139,-0.7437673 1.188057,-1.2957452 2.054604,-1.5197652 V 4.1743879 M 6.9862372,7.1755908 C 6.173802,8.138787 5.6851553,9.38169 5.6851553,10.743373 c 0,3.07238 2.4854307,5.54581 5.5727167,5.54581 1.36784,0 2.61568,-0.486764 3.583418,-1.2948 -1.020672,1.209625 -2.551332,1.978028 -4.269961,1.978028 -3.0872862,0 -5.5727161,-2.47343 -5.5727161,-5.54581 0,-1.7106949 0.7716789,-3.2352661 1.9876243,-4.2510102"
- class="ColorScheme-Text"
- id="path1" />
-</svg>
diff --git a/.config/ags/assets/chat-bubbles-symbolic.svg b/.config/ags/assets/chat-bubbles-symbolic.svg
deleted file mode 100644
index fdee0b3..0000000
--- a/.config/ags/assets/chat-bubbles-symbolic.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
- <path d="m 14 3.175781 v 3.824219 c 0 2.179688 -1.820312 4 -4 4 h -3.585938 l -2 2 h 5.585938 l 3 3 v -3 c 1.644531 0 3 -1.355469 3 -3 v -4 c 0 -1.292969 -0.839844 -2.40625 -2 -2.824219 z m 0 0" fill-opacity="0.34902"/>
- <path d="m 3 0 c -1.644531 0 -3 1.355469 -3 3 v 4 c 0 1.644531 1.355469 3 3 3 v 3 l 3 -3 h 4 c 1.644531 0 3 -1.355469 3 -3 v -4 c 0 -1.644531 -1.355469 -3 -3 -3 z m 0 0"/>
-</svg>
diff --git a/.config/ags/assets/controller-symbolic.svg b/.config/ags/assets/controller-symbolic.svg
deleted file mode 100644
index 98bf5d6..0000000
--- a/.config/ags/assets/controller-symbolic.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
- <path d="m 3.785156 2.03125 c -0.242187 0 -0.523437 0.066406 -0.804687 0.21875 c -1.039063 0.546875 -1.992188 2.335938 -2.511719 4.65625 c -0.4414062 1.972656 -0.605469 4.664062 -0.339844 5.75 c 0.226563 0.933594 0.625 1.34375 1.332032 1.34375 c 1.042968 -0.019531 2.359374 -1.183594 3.191406 -2.75 c 0.601562 -0.867188 2 -1.261719 3.347656 -1.21875 c 1.347656 -0.046875 2.746094 0.351562 3.347656 1.21875 c 0.832032 1.566406 2.148438 2.730469 3.191406 2.75 c 0.707032 0 1.105469 -0.410156 1.332032 -1.34375 c 0.265625 -1.085938 0.101562 -3.777344 -0.339844 -5.75 c -0.519531 -2.320312 -1.472656 -4.109375 -2.511719 -4.65625 c -0.566406 -0.304688 -1.039062 -0.296875 -1.453125 0 c -0.527344 0.375 -1.628906 0.78125 -3.566406 0.78125 c -1.9375 0.003906 -3.039062 -0.40625 -3.566406 -0.78125 c -0.207032 -0.148438 -0.40625 -0.21875 -0.648438 -0.21875 z m 0.246094 3 h 0.992188 v 1 h 0.992187 v 1 h -0.992187 v 1 h -0.992188 v -1 h -0.992188 v -1 h 0.992188 z m 7.441406 0 c 0.273438 0 0.496094 0.222656 0.496094 0.5 s -0.222656 0.5 -0.496094 0.5 c -0.273437 0 -0.496094 -0.222656 -0.496094 -0.5 s 0.222657 -0.5 0.496094 -0.5 z m -0.992187 1 c 0.273437 0 0.496093 0.222656 0.496093 0.5 s -0.222656 0.5 -0.496093 0.5 c -0.273438 0 -0.496094 -0.222656 -0.496094 -0.5 s 0.222656 -0.5 0.496094 -0.5 z m 1.984375 0 c 0.273437 0 0.496094 0.222656 0.496094 0.5 s -0.222657 0.5 -0.496094 0.5 c -0.273438 0 -0.496094 -0.222656 -0.496094 -0.5 s 0.222656 -0.5 0.496094 -0.5 z m -0.992188 1 c 0.273438 0 0.496094 0.222656 0.496094 0.5 s -0.222656 0.5 -0.496094 0.5 c -0.273437 0 -0.496094 -0.222656 -0.496094 -0.5 s 0.222657 -0.5 0.496094 -0.5 z m 0 0"/>
-</svg>
diff --git a/.config/ags/assets/controls-symbolic.svg b/.config/ags/assets/controls-symbolic.svg
deleted file mode 100644
index 7df5663..0000000
--- a/.config/ags/assets/controls-symbolic.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
- <path d="m 4.550781 1 c -1.9375 0 -3.5 1.5625 -3.5 3.5 s 1.5625 3.5 3.5 3.5 h 7 c 1.941407 0 3.5 -1.5625 3.5 -3.5 s -1.558593 -3.5 -3.5 -3.5 z m 7 1 c 1.386719 0 2.5 1.113281 2.5 2.5 c 0 1.382812 -1.113281 2.5 -2.5 2.5 c -1.382812 0 -2.5 -1.117188 -2.5 -2.5 c 0 -1.386719 1.117188 -2.5 2.5 -2.5 z m 0 0"/>
- <path d="m 4.550781 9 c -1.9375 0 -3.5 1.5625 -3.5 3.5 s 1.5625 3.5 3.5 3.5 h 7 c 1.941407 0 3.5 -1.5625 3.5 -3.5 s -1.558593 -3.5 -3.5 -3.5 z m 0 1 c 1.386719 0 2.5 1.113281 2.5 2.5 c 0 1.382812 -1.113281 2.5 -2.5 2.5 c -1.382812 0 -2.5 -1.117188 -2.5 -2.5 c 0 -1.386719 1.117188 -2.5 2.5 -2.5 z m 0 0" fill-opacity="0.34902"/>
-</svg>
diff --git a/.config/ags/assets/dark-mode-symbolic.svg b/.config/ags/assets/dark-mode-symbolic.svg
deleted file mode 100644
index 9f2e6b4..0000000
--- a/.config/ags/assets/dark-mode-symbolic.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
- <path d="m 0.917969 8.003906 c 0 3.914063 3.164062 7.078125 7.078125 7.078125 c 3.605468 -0.007812 6.617187 -2.703125 7.023437 -6.285156 c 0.042969 -0.378906 -0.136719 -0.75 -0.457031 -0.957031 c -0.324219 -0.203125 -0.738281 -0.207032 -1.0625 -0.003906 c -0.609375 0.375 -1.316406 0.578124 -2.03125 0.578124 c -2.140625 0 -3.882812 -1.742187 -3.882812 -3.882812 c 0 -0.714844 0.203124 -1.421875 0.578124 -2.03125 c 0.203126 -0.324219 0.199219 -0.738281 -0.003906 -1.0625 c -0.207031 -0.320312 -0.578125 -0.5 -0.957031 -0.457031 c -3.582031 0.40625 -6.277344 3.417969 -6.285156 7.023437 z m 4.667969 -3.472656 c 0 3.253906 2.628906 5.882812 5.886718 5.882812 c 1.085938 0 2.152344 -0.304687 3.078125 -0.878906 l -1.519531 -0.960937 c -0.289062 2.554687 -2.464844 4.503906 -5.035156 4.507812 c -2.796875 0 -5.078125 -2.28125 -5.078125 -5.078125 c 0.003906 -2.570312 1.953125 -4.746094 4.507812 -5.035156 l -0.960937 -1.519531 c -0.574219 0.925781 -0.875 1.992187 -0.878906 3.082031 z m 0 0"/>
-</svg>
diff --git a/.config/ags/assets/float.svg b/.config/ags/assets/float.svg
deleted file mode 100644
index dc8078a..0000000
--- a/.config/ags/assets/float.svg
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- viewBox="0 0 16 16"
- version="1.1"
- id="svg2"
- sodipodi:docname="float.svg"
- inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:svg="http://www.w3.org/2000/svg">
- <sodipodi:namedview
- id="namedview2"
- pagecolor="#ffffff"
- bordercolor="#000000"
- borderopacity="0.25"
- inkscape:showpageshadow="2"
- inkscape:pageopacity="0.0"
- inkscape:pagecheckerboard="0"
- inkscape:deskcolor="#d1d1d1"
- inkscape:zoom="39.25"
- inkscape:cx="8"
- inkscape:cy="8"
- inkscape:current-layer="svg2" />
- <defs
- id="defs1">
- <style
- type="text/css"
- id="current-color-scheme">.ColorScheme-Text { color: #fcfcfc; } </style>
- </defs>
- <path
- class="ColorScheme-Text"
- d="M 7.8252389,2.2944865 A 5.6426155,5.4275975 0 0 0 2.1826234,7.722084 5.6426155,5.4275975 0 0 0 7.8252389,13.149682 5.6426155,5.4275975 0 0 0 13.467855,7.722084 5.6426155,5.4275975 0 0 0 7.8252389,2.2944865 m 0,0.9045996 A 4.7021795,4.5229979 0 0 1 12.527419,7.722084 4.7021795,4.5229979 0 0 1 7.8252389,12.245082 4.7021795,4.5229979 0 0 1 3.1230593,7.722084 4.7021795,4.5229979 0 0 1 7.8252389,3.1990861"
- fill="currentColor"
- id="path1"
- style="stroke-width:0.922343" />
- <path
- class="ColorScheme-Text"
- d="M 12.52741,7.7220642 A 4.7021795,4.5229979 0 0 1 7.8252308,12.245062 4.7021795,4.5229979 0 0 1 3.1230512,7.7220642 4.7021795,4.5229979 0 0 1 7.8252308,3.1990663 4.7021795,4.5229979 0 0 1 12.52741,7.7220642 Z"
- fill="currentColor"
- fill-opacity="0.5"
- id="path2"
- style="stroke-width:0.922343" />
-</svg>
diff --git a/.config/ags/assets/fullscreen.svg b/.config/ags/assets/fullscreen.svg
deleted file mode 100644
index e9ab0b8..0000000
--- a/.config/ags/assets/fullscreen.svg
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- width="24"
- height="24"
- version="1.1"
- id="svg1"
- sodipodi:docname="fullscreen.svg"
- inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:svg="http://www.w3.org/2000/svg">
- <sodipodi:namedview
- id="namedview1"
- pagecolor="#ffffff"
- bordercolor="#000000"
- borderopacity="0.25"
- inkscape:showpageshadow="2"
- inkscape:pageopacity="0.0"
- inkscape:pagecheckerboard="0"
- inkscape:deskcolor="#d1d1d1"
- inkscape:zoom="19.666667"
- inkscape:cx="12"
- inkscape:cy="12"
- inkscape:current-layer="svg1" />
- <defs
- id="defs1">
- <style
- id="current-color-scheme"
- type="text/css">
- .ColorScheme-Text { color:#dfdfdf; } .ColorScheme-Highlight { color:#4285f4; } .ColorScheme-NeutralText { color:#ff9800; } .ColorScheme-PositiveText { color:#4caf50; } .ColorScheme-NegativeText { color:#f44336; }
- </style>
- </defs>
- <g
- transform="matrix(0.94763804,0,0,0.95290155,4.4188957,4.3767876)"
- id="g1">
- <path
- style="fill:currentColor"
- class="ColorScheme-Text"
- d="M 4,10 1,8 4,6 Z m 8,0 3,-2 -3,-2 z m -4,5 2,-3 H 6 Z M 8,1 10,4 H 6 Z m 7,6 h 1 V 9 H 15 Z M 0,7 H 1 V 9 H 0 Z m 7,8 h 2 v 1 H 7 Z M 7,0 H 9 V 1 H 7 Z M 0,16 v -5 h 1 v 4 h 4 v 1 z m 16,0 v -4 h -1 v 3 h -4 v 1 z M 16,0 V 5 H 15 V 1 H 11 V 0 Z M 0,0 V 5 H 1 V 1 H 5 V 0 Z"
- id="path1" />
- </g>
-</svg>
diff --git a/.config/ags/assets/hourglass-symbolic.svg b/.config/ags/assets/hourglass-symbolic.svg
deleted file mode 100644
index aa4f97c..0000000
--- a/.config/ags/assets/hourglass-symbolic.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
- <path d="m 5 0 c -0.96875 0 -2 1.050781 -2 2 v 2.988281 c 0 0.429688 0.222656 0.675781 0.554688 1.007813 l 2.023437 2.003906 l -2.007813 1.992188 c -0.367187 0.363281 -0.570312 0.6875 -0.570312 1 v 3.007812 c 0 1.011719 0.988281 2 2 2 h 6 c 1.007812 0 2 -1.011719 2 -2.003906 v -3.003906 c 0 -0.3125 -0.222656 -0.628907 -0.570312 -0.976563 l -2.015626 -2.015625 l 1.988282 -1.988281 c 0.261718 -0.261719 0.585937 -0.6875 0.597656 -1.015625 v -2.996094 c 0 -1.003906 -1.007812 -2 -2 -2 z m 6 4 h -6 v -2 h 6 m -3.589844 7 h 1.175782 l 2.414062 2.414062 v 1.585938 h -6 v -1.613281 z m 0 0"/>
-</svg>
diff --git a/.config/ags/assets/light-mode-symbolic.svg b/.config/ags/assets/light-mode-symbolic.svg
deleted file mode 100644
index d5fb271..0000000
--- a/.config/ags/assets/light-mode-symbolic.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
- <path d="m 8 0 c -0.554688 0 -1 0.445312 -1 1 v 1 c 0 0.554688 0.445312 1 1 1 s 1 -0.445312 1 -1 v -1 c 0 -0.554688 -0.445312 -1 -1 -1 z m -4.996094 2.003906 c -0.253906 0 -0.507812 0.097656 -0.707031 0.296875 c -0.390625 0.390625 -0.390625 1.019531 0 1.414063 l 0.707031 0.707031 c 0.394532 0.390625 1.023438 0.390625 1.414063 0 c 0.394531 -0.394531 0.394531 -1.023437 0 -1.414063 l -0.707031 -0.707031 c -0.195313 -0.199219 -0.449219 -0.296875 -0.707032 -0.296875 z m 9.988282 0 c -0.253907 0 -0.507813 0.097656 -0.707032 0.296875 l -0.707031 0.707031 c -0.390625 0.390626 -0.390625 1.019532 0 1.414063 c 0.394531 0.390625 1.023437 0.390625 1.414063 0 l 0.707031 -0.707031 c 0.394531 -0.394532 0.394531 -1.023438 0 -1.414063 c -0.195313 -0.199219 -0.449219 -0.296875 -0.707031 -0.296875 z m -4.992188 1.996094 c -2.210938 0 -4 1.789062 -4 4 s 1.789062 4 4 4 s 4 -1.789062 4 -4 s -1.789062 -4 -4 -4 z m 0 2 c 1.105469 0 2 0.894531 2 2 s -0.894531 2 -2 2 s -2 -0.894531 -2 -2 s 0.894531 -2 2 -2 z m -7 1 c -0.554688 0 -1 0.445312 -1 1 s 0.445312 1 1 1 h 1 c 0.554688 0 1 -0.445312 1 -1 s -0.445312 -1 -1 -1 z m 13 0 c -0.554688 0 -1 0.445312 -1 1 s 0.445312 1 1 1 h 1 c 0.554688 0 1 -0.445312 1 -1 s -0.445312 -1 -1 -1 z m -10.335938 4.289062 c -0.238281 0.007813 -0.472656 0.105469 -0.660156 0.292969 l -0.707031 0.707031 c -0.390625 0.390626 -0.390625 1.019532 0 1.414063 c 0.394531 0.390625 1.023437 0.390625 1.414063 0 l 0.707031 -0.707031 c 0.394531 -0.394532 0.394531 -1.023438 0 -1.414063 c -0.207031 -0.210937 -0.484375 -0.308593 -0.753907 -0.292969 z m 8.574219 0 c -0.238281 0.007813 -0.472656 0.105469 -0.660156 0.292969 c -0.390625 0.390625 -0.390625 1.019531 0 1.414063 l 0.707031 0.707031 c 0.394532 0.390625 1.023438 0.390625 1.414063 0 c 0.394531 -0.394531 0.394531 -1.023437 0 -1.414063 l -0.707031 -0.707031 c -0.207032 -0.210937 -0.484376 -0.308593 -0.753907 -0.292969 z m -4.292969 1.710938 c -0.527343 0.027344 -0.945312 0.464844 -0.945312 1 v 1 c 0 0.554688 0.445312 1 1 1 s 1 -0.445312 1 -1 v -1 c 0 -0.554688 -0.445312 -1 -1 -1 c -0.015625 0 -0.035156 0 -0.050781 0 z m 0 0"/>
-</svg>
diff --git a/.config/ags/assets/mixer-symbolic.svg b/.config/ags/assets/mixer-symbolic.svg
deleted file mode 100644
index ad6cfa8..0000000
--- a/.config/ags/assets/mixer-symbolic.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
- <path d="m 11.5 1 c -1.921875 0 -3.5 1.578125 -3.5 3.5 s 1.578125 3.5 3.5 3.5 s 3.5 -1.578125 3.5 -3.5 s -1.578125 -3.5 -3.5 -3.5 z m 0 2 c 0.839844 0 1.5 0.660156 1.5 1.5 s -0.660156 1.5 -1.5 1.5 s -1.5 -0.660156 -1.5 -1.5 s 0.660156 -1.5 1.5 -1.5 z m 0 0"/>
- <path d="m 4.5 8 c -1.921875 0 -3.5 1.578125 -3.5 3.5 s 1.578125 3.5 3.5 3.5 c 1.386719 0 2.59375 -0.820312 3.15625 -2 h 5.84375 c 0.832031 0 1.5 -0.667969 1.5 -1.5 s -0.667969 -1.5 -1.5 -1.5 h -5.84375 c -0.5625 -1.179688 -1.769531 -2 -3.15625 -2 z m 0 2 c 0.839844 0 1.5 0.660156 1.5 1.5 s -0.660156 1.5 -1.5 1.5 s -1.5 -0.660156 -1.5 -1.5 s 0.660156 -1.5 1.5 -1.5 z m 0 0"/>
- <path d="m 2.5 3 c -0.832031 0 -1.5 0.667969 -1.5 1.5 s 0.667969 1.5 1.5 1.5 h 4.769531 c -0.175781 -0.480469 -0.265625 -0.988281 -0.269531 -1.5 c 0 -0.511719 0.09375 -1.019531 0.269531 -1.5 z m 0 0" fill-opacity="0.34902"/>
-</svg>
diff --git a/.config/ags/assets/nix-snowflake-symbolic.svg b/.config/ags/assets/nix-snowflake-symbolic.svg
deleted file mode 100644
index 7bb42ed..0000000
--- a/.config/ags/assets/nix-snowflake-symbolic.svg
+++ /dev/null
@@ -1,155 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- width="496"
- height="496"
- version="1"
- id="svg6"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:dc="http://purl.org/dc/elements/1.1/">
- <metadata
- id="metadata12">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs10" />
- <g
- id="g946"
- transform="matrix(0.97173996,0,0,0.97173996,4.043873,36.112138)">
- <g
- id="layer7"
- style="display:none"
- transform="translate(-23.75651,-24.84972)">
- <rect
- transform="translate(-132.5822,958.04022)"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- id="rect5389"
- width="1543.4283"
- height="483.7439"
- x="132.5822"
- y="-957.77832" />
- </g>
- <g
- id="layer6"
- style="display:none"
- transform="translate(-156.33871,933.1905)">
- <rect
- y="-958.02759"
- x="132.65129"
- height="484.30399"
- width="550.41602"
- id="rect5379"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5c201e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
- <rect
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c24a46;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- id="rect5372"
- width="501.94415"
- height="434.30405"
- x="156.12303"
- y="-933.02759" />
- <rect
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d98d8a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- id="rect5381"
- width="24.939611"
- height="24.939611"
- x="658.02826"
- y="-958.04022" />
- </g>
- <g
- id="layer3"
- style="display:inline;opacity:1"
- transform="translate(37.235605,912.8581)">
- <g
- id="g2072"
- transform="matrix(0.99894325,0,0,0.99894325,-36.551621,-913.90743)"
- style="fill:#cccccc;fill-opacity:1">
- <g
- style="display:none;fill:#cccccc;fill-opacity:1"
- transform="matrix(0.09048806,0,0,0.09048806,-14.15991,84.454917)"
- id="layer1-3">
- <rect
- y="-2102.4253"
- x="-1045.6049"
- height="7145.4614"
- width="7947.0356"
- id="rect995"
- style="opacity:1;fill:#cccccc;fill-opacity:1;stroke-width:10.3605" />
- </g>
- <g
- transform="translate(-156.48372,537.56136)"
- style="display:inline;opacity:1;fill:#cccccc;fill-opacity:1"
- id="layer3-6">
- <g
- style="fill:#cccccc;stroke-width:11.0512;fill-opacity:1"
- transform="matrix(0.09048806,0,0,0.09048806,142.32381,-453.10644)"
- id="g955">
- <g
- transform="matrix(11.047619,0,0,11.047619,-1572.2888,9377.7107)"
- id="g869"
- style="fill:#cccccc;fill-opacity:1">
- <g
- transform="rotate(-60,226.35754,-449.37199)"
- id="g932"
- style="fill:#cccccc;stroke-width:11.0512;fill-opacity:1">
- <path
- id="path3336-6-7"
- d="m 449.71876,-420.51322 c 40.73228,70.55837 81.46455,141.11675 122.19683,211.67512 -18.71902,0.1756 -37.43804,0.3512 -56.15706,0.5268 -10.87453,-18.9564 -21.74907,-37.9128 -32.6236,-56.8692 -10.95215,18.8551 -21.9043,37.7102 -32.85645,56.5653 -9.30079,-0.004 -18.60158,-0.007 -27.90237,-0.011 -4.76362,-8.22987 -9.52724,-16.45973 -14.29086,-24.6896 15.60349,-26.83003 31.20698,-53.66007 46.81047,-80.4901 -11.07649,-19.27523 -22.15297,-38.55047 -33.22946,-57.8257 9.35083,-16.29387 18.70167,-32.58775 28.0525,-48.88162 z"
- style="opacity:1;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:33.1535;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- </g>
- <path
- id="path4260-0-5"
- d="m 309.54892,-710.38827 c 40.73228,70.55837 81.46455,141.11675 122.19683,211.67512 -18.71902,0.1756 -37.43804,0.3512 -56.15706,0.5268 -10.87453,-18.9564 -21.74907,-37.9128 -32.6236,-56.8692 -10.95215,18.8551 -21.9043,37.7102 -32.85645,56.5653 -9.30079,-0.004 -18.60158,-0.007 -27.90237,-0.011 -4.76362,-8.22987 -9.52724,-16.45973 -14.29086,-24.6896 15.60349,-26.83003 31.20698,-53.66007 46.81047,-80.4901 -11.07649,-19.2752 -22.15297,-38.5504 -33.22946,-57.8256 9.35083,-16.29391 18.70167,-32.58781 28.0525,-48.88172 z"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:33.1535;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
- <use
- x="0"
- y="0"
- xlink:href="#path3336-6-7"
- id="use3439-6-3"
- transform="rotate(60,728.23563,-692.24036)"
- width="100%"
- height="100%"
- style="fill:#cccccc;fill-opacity:1;stroke-width:11.0512" />
- <use
- x="0"
- y="0"
- xlink:href="#path3336-6-7"
- id="use3449-5-5"
- transform="rotate(180,477.5036,-570.81898)"
- width="100%"
- height="100%"
- style="fill:#cccccc;fill-opacity:1;stroke-width:11.0512" />
- <use
- style="display:inline;fill:#cccccc;fill-opacity:1;stroke-width:11.0512"
- x="0"
- y="0"
- xlink:href="#path4260-0-5"
- id="use4354-5-6"
- transform="rotate(120,407.33916,-716.08356)"
- width="100%"
- height="100%" />
- <use
- style="display:inline;fill:#cccccc;fill-opacity:1;stroke-width:11.0512"
- x="0"
- y="0"
- xlink:href="#path4260-0-5"
- id="use4362-2-2"
- transform="rotate(-120,407.28823,-715.86995)"
- width="100%"
- height="100%" />
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
-</svg>
diff --git a/.config/ags/assets/nixos-symbolic.svg b/.config/ags/assets/nixos-symbolic.svg
deleted file mode 100644
index 7bb42ed..0000000
--- a/.config/ags/assets/nixos-symbolic.svg
+++ /dev/null
@@ -1,155 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- width="496"
- height="496"
- version="1"
- id="svg6"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:dc="http://purl.org/dc/elements/1.1/">
- <metadata
- id="metadata12">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs10" />
- <g
- id="g946"
- transform="matrix(0.97173996,0,0,0.97173996,4.043873,36.112138)">
- <g
- id="layer7"
- style="display:none"
- transform="translate(-23.75651,-24.84972)">
- <rect
- transform="translate(-132.5822,958.04022)"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- id="rect5389"
- width="1543.4283"
- height="483.7439"
- x="132.5822"
- y="-957.77832" />
- </g>
- <g
- id="layer6"
- style="display:none"
- transform="translate(-156.33871,933.1905)">
- <rect
- y="-958.02759"
- x="132.65129"
- height="484.30399"
- width="550.41602"
- id="rect5379"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5c201e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
- <rect
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c24a46;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- id="rect5372"
- width="501.94415"
- height="434.30405"
- x="156.12303"
- y="-933.02759" />
- <rect
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d98d8a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- id="rect5381"
- width="24.939611"
- height="24.939611"
- x="658.02826"
- y="-958.04022" />
- </g>
- <g
- id="layer3"
- style="display:inline;opacity:1"
- transform="translate(37.235605,912.8581)">
- <g
- id="g2072"
- transform="matrix(0.99894325,0,0,0.99894325,-36.551621,-913.90743)"
- style="fill:#cccccc;fill-opacity:1">
- <g
- style="display:none;fill:#cccccc;fill-opacity:1"
- transform="matrix(0.09048806,0,0,0.09048806,-14.15991,84.454917)"
- id="layer1-3">
- <rect
- y="-2102.4253"
- x="-1045.6049"
- height="7145.4614"
- width="7947.0356"
- id="rect995"
- style="opacity:1;fill:#cccccc;fill-opacity:1;stroke-width:10.3605" />
- </g>
- <g
- transform="translate(-156.48372,537.56136)"
- style="display:inline;opacity:1;fill:#cccccc;fill-opacity:1"
- id="layer3-6">
- <g
- style="fill:#cccccc;stroke-width:11.0512;fill-opacity:1"
- transform="matrix(0.09048806,0,0,0.09048806,142.32381,-453.10644)"
- id="g955">
- <g
- transform="matrix(11.047619,0,0,11.047619,-1572.2888,9377.7107)"
- id="g869"
- style="fill:#cccccc;fill-opacity:1">
- <g
- transform="rotate(-60,226.35754,-449.37199)"
- id="g932"
- style="fill:#cccccc;stroke-width:11.0512;fill-opacity:1">
- <path
- id="path3336-6-7"
- d="m 449.71876,-420.51322 c 40.73228,70.55837 81.46455,141.11675 122.19683,211.67512 -18.71902,0.1756 -37.43804,0.3512 -56.15706,0.5268 -10.87453,-18.9564 -21.74907,-37.9128 -32.6236,-56.8692 -10.95215,18.8551 -21.9043,37.7102 -32.85645,56.5653 -9.30079,-0.004 -18.60158,-0.007 -27.90237,-0.011 -4.76362,-8.22987 -9.52724,-16.45973 -14.29086,-24.6896 15.60349,-26.83003 31.20698,-53.66007 46.81047,-80.4901 -11.07649,-19.27523 -22.15297,-38.55047 -33.22946,-57.8257 9.35083,-16.29387 18.70167,-32.58775 28.0525,-48.88162 z"
- style="opacity:1;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:33.1535;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- </g>
- <path
- id="path4260-0-5"
- d="m 309.54892,-710.38827 c 40.73228,70.55837 81.46455,141.11675 122.19683,211.67512 -18.71902,0.1756 -37.43804,0.3512 -56.15706,0.5268 -10.87453,-18.9564 -21.74907,-37.9128 -32.6236,-56.8692 -10.95215,18.8551 -21.9043,37.7102 -32.85645,56.5653 -9.30079,-0.004 -18.60158,-0.007 -27.90237,-0.011 -4.76362,-8.22987 -9.52724,-16.45973 -14.29086,-24.6896 15.60349,-26.83003 31.20698,-53.66007 46.81047,-80.4901 -11.07649,-19.2752 -22.15297,-38.5504 -33.22946,-57.8256 9.35083,-16.29391 18.70167,-32.58781 28.0525,-48.88172 z"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:33.1535;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
- <use
- x="0"
- y="0"
- xlink:href="#path3336-6-7"
- id="use3439-6-3"
- transform="rotate(60,728.23563,-692.24036)"
- width="100%"
- height="100%"
- style="fill:#cccccc;fill-opacity:1;stroke-width:11.0512" />
- <use
- x="0"
- y="0"
- xlink:href="#path3336-6-7"
- id="use3449-5-5"
- transform="rotate(180,477.5036,-570.81898)"
- width="100%"
- height="100%"
- style="fill:#cccccc;fill-opacity:1;stroke-width:11.0512" />
- <use
- style="display:inline;fill:#cccccc;fill-opacity:1;stroke-width:11.0512"
- x="0"
- y="0"
- xlink:href="#path4260-0-5"
- id="use4354-5-6"
- transform="rotate(120,407.33916,-716.08356)"
- width="100%"
- height="100%" />
- <use
- style="display:inline;fill:#cccccc;fill-opacity:1;stroke-width:11.0512"
- x="0"
- y="0"
- xlink:href="#path4260-0-5"
- id="use4362-2-2"
- transform="rotate(-120,407.28823,-715.86995)"
- width="100%"
- height="100%" />
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
-</svg>
diff --git a/.config/ags/assets/nixos.svg b/.config/ags/assets/nixos.svg
deleted file mode 100644
index 1a756ed..0000000
--- a/.config/ags/assets/nixos.svg
+++ /dev/null
@@ -1,277 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- width="496"
- height="496"
- version="1"
- id="svg6"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:dc="http://purl.org/dc/elements/1.1/">
- <metadata
- id="metadata12">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs10">
- <linearGradient
- id="linearGradient5562">
- <stop
- style="stop-color:#699ad7;stop-opacity:1"
- offset="0"
- id="stop5564" />
- <stop
- id="stop5566"
- offset="0.24345198"
- style="stop-color:#7eb1dd;stop-opacity:1" />
- <stop
- style="stop-color:#7ebae4;stop-opacity:1"
- offset="1"
- id="stop5568" />
- </linearGradient>
- <linearGradient
- id="linearGradient5053">
- <stop
- style="stop-color:#415e9a;stop-opacity:1"
- offset="0"
- id="stop5055" />
- <stop
- id="stop5057"
- offset="0.23168644"
- style="stop-color:#4a6baf;stop-opacity:1" />
- <stop
- style="stop-color:#5277c3;stop-opacity:1"
- offset="1"
- id="stop5059" />
- </linearGradient>
- <linearGradient
- id="linearGradient5960">
- <stop
- id="stop5962"
- offset="0"
- style="stop-color:#637ddf;stop-opacity:1" />
- <stop
- style="stop-color:#649afa;stop-opacity:1"
- offset="0.23168644"
- id="stop5964" />
- <stop
- id="stop5966"
- offset="1"
- style="stop-color:#719efa;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- y2="515.97058"
- x2="282.26105"
- y1="338.62445"
- x1="213.95642"
- gradientTransform="translate(983.36076,293.12113)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient5855"
- xlink:href="#linearGradient5960" />
- <linearGradient
- xlink:href="#linearGradient5562"
- id="linearGradient4328"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(70.650339,-1055.1511)"
- x1="200.59668"
- y1="351.41116"
- x2="290.08701"
- y2="506.18814" />
- <linearGradient
- xlink:href="#linearGradient5053"
- id="linearGradient4330"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(864.69589,-1491.3405)"
- x1="-584.19934"
- y1="782.33563"
- x2="-496.29703"
- y2="937.71399" />
- </defs>
- <g
- id="g946"
- transform="matrix(0.97173996,0,0,0.97173996,4.043873,36.112138)">
- <g
- id="layer7"
- style="display:none"
- transform="translate(-23.75651,-24.84972)">
- <rect
- transform="translate(-132.5822,958.04022)"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- id="rect5389"
- width="1543.4283"
- height="483.7439"
- x="132.5822"
- y="-957.77832" />
- </g>
- <g
- id="layer6"
- style="display:none"
- transform="translate(-156.33871,933.1905)">
- <rect
- y="-958.02759"
- x="132.65129"
- height="484.30399"
- width="550.41602"
- id="rect5379"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5c201e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
- <rect
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c24a46;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- id="rect5372"
- width="501.94415"
- height="434.30405"
- x="156.12303"
- y="-933.02759" />
- <rect
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d98d8a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- id="rect5381"
- width="24.939611"
- height="24.939611"
- x="658.02826"
- y="-958.04022" />
- </g>
- <g
- id="layer1"
- style="display:inline"
- transform="translate(-156.33871,933.1905)">
- <path
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- d="m 309.40365,-710.2521 c 40.73228,70.55837 81.46455,141.11673 122.19683,211.6751 -18.71902,0.1756 -37.43804,0.3512 -56.15706,0.5268 -10.87453,-18.9564 -21.74907,-37.9128 -32.6236,-56.8692 -10.95215,18.8551 -21.9043,37.7102 -32.85645,56.5653 -9.30079,-0.004 -18.60158,-0.007 -27.90237,-0.011 -4.76362,-8.22987 -9.52724,-16.45973 -14.29086,-24.6896 15.60349,-26.83007 31.20698,-53.66013 46.81047,-80.4902 -11.07649,-19.2752 -22.15297,-38.5504 -33.22946,-57.8256 9.35083,-16.29387 18.70167,-32.58773 28.0525,-48.8816 z"
- id="path4861" />
- <path
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#7ebae4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- d="m 353.50926,-797.4433 c -40.73919,70.55437 -81.47837,141.10873 -122.21756,211.6631 -9.51159,-16.12333 -19.02318,-32.24667 -28.53477,-48.37 10.97946,-18.89583 21.95893,-37.79167 32.93839,-56.6875 -21.80507,-0.0573 -43.61014,-0.1146 -65.41521,-0.1719 -4.64713,-8.0566 -9.29427,-16.1132 -13.9414,-24.1698 4.74546,-8.24033 9.49091,-16.48067 14.23637,-24.721 31.03726,0.098 62.07451,0.19593 93.11177,0.2939 11.15457,-19.2301 22.30914,-38.4602 33.46371,-57.6903 18.78623,-0.0488 37.57247,-0.0977 56.3587,-0.1465 z"
- id="use4863" />
- <path
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#7ebae4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- d="m 362.88537,-628.243 c 81.47146,0.004 162.94293,0.008 244.41439,0.012 -9.20743,16.29893 -18.41486,32.59787 -27.62229,48.8968 -21.854,-0.0606 -43.70799,-0.12113 -65.56199,-0.1817 10.85292,18.91237 21.70584,37.82473 32.55876,56.7371 -4.65366,8.05283 -9.30732,16.10567 -13.96098,24.1585 -9.50907,0.0107 -19.01815,0.0213 -28.52722,0.032 -15.43377,-26.92803 -30.86753,-53.85607 -46.3013,-80.7841 -22.23106,-0.0451 -44.46211,-0.0902 -66.69317,-0.1353 -9.4354,-16.2451 -18.8708,-32.4902 -28.3062,-48.7353 z"
- id="use4865" />
- <path
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#7ebae4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- d="m 505.14318,-720.9886 c -40.73228,-70.55837 -81.46455,-141.11673 -122.19683,-211.6751 18.71902,-0.1756 37.43804,-0.3512 56.15706,-0.5268 10.87453,18.9564 21.74907,37.9128 32.6236,56.8692 10.95215,-18.8551 21.9043,-37.7102 32.85645,-56.5653 9.30079,0.004 18.60158,0.007 27.90237,0.011 4.76362,8.22987 9.52724,16.45973 14.29086,24.6896 -15.60349,26.83007 -31.20698,53.66013 -46.81047,80.4902 11.07649,19.2752 22.15297,38.5504 33.22946,57.8256 -9.35083,16.29387 -18.70167,32.58773 -28.0525,48.8816 z"
- id="use4867" />
- <path
- id="path4873"
- d="m 309.40365,-710.2521 c 40.73228,70.55837 81.46455,141.11673 122.19683,211.6751 -18.71902,0.1756 -37.43804,0.3512 -56.15706,0.5268 -10.87453,-18.9564 -21.74907,-37.9128 -32.6236,-56.8692 -10.95215,18.8551 -21.9043,37.7102 -32.85645,56.5653 -9.30079,-0.004 -18.60158,-0.007 -27.90237,-0.011 -4.76362,-8.22987 -9.52724,-16.45973 -14.29086,-24.6896 15.60349,-26.83007 31.20698,-53.66013 46.81047,-80.4902 -11.07649,-19.2752 -22.15297,-38.5504 -33.22946,-57.8256 9.35083,-16.29387 18.70167,-32.58773 28.0525,-48.8816 z"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
- <path
- id="use4875"
- d="m 451.3364,-803.53264 c -81.47147,-0.004 -162.94293,-0.008 -244.4144,-0.012 9.20743,-16.29895 18.41486,-32.5979 27.62229,-48.89685 21.854,0.0606 43.70799,0.12117 65.56199,0.18175 -10.85292,-18.91239 -21.70583,-37.82478 -32.55875,-56.73717 4.65366,-8.05284 9.30731,-16.10567 13.96097,-24.15851 9.50907,-0.0105 19.01815,-0.021 28.52722,-0.0315 15.43377,26.92805 30.86753,53.85609 46.3013,80.78414 22.23106,0.0451 44.46211,0.0902 66.69317,0.13524 9.4354,16.24497 18.87081,32.48993 28.30621,48.7349 z"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
- <path
- id="use4877"
- d="m 460.87178,-633.8425 c 40.73919,-70.55435 81.47838,-141.10869 122.21757,-211.66304 9.51159,16.12334 19.02318,32.24669 28.53477,48.37003 -10.97946,18.89584 -21.95893,37.79167 -32.93839,56.68751 21.80507,0.0573 43.61013,0.11453 65.4152,0.1718 4.64713,8.0566 9.29427,16.1132 13.9414,24.1698 -4.74545,8.24037 -9.49091,16.48073 -14.23636,24.7211 -31.03726,-0.098 -62.07451,-0.196 -93.11177,-0.294 -11.15457,19.23013 -22.30914,38.46027 -33.46371,57.6904 -18.78624,0.0488 -37.57247,0.0976 -56.35871,0.1464 z"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
- <g
- id="layer2"
- style="display:none"
- transform="translate(72.039038,-1799.4476)">
- <path
- d="M 460.60629,594.72881 209.74183,594.7288 84.309616,377.4738 209.74185,160.21882 l 250.86446,1e-5 125.43222,217.255 z"
- id="path6032"
- style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.236;fill:#4e4d52;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
- <path
- transform="translate(0,-308.26772)"
- style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#4e4d52;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- id="path5875"
- d="m 385.59154,773.06721 -100.83495,0 -50.41747,-87.32564 50.41748,-87.32563 100.83495,10e-6 50.41748,87.32563 z" />
- <path
- id="path5851"
- d="m 1216.5591,630.26623 c 41.0182,76.04675 82.0363,152.09355 123.0545,228.14035 -14.2269,-0.4205 -28.4538,-0.8411 -42.6807,-1.2616 -14.4941,-26.5908 -28.9882,-53.1817 -43.4823,-79.7725 -13.2169,26.7756 -26.4337,53.5511 -39.6506,80.3267 -10.8958,-6.5995 -21.7917,-13.1989 -32.6875,-19.7984 17.8246,-33.4283 35.6491,-66.8565 53.4737,-100.2848 -12.3719,-24.6298 -24.7438,-49.2597 -37.1157,-73.88955 6.3629,-11.1534 12.7257,-22.3068 19.0886,-33.4602 z"
- style="fill:url(#linearGradient5855);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.415;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c53a3a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- id="rect5884"
- width="48.834862"
- height="226.22897"
- x="-34.74221"
- y="446.17056"
- transform="rotate(-30)" />
- <path
- transform="translate(0,-308.26772)"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.509;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- id="path3428"
- d="m 251.98568,878.63831 -14.02447,24.29109 h -28.04894 l -14.02447,-24.29109 14.02447,-24.2911 h 28.04894 z" />
- <use
- x="0"
- y="0"
- xlink:href="#rect5884"
- id="use4252"
- transform="rotate(60,268.29786,489.4515)"
- width="100%"
- height="100%" />
- <rect
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:0.650794;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- id="rect4254"
- width="5.3947482"
- height="115.12564"
- x="545.71014"
- y="467.07007"
- transform="rotate(30,575.23539,-154.13386)" />
- </g>
- </g>
- <g
- id="layer3"
- style="display:inline;opacity:1"
- transform="translate(-156.33871,933.1905)">
- <path
- id="path3336-6"
- d="m 309.54892,-710.38827 c 40.73228,70.55837 81.46455,141.11675 122.19683,211.67512 -18.71902,0.1756 -37.43804,0.3512 -56.15706,0.5268 -10.87453,-18.9564 -21.74907,-37.9128 -32.6236,-56.8692 -10.95215,18.8551 -21.9043,37.7102 -32.85645,56.5653 -9.30079,-0.004 -18.60158,-0.007 -27.90237,-0.011 -4.76362,-8.22987 -9.52724,-16.45973 -14.29086,-24.6896 15.60349,-26.83003 31.20698,-53.66007 46.81047,-80.4901 -11.07649,-19.27523 -22.15297,-38.55047 -33.22946,-57.8257 9.35083,-16.29387 18.70167,-32.58775 28.0525,-48.88162 z"
- style="opacity:1;fill:url(#linearGradient4328);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <use
- height="100%"
- width="100%"
- transform="rotate(60,407.11155,-715.78724)"
- id="use3439-6"
- xlink:href="#path3336-6"
- y="0"
- x="0" />
- <use
- height="100%"
- width="100%"
- transform="rotate(-60,407.31177,-715.70016)"
- id="use3445-0"
- xlink:href="#path3336-6"
- y="0"
- x="0" />
- <use
- height="100%"
- width="100%"
- transform="rotate(180,407.41868,-715.7565)"
- id="use3449-5"
- xlink:href="#path3336-6"
- y="0"
- x="0" />
- <path
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient4330);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- d="m 309.54892,-710.38827 c 40.73228,70.55837 81.46455,141.11675 122.19683,211.67512 -18.71902,0.1756 -37.43804,0.3512 -56.15706,0.5268 -10.87453,-18.9564 -21.74907,-37.9128 -32.6236,-56.8692 -10.95215,18.8551 -21.9043,37.7102 -32.85645,56.5653 -10.54113,-2.26829 -26.58606,6.01638 -31.9377,-7.5219 -4.39393,-6.91787 -12.57856,-15.53043 -6.85074,-23.97221 8.26178,-12.05394 14.90093,-25.28023 22.52611,-37.79439 6.95986,-11.9674 13.91971,-23.9348 20.87957,-35.9022 -11.07649,-19.2752 -22.15297,-38.5504 -33.22946,-57.8256 9.35083,-16.29391 18.70167,-32.58781 28.0525,-48.88172 z"
- id="path4260-0" />
- <use
- height="100%"
- width="100%"
- transform="rotate(120,407.33916,-716.08356)"
- id="use4354-5"
- xlink:href="#path4260-0"
- y="0"
- x="0"
- style="display:inline" />
- <use
- height="100%"
- width="100%"
- transform="rotate(-120,407.28823,-715.86995)"
- id="use4362-2"
- xlink:href="#path4260-0"
- y="0"
- x="0"
- style="display:inline" />
- </g>
- </g>
-</svg>
diff --git a/.config/ags/assets/osk.svg b/.config/ags/assets/osk.svg
deleted file mode 100644
index 511420a..0000000
--- a/.config/ags/assets/osk.svg
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- width="24"
- height="24"
- version="1"
- id="svg20"
- sodipodi:docname="osk.svg"
- inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:svg="http://www.w3.org/2000/svg">
- <defs
- id="defs20" />
- <sodipodi:namedview
- id="namedview20"
- pagecolor="#ffffff"
- bordercolor="#000000"
- borderopacity="0.25"
- inkscape:showpageshadow="2"
- inkscape:pageopacity="0.0"
- inkscape:pagecheckerboard="0"
- inkscape:deskcolor="#d1d1d1"
- inkscape:zoom="26.166667"
- inkscape:cx="12"
- inkscape:cy="12"
- inkscape:current-layer="svg20" />
- <rect
- style="fill:#4f4f4f;stroke-width:0.871697"
- width="11.938859"
- height="17.820761"
- x="-18.006235"
- y="-20.910379"
- rx="0.85277563"
- ry="0.891038"
- transform="matrix(0,-1,-1,0,0,0)"
- id="rect1" />
- <path
- style="opacity:0.2;stroke-width:0.871697"
- d="m 9.3268859,13.31597 a 0.89103802,0.85277564 0 0 1 -0.891038,0.852775 0.89103802,0.85277564 0 0 1 -0.891038,-0.852775 0.89103802,0.85277564 0 0 1 0.891038,-0.852776 0.89103802,0.85277564 0 0 1 0.891038,0.852776 z"
- id="path1" />
- <path
- style="opacity:0.2;stroke-width:0.871697"
- d="M 12,13.31597 A 0.89103802,0.85277564 0 0 1 11.108962,14.168745 0.89103802,0.85277564 0 0 1 10.217924,13.31597 0.89103802,0.85277564 0 0 1 11.108962,12.463194 0.89103802,0.85277564 0 0 1 12,13.31597 Z"
- id="path2" />
- <path
- style="opacity:0.2;stroke-width:0.871697"
- d="m 14.673114,13.31597 a 0.89103802,0.85277564 0 0 1 -0.891038,0.852775 0.89103802,0.85277564 0 0 1 -0.891038,-0.852775 0.89103802,0.85277564 0 0 1 0.891038,-0.852776 0.89103802,0.85277564 0 0 1 0.891038,0.852776 z"
- id="path3" />
- <path
- style="opacity:0.2;stroke-width:0.871697"
- d="M 17.346228,13.31597 A 0.89103802,0.85277564 0 0 1 16.45519,14.168745 0.89103802,0.85277564 0 0 1 15.564152,13.31597 0.89103802,0.85277564 0 0 1 16.45519,12.463194 0.89103802,0.85277564 0 0 1 17.346228,13.31597 Z"
- id="path4" />
- <rect
- style="opacity:0.2;stroke-width:0.871697"
- width="12.474532"
- height="1.7055513"
- x="5.7627339"
- y="15.874296"
- rx="0.41611475"
- ry="0.42638782"
- id="rect4" />
- <rect
- style="fill:#e4e4e4;stroke-width:0.871697"
- width="12.474532"
- height="1.7055513"
- x="5.7627339"
- y="15.447908"
- rx="0.41611475"
- ry="0.42638782"
- id="rect5" />
- <path
- style="opacity:0.2;stroke-width:0.871697"
- d="M 15.564152,9.904867 A 0.89103802,0.85277564 0 0 1 14.673114,10.757643 0.89103802,0.85277564 0 0 1 13.782076,9.904867 0.89103802,0.85277564 0 0 1 14.673114,9.0520913 0.89103802,0.85277564 0 0 1 15.564152,9.904867 Z"
- id="path5" />
- <path
- style="opacity:0.2;stroke-width:0.871697"
- d="M 7.5448099,9.904867 A 0.89103802,0.85277564 0 0 1 6.6537719,10.757643 0.89103802,0.85277564 0 0 1 5.7627339,9.904867 0.89103802,0.85277564 0 0 1 6.6537719,9.0520913 0.89103802,0.85277564 0 0 1 7.5448099,9.904867 Z"
- id="path6" />
- <path
- style="opacity:0.2;stroke-width:0.871697"
- d="M 10.217924,9.904867 A 0.89103802,0.85277564 0 0 1 9.3268859,10.757643 0.89103802,0.85277564 0 0 1 8.4358479,9.904867 0.89103802,0.85277564 0 0 1 9.3268859,9.0520913 0.89103802,0.85277564 0 0 1 10.217924,9.904867 Z"
- id="path7" />
- <path
- style="opacity:0.2;stroke-width:0.871697"
- d="M 12.891038,9.904867 A 0.89103802,0.85277564 0 0 1 12,10.757643 0.89103802,0.85277564 0 0 1 11.108962,9.904867 0.89103802,0.85277564 0 0 1 12,9.0520913 0.89103802,0.85277564 0 0 1 12.891038,9.904867 Z"
- id="path8" />
- <path
- style="opacity:0.2;stroke-width:0.871697"
- d="M 18.237266,9.904867 A 0.89103802,0.85277564 0 0 1 17.346228,10.757643 0.89103802,0.85277564 0 0 1 16.45519,9.904867 0.89103802,0.85277564 0 0 1 17.346228,9.0520913 0.89103802,0.85277564 0 0 1 18.237266,9.904867 Z"
- id="path9" />
- <g
- style="fill:#e4e4e4"
- id="g18"
- transform="matrix(0.89103802,0,0,0.85277564,1.3075438,1.8034984)">
- <path
- d="M 9,13 A 1,1 0 0 1 8,14 1,1 0 0 1 7,13 1,1 0 0 1 8,12 1,1 0 0 1 9,13 Z"
- id="path10" />
- <path
- d="m 12,13 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- id="path11" />
- <path
- d="m 15,13 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- id="path12" />
- <path
- d="m 18,13 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- id="path13" />
- <path
- d="m 16,9 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- id="path14" />
- <path
- d="M 7,9 A 1,1 0 0 1 6,10 1,1 0 0 1 5,9 1,1 0 0 1 6,8 1,1 0 0 1 7,9 Z"
- id="path15" />
- <path
- d="M 10,9 A 1,1 0 0 1 9,10 1,1 0 0 1 8,9 1,1 0 0 1 9,8 1,1 0 0 1 10,9 Z"
- id="path16" />
- <path
- d="m 13,9 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- id="path17" />
- <path
- d="m 19,9 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- id="path18" />
- </g>
- <path
- style="opacity:0.1;fill:#ffffff;stroke-width:0.871697"
- d="m 3.9806578,6.0673766 c -0.493635,0 -0.891038,0.3803379 -0.891038,0.8527756 v 0.4263879 c 0,-0.4724377 0.397403,-0.8527757 0.891038,-0.8527757 H 20.019342 c 0.493635,0 0.891038,0.380338 0.891038,0.8527757 V 6.9201522 c 0,-0.4724377 -0.397403,-0.8527756 -0.891038,-0.8527756 z"
- id="path19" />
- <path
- style="opacity:0.2;stroke-width:0.871697"
- d="m 3.0896198,17.15346 v 0.426388 c 0,0.472437 0.397403,0.852775 0.891038,0.852775 H 20.019342 c 0.493635,0 0.891038,-0.380338 0.891038,-0.852775 V 17.15346 c 0,0.472438 -0.397403,0.852776 -0.891038,0.852776 H 3.9806578 c -0.493635,0 -0.891038,-0.380338 -0.891038,-0.852776 z"
- id="path20" />
-</svg>
diff --git a/.config/ags/assets/pinned.svg b/.config/ags/assets/pinned.svg
deleted file mode 100644
index ce8efb3..0000000
--- a/.config/ags/assets/pinned.svg
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- viewBox="0 0 22 22"
- version="1.1"
- id="svg1"
- sodipodi:docname="pinned.svg"
- inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:svg="http://www.w3.org/2000/svg">
- <sodipodi:namedview
- id="namedview1"
- pagecolor="#ffffff"
- bordercolor="#000000"
- borderopacity="0.25"
- inkscape:showpageshadow="2"
- inkscape:pageopacity="0.0"
- inkscape:pagecheckerboard="0"
- inkscape:deskcolor="#d1d1d1"
- inkscape:zoom="21.454545"
- inkscape:cx="11"
- inkscape:cy="11"
- inkscape:current-layer="svg1" />
- <defs
- id="defs3051">
- <style
- type="text/css"
- id="current-color-scheme">.ColorScheme-Text { color: #fcfcfc; } </style>
- </defs>
- <path
- style="fill:currentColor;fill-opacity:1;stroke:none;stroke-width:0.906415"
- d="m 11,3.7453986 c -4.015418,0 -7.2480469,3.2355522 -7.2480469,7.2546014 0,4.019049 3.2326289,7.254601 7.2480469,7.254601 4.015418,0 7.248047,-3.235552 7.248047,-7.254601 0,-4.0190492 -3.232629,-7.2546014 -7.248047,-7.2546014 z m 0,0.9068251 c 3.513491,0 6.342041,2.8311083 6.342041,6.3477763 0,3.516668 -2.82855,6.347776 -6.342041,6.347776 C 7.4865093,17.347776 4.657959,14.516668 4.657959,11 4.657959,7.483332 7.4865093,4.6522237 11,4.6522237 Z m 0,4.5341259 c -1.0038533,0 -1.8120117,0.8088893 -1.8120117,1.8136504 0,1.004761 0.8081584,1.81365 1.8120117,1.81365 1.003854,0 1.812012,-0.808889 1.812012,-1.81365 0,-1.0047611 -0.808158,-1.8136504 -1.812012,-1.8136504 z m 0,0.9068254 c 0.501926,0 0.906006,0.404445 0.906006,0.906825 0,0.50238 -0.40408,0.906825 -0.906006,0.906825 -0.501926,0 -0.906006,-0.404445 -0.906006,-0.906825 0,-0.50238 0.40408,-0.906825 0.906006,-0.906825 z"
- class="ColorScheme-Text"
- id="path1" />
-</svg>
diff --git a/.config/ags/assets/preferences-desktop-theme-symbolic.svg b/.config/ags/assets/preferences-desktop-theme-symbolic.svg
deleted file mode 100644
index 4461454..0000000
--- a/.config/ags/assets/preferences-desktop-theme-symbolic.svg
+++ /dev/null
@@ -1,321 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- height="16px"
- viewBox="0 0 16 16"
- width="16px"
- version="1.1"
- id="svg3533"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:svg="http://www.w3.org/2000/svg">
- <defs
- id="defs3537" />
- <filter
- id="a"
- height="1"
- width="1"
- x="0"
- y="0">
- <feColorMatrix
- in="SourceGraphic"
- type="matrix"
- values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"
- id="feColorMatrix3414" />
- </filter>
- <mask
- id="b">
- <g
- filter="url(#a)"
- id="g3419">
- <image
- height="800"
- width="1024"
- xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAMgCAYAAAC9FhA7AAAABmJLR0QA/wD/AP+gvaeTAAAMr0lEQVR4nO3YsQ2AMAwAwcB8GZcBWQFEIoq/qy3b9Y8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQdi/bMl/PXorsAAADAA+ffDwAAAAD7CQAAAAAQIAAAAABAgAAAAAAAAQIAAAAABAgAAAAAECAAAAAAQIAAAAAAAAECAAAAAAQIAAAAABAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8dQMXagEYjYWofQAAAABJRU5ErkJggg=="
- id="image3417" />
- </g>
- </mask>
- <clipPath
- id="c">
- <path
- d="m 0 0 h 1024 v 800 h -1024 z"
- id="path3422" />
- </clipPath>
- <mask
- id="d">
- <g
- filter="url(#a)"
- id="g3427">
- <image
- height="800"
- width="1024"
- xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAMgCAYAAAC9FhA7AAAABmJLR0QA/wD/AP+gvaeTAAAMr0lEQVR4nO3YsQ2AMAwAwUCd/SdlAFYAkYji72rLdv1jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBx6I98+X8teguAAAA8MD59wMAAADAfgIAAAAABAgAAAAAECAAAAAAQIAAAAAAAAECAAAAAAQIAAAAABAgAAAAAECAAAAAAAABAgAAAAAECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX90LagEYFVKkEwAAAABJRU5ErkJggg=="
- id="image3425" />
- </g>
- </mask>
- <clipPath
- id="e">
- <path
- d="m 0 0 h 1024 v 800 h -1024 z"
- id="path3430" />
- </clipPath>
- <mask
- id="f">
- <g
- filter="url(#a)"
- id="g3435">
- <image
- height="800"
- width="1024"
- xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAMgCAYAAAC9FhA7AAAABmJLR0QA/wD/AP+gvaeTAAAMr0lEQVR4nO3YsQ2AMAwAwUCd/SdlAFYAkYji72rLdv1jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBx6I98+X8teguAAAA8MD59wMAAADAfgIAAAAABAgAAAAAECAAAAAAQIAAAAAAAAECAAAAAAQIAAAAABAgAAAAAECAAAAAAAABAgAAAAAECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX90LagEYFVKkEwAAAABJRU5ErkJggg=="
- id="image3433" />
- </g>
- </mask>
- <clipPath
- id="g">
- <path
- d="m 0 0 h 1024 v 800 h -1024 z"
- id="path3438" />
- </clipPath>
- <mask
- id="h">
- <g
- filter="url(#a)"
- id="g3443">
- <image
- height="800"
- width="1024"
- xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAMgCAYAAAC9FhA7AAAABmJLR0QA/wD/AP+gvaeTAAAMr0lEQVR4nO3YsQ2AMAwAwUCd/SdlAFYAkYji72rLdv1jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBx6I98+X8teguAAAA8MD59wMAAADAfgIAAAAABAgAAAAAECAAAAAAQIAAAAAAAAECAAAAAAQIAAAAABAgAAAAAECAAAAAAAABAgAAAAAECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX90LagEYFVKkEwAAAABJRU5ErkJggg=="
- id="image3441" />
- </g>
- </mask>
- <clipPath
- id="i">
- <path
- d="m 0 0 h 1024 v 800 h -1024 z"
- id="path3446" />
- </clipPath>
- <mask
- id="j">
- <g
- filter="url(#a)"
- id="g3451">
- <image
- height="800"
- width="1024"
- xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAMgCAYAAAC9FhA7AAAABmJLR0QA/wD/AP+gvaeTAAAMr0lEQVR4nO3YsQ2AMAwAwUCd/SdlAFYAkYji72rLdv1jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBx6I98+X8teguAAAA8MD59wMAAADAfgIAAAAABAgAAAAAECAAAAAAQIAAAAAAAAECAAAAAAQIAAAAABAgAAAAAECAAAAAAAABAgAAAAAECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX90LagEYFVKkEwAAAABJRU5ErkJggg=="
- id="image3449" />
- </g>
- </mask>
- <clipPath
- id="k">
- <path
- d="m 0 0 h 1024 v 800 h -1024 z"
- id="path3454" />
- </clipPath>
- <mask
- id="l">
- <g
- filter="url(#a)"
- id="g3459">
- <image
- height="800"
- width="1024"
- xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAMgCAYAAAC9FhA7AAAABmJLR0QA/wD/AP+gvaeTAAAMr0lEQVR4nO3YsQ2AMAwAwUCd/SdlAFYAkYji72rLdv1jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBx6I98+X8teguAAAA8MD59wMAAADAfgIAAAAABAgAAAAAECAAAAAAQIAAAAAAAAECAAAAAAQIAAAAABAgAAAAAECAAAAAAAABAgAAAAAECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX90LagEYFVKkEwAAAABJRU5ErkJggg=="
- id="image3457" />
- </g>
- </mask>
- <clipPath
- id="m">
- <path
- d="m 0 0 h 1024 v 800 h -1024 z"
- id="path3462" />
- </clipPath>
- <mask
- id="n">
- <g
- filter="url(#a)"
- id="g3467">
- <image
- height="800"
- width="1024"
- xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAMgCAYAAAC9FhA7AAAABmJLR0QA/wD/AP+gvaeTAAAMr0lEQVR4nO3YsQ2AMAwAwUCd/SdlAFYAkYji72rLdv1jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBx6I98+X8teguAAAA8MD59wMAAADAfgIAAAAABAgAAAAAECAAAAAAQIAAAAAAAAECAAAAAAQIAAAAABAgAAAAAECAAAAAAAABAgAAAAAECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX90LagEYFVKkEwAAAABJRU5ErkJggg=="
- id="image3465" />
- </g>
- </mask>
- <clipPath
- id="o">
- <path
- d="m 0 0 h 1024 v 800 h -1024 z"
- id="path3470" />
- </clipPath>
- <mask
- id="p">
- <g
- filter="url(#a)"
- id="g3475">
- <image
- height="800"
- width="1024"
- xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAMgCAYAAAC9FhA7AAAABmJLR0QA/wD/AP+gvaeTAAAMr0lEQVR4nO3YsQ2AMAwAwcB8GZcBWQFEIoq/qy3b9Y8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQdi/bMl/PXorsAAADAA+ffDwAAAAD7CQAAAAAQIAAAAABAgAAAAAAAAQIAAAAABAgAAAAAECAAAAAAQIAAAAAAAAECAAAAAAQIAAAAABAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8dQMXagEYjYWofQAAAABJRU5ErkJggg=="
- id="image3473" />
- </g>
- </mask>
- <clipPath
- id="q">
- <path
- d="m 0 0 h 1024 v 800 h -1024 z"
- id="path3478" />
- </clipPath>
- <mask
- id="r">
- <g
- filter="url(#a)"
- id="g3483">
- <image
- height="800"
- width="1024"
- xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAMgCAYAAAC9FhA7AAAABmJLR0QA/wD/AP+gvaeTAAAMqUlEQVR4nO3YsQ3AMAwEMSeTe/QM4QgujqwF4etbCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIen76s4fvAQAAgAPv7QEAAADAPAEAAAAAAgQAAAAACBAAAAAAIEAAAAAAgAABAAAAAAIEAAAAAAgQAAAAACBAAAAAAIAAAQAAAAACBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAUx8hKgEYqUBSPgAAAABJRU5ErkJggg=="
- id="image3481" />
- </g>
- </mask>
- <clipPath
- id="s">
- <path
- d="m 0 0 h 1024 v 800 h -1024 z"
- id="path3486" />
- </clipPath>
- <path
- d="m 3 1 c -1.644531 0 -3 1.355469 -3 3 v 6 c 0 1.644531 1.355469 3 3 3 h 10 c 1.644531 0 3 -1.355469 3 -3 v -6 c 0 -0.570312 -0.167969 -1.101562 -0.449219 -1.558594 l -1.550781 1.554688 v 6.003906 c 0 0.570312 -0.429688 1 -1 1 h -10 c -0.570312 0 -1 -0.429688 -1 -1 v -6 c 0 -0.570312 0.429688 -1 1 -1 h 5.96875 l 2.007812 -2 z m 0 0"
- fill="#2e3436"
- id="path3489"
- style="fill:#000000" />
- <g
- clip-path="url(#c)"
- mask="url(#b)"
- transform="matrix(1 0 0 1 -40 -620)"
- id="g3493"
- style="fill:#000000">
- <path
- d="m 439.105469 225.78125 h 7.839843 c -0.890624 0.371094 -0.972656 1.847656 0 2.25 h -7.839843 z m 0 0"
- fill="#2e3436"
- id="path3491"
- style="fill:#000000" />
- </g>
- <g
- clip-path="url(#e)"
- mask="url(#d)"
- transform="matrix(1 0 0 1 -40 -620)"
- id="g3497"
- style="fill:#000000">
- <path
- d="m 29.25 627.75 h 0.75 v 0.75 h -0.75 z m 0 0"
- fill="#2e3436"
- fill-rule="evenodd"
- id="path3495"
- style="fill:#000000" />
- </g>
- <g
- clip-path="url(#g)"
- mask="url(#f)"
- transform="matrix(1 0 0 1 -40 -620)"
- id="g3501"
- style="fill:#000000">
- <path
- d="m 30 627 h 0.75 v 0.75 h -0.75 z m 0 0"
- fill="#2e3436"
- fill-rule="evenodd"
- id="path3499"
- style="fill:#000000" />
- </g>
- <g
- clip-path="url(#i)"
- mask="url(#h)"
- transform="matrix(1 0 0 1 -40 -620)"
- id="g3505"
- style="fill:#000000">
- <path
- d="m 30.75 629.25 h 0.75 v 0.75 h -0.75 z m 0 0"
- fill="#2e3436"
- fill-rule="evenodd"
- id="path3503"
- style="fill:#000000" />
- </g>
- <g
- clip-path="url(#k)"
- mask="url(#j)"
- transform="matrix(1 0 0 1 -40 -620)"
- id="g3509"
- style="fill:#000000">
- <path
- d="m 29.25 629.25 h 0.75 v 0.75 h -0.75 z m 0 0"
- fill="#2e3436"
- fill-rule="evenodd"
- id="path3507"
- style="fill:#000000" />
- </g>
- <g
- clip-path="url(#m)"
- mask="url(#l)"
- transform="matrix(1 0 0 1 -40 -620)"
- id="g3513"
- style="fill:#000000">
- <path
- d="m 30 630 h 0.75 v 0.75 h -0.75 z m 0 0"
- fill="#2e3436"
- fill-rule="evenodd"
- id="path3511"
- style="fill:#000000" />
- </g>
- <g
- clip-path="url(#o)"
- mask="url(#n)"
- transform="matrix(1 0 0 1 -40 -620)"
- id="g3517"
- style="fill:#000000">
- <path
- d="m 31.5 630 h 0.75 v 0.75 h -0.75 z m 0 0"
- fill="#2e3436"
- fill-rule="evenodd"
- id="path3515"
- style="fill:#000000" />
- </g>
- <g
- clip-path="url(#q)"
- mask="url(#p)"
- transform="matrix(1 0 0 1 -40 -620)"
- id="g3521"
- style="fill:#000000">
- <path
- d="m 119.253906 648.75 v 5.25 h 5.25 v -5.25 z m 0 0"
- fill="#2e3436"
- id="path3519"
- style="fill:#000000" />
- </g>
- <path
- d="m 11 7 c 0 1.65625 -1.339844 3.007812 -3 3 h -3 v -3 c 0 -1.660156 1.34375 -3 3 -3 c 1.660156 0 3 1.339844 3 3 z m 0 0"
- fill="#2e3436"
- id="path3523"
- style="fill:#000000" />
- <path
- d="m 13.398438 0 l -3.46875 3.457031 c 0.683593 0.355469 1.234374 0.910157 1.589843 1.589844 l 0.171875 -0.171875 l 0.007813 0.007812 l 4.300781 -4.300781 v -0.582031 z m 0 0"
- fill="#2e3436"
- id="path3525"
- style="fill:#000000" />
- <g
- clip-path="url(#s)"
- mask="url(#r)"
- transform="matrix(1 0 0 1 -40 -620)"
- id="g3529"
- style="fill:#000000">
- <path
- d="m 181.503906 635.25 h 2.25 v 9 h -2.25 z m 0 0"
- fill="#2e3436"
- id="path3527"
- style="fill:#000000" />
- </g>
- <path
- d="m 5 14 c -1.105469 0 -2 0.894531 -2 2 h 10 c 0 -1.105469 -0.894531 -2 -2 -2 z m 0 0"
- fill="#2e3436"
- id="path3531"
- style="fill:#000000" />
-</svg>
diff --git a/.config/ags/assets/processor-symbolic.svg b/.config/ags/assets/processor-symbolic.svg
deleted file mode 100644
index 832dbaf..0000000
--- a/.config/ags/assets/processor-symbolic.svg
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
- <path d="m 5 5 h 6 v 6 h -6 z m 0 0"/>
- <path d="m 13 5 h 3 v 1 h -3 z m 0 0"/>
- <path d="m 13 7 h 3 v 1 h -3 z m 0 0"/>
- <path d="m 13 9 h 3 v 1 h -3 z m 0 0"/>
- <path d="m 0 6 h 3 v 1 h -3 z m 0 0"/>
- <path d="m 0 8 h 3 v 1 h -3 z m 0 0"/>
- <path d="m 0 10 h 3 v 1 h -3 z m 0 0"/>
- <path d="m 5 0 h 1 v 3 h -1 z m 0 0"/>
- <path d="m 7 0 h 1 v 3 h -1 z m 0 0"/>
- <path d="m 9 0 h 1 v 3 h -1 z m 0 0"/>
- <path d="m 10 13 h 1 v 3 h -1 z m 0 0"/>
- <path d="m 8 13 h 1 v 3 h -1 z m 0 0"/>
- <path d="m 6 13 h 1 v 3 h -1 z m 0 0"/>
- <path d="m 5 2 c -1.644531 0 -3 1.355469 -3 3 v 6 c 0 1.644531 1.355469 3 3 3 h 6 c 1.644531 0 3 -1.355469 3 -3 v -6 c 0 -1.644531 -1.355469 -3 -3 -3 z m 0 2 h 6 c 0.570312 0 1 0.429688 1 1 v 6 c 0 0.570312 -0.429688 1 -1 1 h -6 c -0.570312 0 -1 -0.429688 -1 -1 v -6 c 0 -0.570312 0.429688 -1 1 -1 z m 0 0"/>
-</svg>
diff --git a/.config/ags/assets/rotation.svg b/.config/ags/assets/rotation.svg
deleted file mode 100644
index 7ed7e34..0000000
--- a/.config/ags/assets/rotation.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <defs>
- <style id="current-color-scheme" type="text/css">
- .ColorScheme-Text { color:#dfdfdf; } .ColorScheme-Highlight { color:#4285f4; } .ColorScheme-NeutralText { color:#ff9800; } .ColorScheme-PositiveText { color:#4caf50; } .ColorScheme-NegativeText { color:#f44336; }
- </style>
- </defs>
- <path style="fill:currentColor" class="ColorScheme-Text" d="M 1 1 L 1 10 L 7 10 L 7 5 L 9 5 C 10.108 5 11 5.89199 11 7 L 11 9 L 8 9 L 8 11 L 6 11 L 6 15 L 15 15 L 15 9 L 12 9 L 12 7 C 12 5.338 10.662 4 9 4 L 7 4 L 7 1 L 1 1 z" transform="translate(4 4)"/>
-</svg>
diff --git a/.config/ags/assets/swapnext.svg b/.config/ags/assets/swapnext.svg
deleted file mode 100644
index 0690cb9..0000000
--- a/.config/ags/assets/swapnext.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <defs>
- <style id="current-color-scheme" type="text/css">
- .ColorScheme-Text { color:#dfdfdf; } .ColorScheme-Highlight { color:#4285f4; } .ColorScheme-NeutralText { color:#ff9800; } .ColorScheme-PositiveText { color:#4caf50; } .ColorScheme-NegativeText { color:#f44336; }
- </style>
- </defs>
- <path style="fill:currentColor" class="ColorScheme-Text" d="M 3 1 C 1.892 1 1 1.892 1 3 L 1 13 C 1 14.108 1.892 15 3 15 L 13 15 C 14.108 15 15 14.108 15 13 L 15 3 C 15 1.892 14.108 1 13 1 L 3 1 z M 3 3 L 13 3 L 13 13 L 3 13 L 3 3 z M 5 4 A 1 1 0 0 0 4 5 A 1 1 0 0 0 5 6 A 1 1 0 0 0 6 5 A 1 1 0 0 0 5 4 z M 11 4 A 1 1 0 0 0 10 5 A 1 1 0 0 0 11 6 A 1 1 0 0 0 12 5 A 1 1 0 0 0 11 4 z M 8 7 A 1 1 0 0 0 7 8 A 1 1 0 0 0 8 9 A 1 1 0 0 0 9 8 A 1 1 0 0 0 8 7 z M 5 10 A 1 1 0 0 0 4 11 A 1 1 0 0 0 5 12 A 1 1 0 0 0 6 11 A 1 1 0 0 0 5 10 z M 11 10 A 1 1 0 0 0 10 11 A 1 1 0 0 0 11 12 A 1 1 0 0 0 12 11 A 1 1 0 0 0 11 10 z" transform="translate(4 4)"/>
-</svg>
diff --git a/.config/ags/assets/tbox-close.svg b/.config/ags/assets/tbox-close.svg
deleted file mode 100644
index f325d3c..0000000
--- a/.config/ags/assets/tbox-close.svg
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- width="24"
- height="24"
- version="1.1"
- id="svg1"
- sodipodi:docname="tbox-close.svg"
- xml:space="preserve"
- inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
- id="namedview1"
- pagecolor="#ffffff"
- bordercolor="#000000"
- borderopacity="0.25"
- inkscape:showpageshadow="2"
- inkscape:pageopacity="0.0"
- inkscape:pagecheckerboard="0"
- inkscape:deskcolor="#d1d1d1"
- inkscape:zoom="26.708333"
- inkscape:cx="11.981279"
- inkscape:cy="11.981279"
- inkscape:current-layer="svg1" /><defs
- id="defs1"><style
- id="current-color-scheme"
- type="text/css">
- .ColorScheme-Text { color:#dfdfdf; } .ColorScheme-Highlight { color:#4285f4; } .ColorScheme-NeutralText { color:#ff9800; } .ColorScheme-PositiveText { color:#4caf50; } .ColorScheme-NegativeText { color:#f44336; }
- </style></defs><g
- id="g2"
- transform="matrix(0.43167414,0,0,0.42254065,1.6211,1.3192164)"><path
- style="opacity:0.2"
- d="m 34.158694,7.001891 c -2.339941,-0.051114 -4.593769,0.9363666 -6.144072,2.6910582 -0.0012,0.0014 -0.0027,0.0025 -0.0039,0.0039 l -4.015616,4.4240828 -4.01174,-4.4162958 c -1.424465,-1.6183716 -3.450682,-2.592914 -5.603207,-2.6949526 -0.260519,-0.012616 -0.51772,-0.013001 -0.778224,0 a 5.977352,5.9824591 0 0 0 -0.01945,0 C 7.2433432,7.3455998 3.8467314,15.780704 8.1816032,20.422133 L 13.224489,25.975605 8.2594255,31.4434 c -1.5192901,1.580887 -2.4400962,4.078962 -2.2296097,6.266155 0.2104868,2.187194 1.2500876,3.924619 2.6187213,5.167923 1.3686339,1.243304 3.1976469,2.112373 5.3930859,2.110788 2.19544,-0.0016 4.590268,-1.161185 6.015666,-2.827365 l 3.937809,-4.330618 4.054544,4.463029 -0.147863,-0.167461 c 1.418645,1.683037 3.819828,2.866353 6.02734,2.874097 2.20751,0.0078 4.047562,-0.863731 5.420324,-2.110787 1.372761,-1.247055 2.417086,-2.995369 2.622612,-5.195185 0.205525,-2.199813 -0.739595,-4.705945 -2.276302,-6.281731 l -4.933937,-5.43664 5.050669,-5.561261 c 2.191468,-2.3538 2.626913,-5.893796 1.513644,-8.536614 C 40.212861,9.2349127 37.376326,7.0748944 34.162585,7.001891 a 5.977352,5.9824591 0 0 0 -0.0039,0 z"
- id="path1-3" /><path
- style="fill:#4f4f4f"
- d="m 34.158694,6.0018906 c -2.339941,-0.051114 -4.593769,0.9363666 -6.144072,2.6910586 -0.0012,0.00139 -0.0027,0.0025 -0.0039,0.0039 L 23.995106,13.120932 19.983366,8.7046361 C 18.558901,7.0862642 16.532684,6.1117218 14.380159,6.0096832 c -0.260519,-0.012616 -0.51772,-0.013001 -0.778224,0 a 5.977352,5.9824591 0 0 0 -0.01945,0 C 7.2433432,6.3455994 3.8467314,14.780704 8.1816032,19.422133 L 13.224489,24.975605 8.2594255,30.4434 c -1.5192901,1.580887 -2.4400962,4.078962 -2.2296097,6.266155 0.2104868,2.187194 1.2500876,3.924619 2.6187213,5.167923 1.3686339,1.243304 3.1976469,2.112373 5.3930859,2.110788 2.19544,-0.0016 4.590268,-1.161185 6.015666,-2.827365 l 3.937809,-4.330618 4.054544,4.463029 -0.147863,-0.167461 c 1.418645,1.683037 3.819828,2.866353 6.02734,2.874097 2.20751,0.0078 4.047562,-0.863731 5.420324,-2.110787 1.372761,-1.247055 2.417086,-2.995369 2.622612,-5.195185 0.205525,-2.199813 -0.739595,-4.705945 -2.276302,-6.281731 l -4.933937,-5.43664 5.050669,-5.561261 c 2.191468,-2.3538 2.626913,-5.893796 1.513644,-8.536614 C 40.212861,8.2349123 37.376326,6.074894 34.162585,6.0018906 a 5.977352,5.9824591 0 0 0 -0.0039,0 z"
- id="path2" /><path
- style="opacity:0.2"
- d="m 13.875,12.980111 a 2.0002,2.0002 0 0 0 -1.355469,3.363282 l 8.789063,9.667968 -8.769532,9.644532 A 2.0002,2.0002 0 1 0 15.5,38.343393 l 8.507812,-9.359374 8.51172,9.359374 a 2.0006762,2.0006762 0 1 0 2.960936,-2.6875 L 26.710938,26.011361 35.5,16.343393 a 2.0002,2.0002 0 0 0 -1.417968,-3.363282 2.0002,2.0002 0 0 0 -1.54297,0.675782 l -8.53125,9.382812 -8.527343,-9.382812 a 2.0002,2.0002 0 0 0 -1.40625,-0.675782 2.0002,2.0002 0 0 0 -0.199219,0 z"
- id="path3" /><path
- style="fill:#ffffff"
- transform="scale(2)"
- d="M 6.9375,5.9902344 A 1.0001,1.0001 0 0 0 6.2597656,7.671875 l 4.3945314,4.833984 -4.3847658,4.822266 A 1.0001,1.0001 0 1 0 7.75,18.671875 l 4.253906,-4.679687 4.25586,4.679687 a 1.0003381,1.0003381 0 1 0 1.480468,-1.34375 L 13.355469,12.505859 17.75,7.671875 A 1.0001,1.0001 0 0 0 17.041016,5.9902344 1.0001,1.0001 0 0 0 16.269531,6.328125 L 12.003906,11.019531 7.7402344,6.328125 a 1.0001,1.0001 0 0 0 -0.703125,-0.3378906 1.0001,1.0001 0 0 0 -0.099609,0 z"
- id="path4" /><path
- style="opacity:0.2;fill:#ffffff"
- transform="scale(2)"
- d="m 17.080078,3 c -1.16997,-0.025557 -2.297114,0.4683571 -3.072266,1.3457031 0,0 -0.002,0.00195 -0.002,0.00195 L 11.998047,6.5605469 9.9921875,4.3515625 C 9.279955,3.5423765 8.2657156,3.0549255 7.1894531,3.0039062 c -0.1302595,-0.00631 -0.2584199,-0.0065 -0.3886719,0 a 2.988676,2.9912295 0 0 0 -0.00977,0 C 4.516087,3.1244563 3.008504,5.3315905 3.1347612,7.4257812 3.2542394,5.4946775 4.6972247,3.6148577 6.7910112,3.5039062 a 2.988676,2.9912295 0 0 1 0.00977,0 c 0.130252,-0.0065 0.2584124,-0.00631 0.3886719,0 1.0762625,0.051019 2.0905019,0.5384705 2.8027344,1.3476563 l 2.0058595,2.2089844 2.007812,-2.2128907 c 0,0 0.002,-0.00195 0.002,-0.00195 C 14.782964,3.9683573 15.910108,3.474443 17.080078,3.5 a 2.988676,2.9912295 0 0 0 0.002,0 c 1.606871,0.036502 3.023444,1.1180442 3.580078,2.4394531 0.16598,0.3940229 0.255721,0.8292143 0.28125,1.2753907 0.03853,-0.6193247 -0.05357,-1.2348847 -0.28125,-1.7753907 C 20.105475,4.1180443 18.688902,3.0365017 17.082031,3 a 2.988676,2.9912295 0 0 0 -0.002,0 z M 6.3847656,12.738281 4.1289062,15.222656 c -0.7462708,0.776527 -1.199139,1.994686 -1.1152343,3.074219 0.063557,-0.939898 0.4824865,-1.915817 1.1152343,-2.574219 l 2.4824219,-2.734375 z m 11.2226564,0 -0.226563,0.25 2.466797,2.71875 c 0.646214,0.662647 1.079159,1.652595 1.140625,2.605469 0.08979,-1.091494 -0.380318,-2.325827 -1.140625,-3.105469 z"
- id="path5" /></g></svg>
diff --git a/.config/ags/assets/terminal-symbolic.svg b/.config/ags/assets/terminal-symbolic.svg
deleted file mode 100644
index 9f82bcf..0000000
--- a/.config/ags/assets/terminal-symbolic.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
- <path d="m 2.199219 0 c -1.207031 0 -2.199219 1.007812 -2.199219 2.207031 v 10.585938 c 0 1.199219 0.992188 2.207031 2.199219 2.207031 h 11.601562 c 1.207031 0 2.199219 -1.007812 2.199219 -2.207031 v -10.585938 c 0 -1.199219 -0.992188 -2.207031 -2.199219 -2.207031 z m 0 2 h 11.601562 c 0.121094 0 0.199219 0.070312 0.199219 0.207031 v 10.585938 c 0 0.136719 -0.078125 0.207031 -0.199219 0.207031 h -11.601562 c -0.121094 0 -0.199219 -0.070312 -0.199219 -0.207031 v -10.585938 c 0 -0.136719 0.078125 -0.207031 0.199219 -0.207031 z m 0 0"/>
- <path d="m 4.515625 5.898438 c -0.164063 -0.003907 -0.324219 0.0625 -0.441406 0.175781 c -0.230469 0.234375 -0.230469 0.617187 0 0.851562 l 1.578125 1.574219 l -1.578125 1.574219 c -0.230469 0.234375 -0.230469 0.617187 0 0.851562 c 0.234375 0.230469 0.617187 0.230469 0.851562 0 l 2 -2 c 0.230469 -0.234375 0.230469 -0.617187 0 -0.851562 l -2 -2 c -0.109375 -0.105469 -0.257812 -0.167969 -0.410156 -0.175781 z m 3.484375 4.101562 v 1 h 3 v -1 z m 0 0"/>
-</svg>
diff --git a/.config/ags/assets/togglesplit.svg b/.config/ags/assets/togglesplit.svg
deleted file mode 100644
index 15d5011..0000000
--- a/.config/ags/assets/togglesplit.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" version="1.1">
- <defs>
- <style id="current-color-scheme" type="text/css">
- .ColorScheme-Text { color:#dfdfdf; } .ColorScheme-Highlight { color:#4285f4; } .ColorScheme-NeutralText { color:#ff9800; } .ColorScheme-PositiveText { color:#4caf50; } .ColorScheme-NegativeText { color:#f44336; }
- </style>
- </defs>
- <g transform="translate(4,4)">
- <path style="fill:currentColor" class="ColorScheme-Text" d="M 1,1 V 10 H 5 V 5 H 10 V 1 Z M 6,6 H 15 V 15 H 6 Z"/>
- </g>
-</svg>
diff --git a/.config/ags/assets/toolbars-symbolic.svg b/.config/ags/assets/toolbars-symbolic.svg
deleted file mode 100644
index 9f4c564..0000000
--- a/.config/ags/assets/toolbars-symbolic.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
- <path d="m 2 0 c -1.214844 0 -2 0.828125 -2 2 v 12 c 0 1 1 2 2 2 h 11.984375 c 1 0 2 -1 2 -2 v -12 c 0 -1.238281 -0.828125 -2 -2 -2 z m 0 2 h 2 v 2 h -2 z m 3 0 h 2 v 2 h -2 z m 3 0 h 2 v 2 h -2 z m -6 4 h 11.984375 v 8 h -11.984375 z m 0 0"/>
-</svg>
diff --git a/.config/ags/assets/wp-next.svg b/.config/ags/assets/wp-next.svg
deleted file mode 100644
index ac0245d..0000000
--- a/.config/ags/assets/wp-next.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" version="1.1">
- <defs>
- <style id="current-color-scheme" type="text/css">
- .ColorScheme-Text { color:#dfdfdf; } .ColorScheme-Highlight { color:#4285f4; } .ColorScheme-NeutralText { color:#ff9800; } .ColorScheme-PositiveText { color:#4caf50; } .ColorScheme-NegativeText { color:#f44336; }
- </style>
- </defs>
- <g transform="translate(4,4)">
- <path style="fill:currentColor" class="ColorScheme-Text" d="M 3,2 V 14 L 14,8 Z"/>
- </g>
-</svg>
diff --git a/.config/ags/assets/wp-prev.svg b/.config/ags/assets/wp-prev.svg
deleted file mode 100644
index 12ed8dd..0000000
--- a/.config/ags/assets/wp-prev.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" version="1.1">
- <defs>
- <style id="current-color-scheme" type="text/css">
- .ColorScheme-Text { color:#dfdfdf; } .ColorScheme-Highlight { color:#4285f4; } .ColorScheme-NeutralText { color:#ff9800; } .ColorScheme-PositiveText { color:#4caf50; } .ColorScheme-NegativeText { color:#f44336; }
- </style>
- </defs>
- <g transform="translate(4,4)">
- <path style="fill:currentColor" class="ColorScheme-Text" d="M 13,2 2,8 13,14 Z"/>
- </g>
-</svg>
diff --git a/.config/ags/config.js b/.config/ags/config.js
deleted file mode 100644
index 2864dec..0000000
--- a/.config/ags/config.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import GLib from "gi://GLib"
-
-const main = "/tmp/ags/main.js"
-const entry = `${App.configDir}/main.ts`
-const bundler = GLib.getenv("AGS_BUNDLER") || "bun"
-
-const v = {
- ags: pkg.version?.split(".").map(Number) || [],
- expect: [1, 8, 0],
-}
-
-try {
- switch (bundler) {
- case "bun": await Utils.execAsync([
- "bun", "build", entry,
- "--outfile", main,
- "--external", "resource://*",
- "--external", "gi://*",
- "--external", "file://*",
- ]); break
-
- case "esbuild": await Utils.execAsync([
- "esbuild", "--bundle", entry,
- "--format=esm",
- `--outfile=${main}`,
- "--external:resource://*",
- "--external:gi://*",
- "--external:file://*",
- ]); break
-
- default:
- throw `"${bundler}" is not a valid bundler`
- }
-
- if (v.ags[1] < v.expect[1] || v.ags[2] < v.expect[2]) {
- print(`my config needs at least v${v.expect.join(".")}, yours is v${v.ags.join(".")}`)
- App.quit()
- }
-
- await import(`file://${main}`)
-} catch (error) {
- console.error(error)
- App.quit()
-}
-
-export { }
diff --git a/.config/ags/default.nix b/.config/ags/default.nix
deleted file mode 100644
index f0e0c41..0000000
--- a/.config/ags/default.nix
+++ /dev/null
@@ -1,104 +0,0 @@
-{
- inputs,
- writeShellScript,
- system,
- stdenv,
- cage,
- swww,
- esbuild,
- dart-sass,
- fd,
- fzf,
- brightnessctl,
- accountsservice,
- slurp,
- wf-recorder,
- wl-clipboard,
- wayshot,
- swappy,
- hyprpicker,
- pavucontrol,
- networkmanager,
- gtk3,
- which,
-}: let
- name = "asztal";
-
- ags = inputs.ags.packages.${system}.default.override {
- extraPackages = [accountsservice];
- };
-
- dependencies = [
- which
- dart-sass
- fd
- fzf
- brightnessctl
- swww
- inputs.matugen.packages.${system}.default
- inputs.hyprland.packages.${system}.default
- slurp
- wf-recorder
- wl-clipboard
- wayshot
- swappy
- hyprpicker
- pavucontrol
- networkmanager
- gtk3
- ];
-
- addBins = list: builtins.concatStringsSep ":" (builtins.map (p: "${p}/bin") list);
-
- greeter = writeShellScript "greeter" ''
- export PATH=$PATH:${addBins dependencies}
- ${cage}/bin/cage -ds -m last ${ags}/bin/ags -- -c ${config}/greeter.js
- '';
-
- desktop = writeShellScript name ''
- export PATH=$PATH:${addBins dependencies}
- ${ags}/bin/ags -b ${name} -c ${config}/config.js $@
- '';
-
- config = stdenv.mkDerivation {
- inherit name;
- src = ./.;
-
- buildPhase = ''
- ${esbuild}/bin/esbuild \
- --bundle ./main.ts \
- --outfile=main.js \
- --format=esm \
- --external:resource://\* \
- --external:gi://\* \
-
- ${esbuild}/bin/esbuild \
- --bundle ./greeter/greeter.ts \
- --outfile=greeter.js \
- --format=esm \
- --external:resource://\* \
- --external:gi://\* \
- '';
-
- installPhase = ''
- mkdir -p $out
- cp -r assets $out
- cp -r style $out
- cp -r greeter $out
- cp -r widget $out
- cp -f main.js $out/config.js
- cp -f greeter.js $out/greeter.js
- '';
- };
-in
- stdenv.mkDerivation {
- inherit name;
- src = config;
-
- installPhase = ''
- mkdir -p $out/bin
- cp -r . $out
- cp ${desktop} $out/bin/${name}
- cp ${greeter} $out/bin/greeter
- '';
- }
diff --git a/.config/ags/greeter.js b/.config/ags/greeter.js
deleted file mode 100644
index 5c8e369..0000000
--- a/.config/ags/greeter.js
+++ /dev/null
@@ -1,18 +0,0 @@
-const main = "/tmp/ags/greeter.js"
-const entry = `${App.configDir}/greeter/greeter.ts`
-
-try {
- await Utils.execAsync([
- "bun", "build", entry,
- "--outfile", main,
- "--external", "resource://*",
- "--external", "gi://*",
- "--external", "file://*",
- ])
- await import(`file://${main}`)
-} catch (error) {
- console.error(error)
- App.quit()
-}
-
-export { }
diff --git a/.config/ags/greeter/auth.ts b/.config/ags/greeter/auth.ts
deleted file mode 100644
index 23477eb..0000000
--- a/.config/ags/greeter/auth.ts
+++ /dev/null
@@ -1,109 +0,0 @@
-import AccountsService from "gi://AccountsService?version=1.0"
-import GLib from "gi://GLib?version=2.0"
-import icons from "lib/icons"
-
-const { iconFile, realName, userName } = AccountsService.UserManager
- .get_default().list_users()[0]
-
-const loggingin = Variable(false)
-
-const CMD = GLib.getenv("ASZTAL_DM_CMD")
- || "Hyprland"
-
-const ENV = GLib.getenv("ASZTAL_DM_ENV")
- || "WLR_NO_HARDWARE_CURSORS=1 _JAVA_AWT_WM_NONREPARENTING=1"
-
-async function login(pw: string) {
- loggingin.value = true
- const greetd = await Service.import("greetd")
- return greetd.login(userName, pw, CMD, ENV.split(/\s+/))
- .catch(res => {
- loggingin.value = false
- response.label = res?.description || JSON.stringify(res)
- password.text = ""
- revealer.reveal_child = true
- })
-}
-
-const avatar = Widget.Box({
- class_name: "avatar",
- hpack: "center",
- css: `background-image: url('${iconFile}')`,
-})
-
-const password = Widget.Entry({
- placeholder_text: "Password",
- hexpand: true,
- visibility: false,
- on_accept: ({ text }) => { login(text || "") },
-})
-
-const response = Widget.Label({
- class_name: "response",
- wrap: true,
- max_width_chars: 35,
- hpack: "center",
- hexpand: true,
- xalign: .5,
-})
-
-const revealer = Widget.Revealer({
- transition: "slide_down",
- child: response,
-})
-
-export default Widget.Box({
- class_name: "auth",
- attribute: { password },
- vertical: true,
- children: [
- Widget.Overlay({
- child: Widget.Box(
- {
- css: "min-width: 200px; min-height: 200px;",
- vertical: true,
- },
- Widget.Box({
- class_name: "wallpaper",
- css: `background-image: url('${WALLPAPER}')`,
- }),
- Widget.Box({
- class_name: "wallpaper-contrast",
- vexpand: true,
- }),
- ),
- overlay: Widget.Box(
- {
- vpack: "end",
- vertical: true,
- },
- avatar,
- Widget.Box({
- hpack: "center",
- children: [
- Widget.Icon(icons.ui.avatar),
- Widget.Label(realName || userName),
- ],
- }),
- Widget.Box(
- {
- class_name: "password",
- },
- Widget.Spinner({
- visible: loggingin.bind(),
- active: true,
- }),
- Widget.Icon({
- visible: loggingin.bind().as(b => !b),
- icon: icons.ui.lock,
- }),
- password,
- ),
- ),
- }),
- Widget.Box(
- { class_name: "response-box" },
- revealer,
- ),
- ],
-})
diff --git a/.config/ags/greeter/greeter.scss b/.config/ags/greeter/greeter.scss
deleted file mode 100644
index e3a5cd8..0000000
--- a/.config/ags/greeter/greeter.scss
+++ /dev/null
@@ -1,64 +0,0 @@
-@import "../style/mixins/floating-widget.scss";
-@import "../style/mixins/widget.scss";
-@import "../style/mixins/spacing.scss";
-@import "../style/mixins/unset.scss";
-@import "../style/mixins/a11y-button.scss";
-@import "../widget/bar/bar.scss";
-
-window#greeter {
- background-color: lighten($bg, 6%);
- color: $fg;
-
- .bar {
- background-color: transparent;
-
- .date {
- @include unset($rec: true);
- @include panel-button($flat: true, $reactive: false);
- }
- }
-
- .auth {
- @include floating_widget;
- border-radius: $radius;
- min-width: 400px;
- padding: 0;
-
- .wallpaper {
- min-height: 220px;
- background-size: cover;
- border-top-left-radius: $radius;
- border-top-right-radius: $radius;
- }
-
- .wallpaper-contrast {
- min-height: 100px;
- }
-
- .avatar {
- border-radius: 99px;
- min-width: 140px;
- min-height: 140px;
- background-size: cover;
- box-shadow: 3px 3px 6px 0 $shadow-color;
- margin-bottom: $spacing;
- }
-
-
- .password {
- entry {
- @include button;
- padding: $padding*.7 $padding;
- margin-left: $spacing*.5;
- }
-
- margin: 0 $padding*4;
- margin-top: $spacing;
- }
-
- .response-box {
- color: $error-bg;
- margin: $spacing 0;
- }
- }
-}
diff --git a/.config/ags/greeter/greeter.ts b/.config/ags/greeter/greeter.ts
deleted file mode 100644
index eb1493f..0000000
--- a/.config/ags/greeter/greeter.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import "./session"
-import "style/style"
-import GLib from "gi://GLib?version=2.0"
-import RegularWindow from "widget/RegularWindow"
-import statusbar from "./statusbar"
-import auth from "./auth"
-
-const win = RegularWindow({
- name: "greeter",
- setup: self => {
- self.set_default_size(500, 500)
- self.show_all()
- auth.attribute.password.grab_focus()
- },
- child: Widget.Overlay({
- child: Widget.Box({ expand: true }),
- overlays: [
- Widget.Box({
- vpack: "start",
- hpack: "fill",
- hexpand: true,
- child: statusbar,
- }),
- Widget.Box({
- vpack: "center",
- hpack: "center",
- child: auth,
- }),
- ],
- }),
-})
-
-App.config({
- icons: "./assets",
- windows: [win],
- cursorTheme: GLib.getenv("XCURSOR_THEME")!,
-})
diff --git a/.config/ags/greeter/session.ts b/.config/ags/greeter/session.ts
deleted file mode 100644
index 092a5c2..0000000
--- a/.config/ags/greeter/session.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import GLib from "gi://GLib?version=2.0"
-import AccountsService from "gi://AccountsService?version=1.0"
-
-const { userName } = AccountsService.UserManager.get_default().list_users()[0]
-
-declare global {
- const WALLPAPER: string
-}
-
-Object.assign(globalThis, {
- TMP: `${GLib.get_tmp_dir()}/greeter`,
- OPTIONS: "/var/cache/greeter/options.json",
- WALLPAPER: "/var/cache/greeter/background",
- // TMP: "/tmp/ags",
- // OPTIONS: Utils.CACHE_DIR + "/options.json",
- // WALLPAPER: Utils.HOME + "/.config/background",
- USER: userName,
-})
-
-Utils.ensureDirectory(TMP)
diff --git a/.config/ags/greeter/statusbar.ts b/.config/ags/greeter/statusbar.ts
deleted file mode 100644
index 8076011..0000000
--- a/.config/ags/greeter/statusbar.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-import { clock } from "lib/variables"
-import options from "options"
-import icons from "lib/icons"
-import BatteryBar from "widget/bar/buttons/BatteryBar"
-import PanelButton from "widget/bar/PanelButton"
-
-const { scheme } = options.theme
-const { monochrome } = options.bar.powermenu
-const { format } = options.bar.date
-
-const poweroff = PanelButton({
- class_name: "powermenu",
- child: Widget.Icon(icons.powermenu.shutdown),
- on_clicked: () => Utils.exec("shutdown now"),
- setup: self => self.hook(monochrome, () => {
- self.toggleClassName("colored", !monochrome.value)
- self.toggleClassName("box")
- }),
-})
-
-const date = PanelButton({
- class_name: "date",
- child: Widget.Label({
- label: clock.bind().as(c => c.format(`${format}`)!),
- }),
-})
-
-const darkmode = PanelButton({
- class_name: "darkmode",
- child: Widget.Icon({ icon: scheme.bind().as(s => icons.color[s]) }),
- on_clicked: () => scheme.value = scheme.value === "dark" ? "light" : "dark",
-})
-
-export default Widget.CenterBox({
- class_name: "bar",
- hexpand: true,
- center_widget: date,
- end_widget: Widget.Box({
- hpack: "end",
- children: [
- darkmode,
- BatteryBar(),
- poweroff,
- ],
- }),
-})
diff --git a/.config/ags/lib/battery.ts b/.config/ags/lib/battery.ts
deleted file mode 100644
index 3817260..0000000
--- a/.config/ags/lib/battery.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import icons from "./icons"
-
-export default async function init() {
- const bat = await Service.import("battery")
- bat.connect("notify::percent", ({ percent, charging }) => {
- const low = 30
- if (percent !== low || percent !== low / 2 || !charging)
- return
-
- Utils.notify({
- summary: `${percent}% Battery Percentage`,
- iconName: icons.battery.warning,
- urgency: "critical",
- })
- })
-}
diff --git a/.config/ags/lib/client.js b/.config/ags/lib/client.js
deleted file mode 100644
index 9fb9164..0000000
--- a/.config/ags/lib/client.js
+++ /dev/null
@@ -1,134 +0,0 @@
-import Hyprland from 'resource:///com/github/Aylur/ags/service/hyprland.js';
-import { find_icon } from "./iconUtils.js";
-import { lookUpIcon, timeout } from 'resource:///com/github/Aylur/ags/utils.js';
-
-
-export let clientMapWorkSpace = {};
-
-export function substitute(str) {
- const subs = [
- { from: "code-url-handler", to: "visual-studio-code" },
- { from: "Code", to: "visual-studio-code" },
- { from: "GitHub Desktop", to: "github-desktop" },
- { from: "wpsoffice", to: "wps-office2019-kprometheus" },
- { from: "gnome-tweaks", to: "org.gnome.tweaks" },
- { from: "Minecraft* 1.20.1", to: "minecraft" },
- { from: "", to: "image-missing" },
- ];
-
- for (const { from, to } of subs) {
- if (from === str) {
- return to;
- }
- }
-
- return str;
-}
-
-function titleToClient(title, className) {
- const subs = [
- { from: "musicfox", to: "musicfox" },
- ];
-
- for (const { from, to } of subs) {
- if (title.indexOf(from) !== -1) {
- return to;
- }
- }
-
- return className
-}
-
-export const getClientByAdrees = function(address) {
-
- const clients = Hyprland.clients
-
- const client = clients.find(item => {
- return item.address === address
- })
-
- return client
-}
-
-//Fullscreen client
-export const getFullScreenClientAddress = function(workspace_id) {
-
- const clients = Hyprland.clients
- const client = clients.find(item => {
- return item.fullscreen && item.workspace.id === workspace_id
- })
- return client
-}
-
-export const ignoreAppsClass = [
- 'image-missing',
- 'fcitx',
- 'rofi'
-]
-
-export const getClientIcon = (clientClass, title = "") => {
-
- clientClass.toLowerCase()
- clientClass = clientClass.replace(" ", "_");
-
-
- if (title.length > 0) {
- clientClass = titleToClient(title, clientClass)
- }
-
- const awesome_icon = find_icon(clientClass)
- if (awesome_icon) {
- return awesome_icon
- }
-
- if (lookUpIcon(clientClass)) {
- return clientClass
- }
-
- if (find_icon('system')) {
- return find_icon('system')
- }
-
- return ""
-}
-
-
-export const focus = (client) => {
- //client
- const { address } = client;
- const liveClient = getClientByAdrees(address);
-
- //special window
- if (liveClient.workspace.id < 0) {
- const oldWorkSpace = clientMapWorkSpace[address];
- if (oldWorkSpace) {
- Utils.exec(
- `hyprctl dispatch movetoworkspace ${oldWorkSpace},address:${address}`,
- );
- Utils.exec(`hyprctl dispatch workspace ${oldWorkSpace}`);
- }
- }
-
- //fullscreen
- if (liveClient.fullscreen) {
- Utils.exec("hyprctl dispatch focuswindow address:" + address);
- return;
- }
-
- //workspace fullscreen client
- const currentFullScreenAddress = getFullScreenClientAddress(
- liveClient.workspace.id,
- );
- if (currentFullScreenAddress) {
- const fullScreenAdress = currentFullScreenAddress.address;
- Utils.exec("hyprctl dispatch focuswindow address:" + fullScreenAdress);
- Utils.exec("hyprctl dispatch fullscreen 1");
- }
-
- Utils.exec("hyprctl dispatch focuswindow address:" + address);
- // Utils.exec('hyprctl dispatch cyclenext')
- Utils.exec("hyprctl dispatch alterzorder top,address:" + address);
- if (currentFullScreenAddress) {
- Utils.exec("hyprctl dispatch fullscreen 1");
- }
-};
diff --git a/.config/ags/lib/cursorhover.js b/.config/ags/lib/cursorhover.js
deleted file mode 100644
index d93d021..0000000
--- a/.config/ags/lib/cursorhover.js
+++ /dev/null
@@ -1,86 +0,0 @@
-const { Gdk, Gtk } = imports.gi;
-
-const CLICK_BRIGHTEN_AMOUNT = 0.13;
-
-export function setupCursorHover(button) {
- const display = Gdk.Display.get_default();
- button.connect('enter-notify-event', () => {
- const cursor = Gdk.Cursor.new_from_name(display, 'pointer');
- button.get_window().set_cursor(cursor);
- });
-
- button.connect('leave-notify-event', () => {
- const cursor = Gdk.Cursor.new_from_name(display, 'default');
- button.get_window().set_cursor(cursor);
- });
-
-}
-
-export function setupCursorHoverAim(button) {
- button.connect('enter-notify-event', () => {
- const display = Gdk.Display.get_default();
- const cursor = Gdk.Cursor.new_from_name(display, 'crosshair');
- button.get_window().set_cursor(cursor);
- });
-
- button.connect('leave-notify-event', () => {
- const display = Gdk.Display.get_default();
- const cursor = Gdk.Cursor.new_from_name(display, 'default');
- button.get_window().set_cursor(cursor);
- });
-}
-
-export function setupCursorHoverGrab(button) {
- button.connect('enter-notify-event', () => {
- const display = Gdk.Display.get_default();
- const cursor = Gdk.Cursor.new_from_name(display, 'grab');
- button.get_window().set_cursor(cursor);
- });
-
- button.connect('leave-notify-event', () => {
- const display = Gdk.Display.get_default();
- const cursor = Gdk.Cursor.new_from_name(display, 'default');
- button.get_window().set_cursor(cursor);
- });
-}
-
-// failed radial ripple experiment
-//
-// var clicked = false;
-// var dummy = false;
-// var cursorX = 0;
-// var cursorY = 0;
-// const styleContext = button.get_style_context();
-// var clickColor = styleContext.get_property('background-color', Gtk.StateFlags.HOVER);
-// clickColor.green += CLICK_BRIGHTEN_AMOUNT;
-// clickColor.blue += CLICK_BRIGHTEN_AMOUNT;
-// clickColor.red += CLICK_BRIGHTEN_AMOUNT;
-// clickColor = clickColor.to_string();
-// button.add_events(Gdk.EventMask.POINTER_MOTION_MASK);
-// button.connect('motion-notify-event', (widget, event) => {
-// [dummy, cursorX, cursorY] = event.get_coords(); // Get the mouse coordinates relative to the widget
-// if(!clicked) widget.css = `
-// background-image: radial-gradient(circle at ${cursorX}px ${cursorY}px, rgba(0,0,0,0), rgba(0,0,0,0) 0%, rgba(0,0,0,0) 0%, ${clickColor} 0%, ${clickColor} 0%, ${clickColor} 0%, ${clickColor} 0%, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 0%);
-// `;
-// });
-
-// button.connect('button-press-event', (widget, event) => {
-// clicked = true;
-// [dummy, cursorX, cursorY] = event.get_coords(); // Get the mouse coordinates relative to the widget
-// cursorX = Math.round(cursorX); cursorY = Math.round(cursorY);
-// widget.css = `
-// background-image: radial-gradient(circle at ${cursorX}px ${cursorY}px, rgba(0,0,0,0), rgba(0,0,0,0) 0%, rgba(0,0,0,0) 0%, ${clickColor} 0%, ${clickColor} 0%, ${clickColor} 0%, ${clickColor} 0%, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 0%);
-// `;
-// widget.toggleClassName('growingRadial', true);
-// widget.css = `
-// background-image: radial-gradient(circle at ${cursorX}px ${cursorY}px, rgba(0,0,0,0), rgba(0,0,0,0) 0%, rgba(0,0,0,0) 0%, ${clickColor} 0%, ${clickColor} 0%, ${clickColor} 70%, ${clickColor} 70%, rgba(0,0,0,0) 70%, rgba(0,0,0,0) 70%);
-// `
-// });
-// button.connect('button-release-event', (widget, event) => {
-// widget.toggleClassName('growingRadial', false);
-// widget.toggleClassName('fadingRadial', false);
-// widget.css = `
-// background-image: radial-gradient(circle at ${cursorX}px ${cursorY}px, rgba(0,0,0,0), rgba(0,0,0,0) 0%, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 70%, rgba(0,0,0,0) 70%, rgba(0,0,0,0) 70%, rgba(0,0,0,0) 70%);
-// `
-// clicked = false;
-// });
diff --git a/.config/ags/lib/gtk.ts b/.config/ags/lib/gtk.ts
deleted file mode 100644
index 8cd60a3..0000000
--- a/.config/ags/lib/gtk.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import Gio from "gi://Gio"
-import options from "options"
-
-const settings = new Gio.Settings({
- schema: "org.gnome.desktop.interface",
-})
-
-function gtk() {
- const scheme = options.theme.scheme.value
- settings.set_string("color-scheme", `prefer-${scheme}`)
-}
-
-export default function init() {
- options.theme.scheme.connect("changed", gtk)
- gtk()
-}
diff --git a/.config/ags/lib/hyprland.ts b/.config/ags/lib/hyprland.ts
deleted file mode 100644
index 7f6a68c..0000000
--- a/.config/ags/lib/hyprland.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-import options from "options"
-const { messageAsync } = await Service.import("hyprland")
-
-const {
- hyprland,
- theme: {
- spacing,
- radius,
- border: { width },
- blur,
- shadows,
- dark: {
- primary: { bg: darkActive },
- },
- light: {
- primary: { bg: lightActive },
- },
- scheme,
- },
-} = options
-
-const deps = [
- "hyprland",
- spacing.id,
- radius.id,
- blur.id,
- width.id,
- shadows.id,
- darkActive.id,
- lightActive.id,
- scheme.id,
-]
-
-function activeBorder() {
- const color = scheme.value === "dark"
- ? darkActive.value
- : lightActive.value
-
- return color.replace("#", "")
-}
-
-function sendBatch(batch: string[]) {
- const cmd = batch
- .filter(x => !!x)
- .map(x => `keyword ${x}`)
- .join("; ")
-
- return messageAsync(`[[BATCH]]/${cmd}`)
-}
-
-async function setupHyprland() {
- const wm_gaps = Math.floor(hyprland.gaps.value * spacing.value)
-
- //sendBatch([
- // `general:border_size ${width}`,
- // `general:gaps_out ${wm_gaps}`,
- // `general:gaps_in ${Math.floor(wm_gaps / 2)}`,
- // `general:col.active_border rgba(${activeBorder()}ff)`,
- // `general:col.inactive_border rgba(${hyprland.inactiveBorder.value})`,
- // `decoration:rounding ${radius}`,
- // `decoration:drop_shadow ${shadows.value ? "yes" : "no"}`,
- // `dwindle:no_gaps_when_only ${hyprland.gapsWhenOnly.value ? 0 : 1}`,
- // `master:no_gaps_when_only ${hyprland.gapsWhenOnly.value ? 0 : 1}`,
- //])
-
- //await sendBatch(App.windows.map(({ name }) => `layerrule unset, ${name}`))
-
- if (blur.value > 0) {
- sendBatch(App.windows.flatMap(({ name }) => [
- `layerrule unset, ${name}`,
- `layerrule blur, ${name}`,
- `layerrule ignorealpha ${/* based on shadow color */.29}, ${name}`,
- ]))
- }
-}
-
-export default function init() {
- options.handler(deps, setupHyprland)
- setupHyprland()
-}
diff --git a/.config/ags/lib/iconUtils.js b/.config/ags/lib/iconUtils.js
deleted file mode 100644
index baba660..0000000
--- a/.config/ags/lib/iconUtils.js
+++ /dev/null
@@ -1,46 +0,0 @@
-const { Gio, Gdk, Gtk } = imports.gi;
-
-function fileExists(filePath) {
- let file = Gio.File.new_for_path(filePath);
- return file.query_exists(null);
-}
-
-function cartesianProduct(arrays) {
- if (arrays.length === 0) {
- return [[]];
- }
-
- const [head, ...tail] = arrays;
- const tailCartesian = cartesianProduct(tail);
- const result = [];
-
- for (const item of head) {
- for (const tailItem of tailCartesian) {
- result.push([item, ...tailItem]);
- }
- }
- return result;
-}
-import { HOME } from '../utils.ts';
-export const find_icon = app_class => {
- const themPath = [
- [`${HOME}/.local/share/icons/WhiteSur/`, `${HOME}/.local/share//icons/WhiteSur-dark/`],
- ['512x512/', '128x128/', '64x64/', '96x96/', '72x72/', '48x48/', '36x36/'],
- ['apps/', ''],
- [app_class + '.png', app_class + '.svg', app_class + '.xpm'],
- ];
-
- let real_path = '';
- const all_icon_dir = cartesianProduct(themPath);
-
- for (let index = 0; index < all_icon_dir.length; index++) {
- const pathItem = all_icon_dir[index];
- const icon_path = pathItem.join('');
- if (fileExists(icon_path)) {
- real_path = icon_path;
- break;
- }
- }
-
- return real_path;
-};
diff --git a/.config/ags/lib/icons.ts b/.config/ags/lib/icons.ts
deleted file mode 100644
index dfc9e18..0000000
--- a/.config/ags/lib/icons.ts
+++ /dev/null
@@ -1,186 +0,0 @@
-export const substitutes = {
- "transmission-gtk": "transmission",
- "blueberry.py": "blueberry",
- "Caprine": "facebook-messenger",
- "phototonic": "terminal-symbolic",
- "com.raggesilver.BlackBox-symbolic": "terminal-symbolic",
- "org.wezfurlong.wezterm-symbolic": "terminal-symbolic",
- "audio-headset-bluetooth": "audio-headphones-symbolic",
- "audio-card-analog-usb": "audio-speakers-symbolic",
- "audio-card-analog-pci": "audio-volume-medium-symbolic",
- "preferences-system": "emblem-system-symbolic",
- "com.github.Aylur.ags-symbolic": "controls-symbolic",
- "com.github.Aylur.ags": "controls-symbolic",
-}
-
-export default {
- missing: "image-missing-symbolic",
- nix: {
- nix: "nix-snowflake-symbolic",
- },
- app: {
- terminal: "terminal-symbolic",
- },
- fallback: {
- executable: "application-x-executable",
- notification: "dialog-information-symbolic",
- video: "video-x-generic-symbolic",
- // audio: "audio-x-generic-symbolic",
- audio: "audio-volume-medium-symbolic",
- },
- ui: {
- close: "window-close-symbolic",
- colorpicker: "color-select-symbolic",
- info: "info-symbolic",
- link: "external-link-symbolic",
- lock: "system-lock-screen-symbolic",
- menu: "open-menu-symbolic",
- refresh: "view-refresh-symbolic",
- search: "system-search-symbolic",
- settings: "emblem-system-symbolic",
- themes: "preferences-desktop-theme-symbolic",
- tick: "object-select-symbolic",
- time: "hourglass-symbolic",
- toolbars: "toolbars-symbolic",
- warning: "dialog-warning-symbolic",
- avatar: "avatar-default-symbolic",
- arrow: {
- right: "pan-end-symbolic",
- left: "pan-start-symbolic",
- down: "pan-down-symbolic",
- up: "pan-up-symbolic",
- },
- },
- audio: {
- mic: {
- muted: "microphone-disabled-symbolic",
- low: "microphone-sensitivity-low-symbolic",
- medium: "microphone-sensitivity-medium-symbolic",
- high: "microphone-sensitivity-high-symbolic",
- },
- volume: {
- muted: "audio-volume-muted-symbolic",
- low: "audio-volume-low-symbolic",
- medium: "audio-volume-medium-symbolic",
- high: "audio-volume-high-symbolic",
- overamplified: "audio-volume-medium-symbolic",
- },
- type: {
- headset: "audio-headphones-symbolic",
- speaker: "audio-speakers-symbolic",
- card: "audio-card-symbolic",
- },
- mixer: "mixer-symbolic",
- },
- powerprofile: {
- balanced: "power-profile-balanced-symbolic",
- "power-saver": "power-profile-power-saver-symbolic",
- performance: "power-profile-performance-symbolic",
- },
- asusctl: {
- profile: {
- Balanced: "power-profile-balanced-symbolic",
- Quiet: "power-profile-power-saver-symbolic",
- Performance: "power-profile-performance-symbolic",
- },
- mode: {
- Integrated: "processor-symbolic",
- Hybrid: "controller-symbolic",
- },
- },
- battery: {
- charging: "battery-flash-symbolic",
- warning: "battery-empty-symbolic",
- },
- bluetooth: {
- enabled: "bluetooth-active-symbolic",
- disabled: "bluetooth-disabled-symbolic",
- },
- brightness: {
- indicator: "display-brightness-symbolic",
- keyboard: "keyboard-brightness-symbolic",
- screen: "display-brightness-symbolic",
- },
- powermenu: {
- sleep: "weather-clear-night-symbolic",
- reboot: "system-reboot-symbolic",
- logout: "system-log-out-symbolic",
- shutdown: "system-shutdown-symbolic",
- },
- recorder: {
- recording: "media-record-symbolic",
- },
- notifications: {
- noisy: "org.gnome.Settings-notifications-symbolic",
- silent: "notifications-disabled-symbolic",
- message: "chat-bubbles-symbolic",
- },
- trash: {
- full: "user-trash-full-symbolic",
- empty: "user-trash-symbolic",
- },
- mpris: {
- shuffle: {
- enabled: "media-playlist-shuffle-symbolic",
- disabled: "media-playlist-consecutive-symbolic",
- },
- loop: {
- none: "media-playlist-repeat-symbolic",
- track: "media-playlist-repeat-song-symbolic",
- playlist: "media-playlist-repeat-symbolic",
- },
- playing: "media-playback-pause-symbolic",
- paused: "media-playback-start-symbolic",
- stopped: "media-playback-start-symbolic",
- prev: "media-skip-backward-symbolic",
- next: "media-skip-forward-symbolic",
- },
- system: {
- cpu: "org.gnome.SystemMonitor-symbolic",
- ram: "drive-harddisk-solidstate-symbolic",
- temp: "temperature-symbolic",
- },
- color: {
- dark: "dark-mode-symbolic",
- light: "light-mode-symbolic",
- },
- ui: {
- arch: "archlinux-logo",
- close: "window-close",
- colorpicker: "color-select",
- info: "info",
- link: "external-link",
- lock: "system-lock-screen",
- menu: "open-menu",
- refresh: "view-refresh",
- search: "system-search",
- settings: "emblem-system",
- themes: "preferences-desktop-theme",
- tick: "object-select",
- time: "hourglass",
- toolbars: "toolbars-symbolic",
- warning: "dialog-warning",
- avatar: "avatar-default",
- tbox_osk: "osk",
- tbox_appkill: "bomb-kill",
- tbox_close: "tbox-close",
- tbox_rotate: "rotation",
- tbox_moveup: "arrows-up",
- tbox_movedown: "arrows-down",
- tbox_moveleft: "arrows-left",
- tbox_moveright: "arrows-right",
- tbox_workspacenext: "wp-next",
- tbox_workspaceprev: "wp-prev",
- tbox_fullscreen: "fullscreen",
- tbox_swapnext: "swapnext",
- tbox_float: "float",
- tbox_pinned: "pinned",
- tbox_split: "togglesplit",
- arrow: {
- right: "pan-end",
- left: "pan-start",
- down: "pan-down",
- up: "pan-up",
- },
- },
-}
diff --git a/.config/ags/lib/init.ts b/.config/ags/lib/init.ts
deleted file mode 100644
index e9e396c..0000000
--- a/.config/ags/lib/init.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import matugen from './matugen';
-import hyprland from './hyprland';
-import tmux from './tmux';
-import gtk from './gtk';
-import lowBattery from './battery';
-import notifications from './notifications';
-
-export default function init() {
- try {
- gtk();
- tmux();
- matugen();
- lowBattery();
- notifications();
- hyprland();
- } catch (error) {
- logError(error);
- }
-}
diff --git a/.config/ags/lib/matugen.ts b/.config/ags/lib/matugen.ts
deleted file mode 100644
index dfccccf..0000000
--- a/.config/ags/lib/matugen.ts
+++ /dev/null
@@ -1,113 +0,0 @@
-import wallpaper from "service/wallpaper"
-import options from "options"
-import { sh, dependencies } from "./utils"
-
-export default function init() {
- wallpaper.connect("changed", () => matugen())
- options.autotheme.connect("changed", () => matugen())
-}
-
-function animate(...setters: Array<() => void>) {
- const delay = options.transition.value / 2
- setters.forEach((fn, i) => Utils.timeout(delay * i, fn))
-}
-
-export async function matugen(
- type: "image" | "color" = "image",
- arg = wallpaper.wallpaper,
-) {
- if (!options.autotheme.value || !dependencies("matugen"))
- return
-
- const colors = await sh(`matugen --dry-run -j hex ${type} ${arg}`)
- const c = JSON.parse(colors).colors as { light: Colors, dark: Colors }
- const { dark, light } = options.theme
-
- animate(
- () => {
- dark.widget.value = c.dark.on_surface
- light.widget.value = c.light.on_surface
- },
- () => {
- dark.border.value = c.dark.outline
- light.border.value = c.light.outline
- },
- () => {
- dark.bg.value = c.dark.surface
- light.bg.value = c.light.surface
- },
- () => {
- dark.fg.value = c.dark.on_surface
- light.fg.value = c.light.on_surface
- },
- () => {
- dark.primary.bg.value = c.dark.primary
- light.primary.bg.value = c.light.primary
- options.bar.battery.charging.value = options.theme.scheme.value === "dark"
- ? c.dark.primary : c.light.primary
- },
- () => {
- dark.primary.fg.value = c.dark.on_primary
- light.primary.fg.value = c.light.on_primary
- },
- () => {
- dark.error.bg.value = c.dark.error
- light.error.bg.value = c.light.error
- },
- () => {
- dark.error.fg.value = c.dark.on_error
- light.error.fg.value = c.light.on_error
- },
- )
-}
-
-type Colors = {
- background: string
- error: string
- error_container: string
- inverse_on_surface: string
- inverse_primary: string
- inverse_surface: string
- on_background: string
- on_error: string
- on_error_container: string
- on_primary: string
- on_primary_container: string
- on_primary_fixed: string
- on_primary_fixed_variant: string
- on_secondary: string
- on_secondary_container: string
- on_secondary_fixed: string
- on_secondary_fixed_variant: string
- on_surface: string
- on_surface_variant: string
- on_tertiary: string
- on_tertiary_container: string
- on_tertiary_fixed: string
- on_tertiary_fixed_variant: string
- outline: string
- outline_variant: string
- primary: string
- primary_container: string
- primary_fixed: string
- primary_fixed_dim: string
- scrim: string
- secondary: string
- secondary_container: string
- secondary_fixed: string
- secondary_fixed_dim: string
- shadow: string
- surface: string
- surface_bright: string
- surface_container: string
- surface_container_high: string
- surface_container_highest: string
- surface_container_low: string
- surface_container_lowest: string
- surface_dim: string
- surface_variant: string
- tertiary: string
- tertiary_container: string
- tertiary_fixed: string
- tertiary_fixed_dim: string
-}
diff --git a/.config/ags/lib/notifications.ts b/.config/ags/lib/notifications.ts
deleted file mode 100644
index 0000831..0000000
--- a/.config/ags/lib/notifications.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import options from "options"
-const notifs = await Service.import("notifications")
-
-// TODO: consider adding this to upstream
-
-const { blacklist } = options.notifications
-
-export default function init() {
- const notify = notifs.constructor.prototype.Notify.bind(notifs)
- notifs.constructor.prototype.Notify = function(appName: string, ...rest: unknown[]) {
- if (blacklist.value.includes(appName))
- return Number.MAX_SAFE_INTEGER
-
- return notify(appName, ...rest)
- }
-}
diff --git a/.config/ags/lib/option.ts b/.config/ags/lib/option.ts
deleted file mode 100644
index 2d73978..0000000
--- a/.config/ags/lib/option.ts
+++ /dev/null
@@ -1,115 +0,0 @@
-import { Variable } from "resource:///com/github/Aylur/ags/variable.js"
-
-type OptProps = {
- persistent?: boolean
-}
-
-export class Opt<T = unknown> extends Variable<T> {
- static { Service.register(this) }
-
- constructor(initial: T, { persistent = false }: OptProps = {}) {
- super(initial)
- this.initial = initial
- this.persistent = persistent
- }
-
- initial: T
- id = ""
- persistent: boolean
- toString() { return `${this.value}` }
- toJSON() { return `opt:${this.value}` }
-
- getValue = (): T => {
- return super.getValue()
- }
-
- init(cacheFile: string) {
- const cacheV = JSON.parse(Utils.readFile(cacheFile) || "{}")[this.id]
- if (cacheV !== undefined)
- this.value = cacheV
-
- this.connect("changed", () => {
- const cache = JSON.parse(Utils.readFile(cacheFile) || "{}")
- cache[this.id] = this.value
- Utils.writeFileSync(JSON.stringify(cache, null, 2), cacheFile)
- })
- }
-
- reset() {
- if (this.persistent)
- return
-
- if (JSON.stringify(this.value) !== JSON.stringify(this.initial)) {
- this.value = this.initial
- return this.id
- }
- }
-}
-
-export const opt = <T>(initial: T, opts?: OptProps) => new Opt(initial, opts)
-
-function getOptions(object: object, path = ""): Opt[] {
- return Object.keys(object).flatMap(key => {
- const obj: Opt = object[key]
- const id = path ? path + "." + key : key
-
- if (obj instanceof Variable) {
- obj.id = id
- return obj
- }
-
- if (typeof obj === "object")
- return getOptions(obj, id)
-
- return []
- })
-}
-
-export function mkOptions<T extends object>(cacheFile: string, object: T) {
- for (const opt of getOptions(object))
- opt.init(cacheFile)
-
- Utils.ensureDirectory(cacheFile.split("/").slice(0, -1).join("/"))
-
- const configFile = `${TMP}/config.json`
- const values = getOptions(object).reduce((obj, { id, value }) => ({ [id]: value, ...obj }), {})
- Utils.writeFileSync(JSON.stringify(values, null, 2), configFile)
- Utils.monitorFile(configFile, () => {
- const cache = JSON.parse(Utils.readFile(configFile) || "{}")
- for (const opt of getOptions(object)) {
- if (JSON.stringify(cache[opt.id]) !== JSON.stringify(opt.value))
- opt.value = cache[opt.id]
- }
- })
-
- function sleep(ms = 0) {
- return new Promise(r => setTimeout(r, ms))
- }
-
- async function reset(
- [opt, ...list] = getOptions(object),
- id = opt?.reset(),
- ): Promise<Array<string>> {
- if (!opt)
- return sleep().then(() => [])
-
- return id
- ? [id, ...(await sleep(50).then(() => reset(list)))]
- : await sleep().then(() => reset(list))
- }
-
- return Object.assign(object, {
- configFile,
- array: () => getOptions(object),
- async reset() {
- return (await reset()).join("\n")
- },
- handler(deps: string[], callback: () => void) {
- for (const opt of getOptions(object)) {
- if (deps.some(i => opt.id.startsWith(i)))
- opt.connect("changed", callback)
- }
- },
- })
-}
-
diff --git a/.config/ags/lib/session.ts b/.config/ags/lib/session.ts
deleted file mode 100644
index 0e3e0cf..0000000
--- a/.config/ags/lib/session.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import GLib from "gi://GLib?version=2.0"
-
-declare global {
- const OPTIONS: string
- const TMP: string
- const USER: string
-}
-
-Object.assign(globalThis, {
- OPTIONS: `${GLib.get_user_cache_dir()}/ags/options.json`,
- TMP: `${GLib.get_tmp_dir()}/asztal`,
- USER: GLib.get_user_name(),
-})
-
-Utils.ensureDirectory(TMP)
-App.addIcons(`${App.configDir}/assets`)
diff --git a/.config/ags/lib/tmux.ts b/.config/ags/lib/tmux.ts
deleted file mode 100644
index 1372eb2..0000000
--- a/.config/ags/lib/tmux.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import options from "options"
-import { sh } from "./utils"
-
-export async function tmux() {
- const { scheme, dark, light } = options.theme
- const hex = scheme.value === "dark" ? dark.primary.bg.value : light.primary.bg.value
- if (await sh("which tmux"))
- sh(`tmux set @main_accent "${hex}"`)
-}
-
-export default function init() {
- options.theme.dark.primary.bg.connect("changed", tmux)
- options.theme.light.primary.bg.connect("changed", tmux)
-}
diff --git a/.config/ags/lib/utils.ts b/.config/ags/lib/utils.ts
deleted file mode 100644
index f3ff2e3..0000000
--- a/.config/ags/lib/utils.ts
+++ /dev/null
@@ -1,113 +0,0 @@
-/* eslint-disable @typescript-eslint/no-explicit-any */
-import { type Application } from "types/service/applications"
-import icons, { substitutes } from "./icons"
-import Gtk from "gi://Gtk?version=3.0"
-import Gdk from "gi://Gdk"
-import GLib from "gi://GLib?version=2.0"
-
-export const HOME = GLib.get_home_dir();
-
-export type Binding<T> = import("types/service").Binding<any, any, T>
-
-/**
- * @returns substitute icon || name || fallback icon
- */
-export function icon(name: string | null, fallback = icons.missing) {
- if (!name)
- return fallback || ""
-
- if (GLib.file_test(name, GLib.FileTest.EXISTS))
- return name
-
- const icon = (substitutes[name] || name)
- if (Utils.lookUpIcon(icon))
- return icon
-
- print(`no icon substitute "${icon}" for "${name}", fallback: "${fallback}"`)
- return fallback
-}
-
-/**
- * @returns execAsync(["bash", "-c", cmd])
- */
-export async function bash(strings: TemplateStringsArray | string, ...values: unknown[]) {
- const cmd = typeof strings === "string" ? strings : strings
- .flatMap((str, i) => str + `${values[i] ?? ""}`)
- .join("")
-
- return Utils.execAsync(["bash", "-c", cmd]).catch(err => {
- console.error(cmd, err)
- return ""
- })
-}
-
-/**
- * @returns execAsync(cmd)
- */
-export async function sh(cmd: string | string[]) {
- return Utils.execAsync(cmd).catch(err => {
- console.error(typeof cmd === "string" ? cmd : cmd.join(" "), err)
- return ""
- })
-}
-
-export function forMonitors(widget: (monitor: number) => Gtk.Window) {
- const n = Gdk.Display.get_default()?.get_n_monitors() || 1
- return range(n, 0).map(widget).flat(1)
-}
-
-/**
- * @returns [start...length]
- */
-export function range(length: number, start = 1) {
- return Array.from({ length }, (_, i) => i + start)
-}
-
-/**
- * @returns true if all of the `bins` are found
- */
-export function dependencies(...bins: string[]) {
- const missing = bins.filter(bin => {
- return !Utils.exec(`which ${bin}`)
- })
-
- if (missing.length > 0) {
- console.warn("missing dependencies:", missing.join(", "))
- Utils.notify(`missing dependencies: ${missing.join(", ")}`)
- }
-
- return missing.length === 0
-}
-
-/**
- * run app detached
- */
-export function launchApp(app: Application) {
- const exe = app.executable
- .split(/\s+/)
- .filter(str => !str.startsWith("%") && !str.startsWith("@"))
- .join(" ")
-
- bash(`${exe} &`)
- app.frequency += 1
-}
-
-/**
- * to use with drag and drop
- */
-export function createSurfaceFromWidget(widget: Gtk.Widget) {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- const cairo = imports.gi.cairo as any
- const alloc = widget.get_allocation()
- const surface = new cairo.ImageSurface(
- cairo.Format.ARGB32,
- alloc.width,
- alloc.height,
- )
- const cr = new cairo.Context(surface)
- cr.setSourceRGBA(255, 255, 255, 0)
- cr.rectangle(0, 0, alloc.width, alloc.height)
- cr.fill()
- widget.draw(cr)
- return surface
-}
diff --git a/.config/ags/lib/variables.ts b/.config/ags/lib/variables.ts
deleted file mode 100644
index 78d8793..0000000
--- a/.config/ags/lib/variables.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import GLib from "gi://GLib"
-// import options from "options"
-//
-// const intval = options.system.fetchInterval.value
-// const tempPath = options.system.temperature.value
-
-export const clock = Variable(GLib.DateTime.new_now_local(), {
- poll: [1000, () => GLib.DateTime.new_now_local()],
-})
-
-export const uptime = Variable(0, {
- poll: [60_000, "cat /proc/uptime", line =>
- Number.parseInt(line.split(".")[0]) / 60,
- ],
-})
-
-
-export const user = {
- name: GLib.get_user_name()
-}
-
-export const distro = {
- id: GLib.get_os_info("ID"),
- logo: GLib.get_os_info("LOGO"),
-}
-
-// const divide = ([total, free]: string[]) => Number.parseInt(free) / Number.parseInt(total)
-//
-// export const cpu = Variable(0, {
-// poll: [intval, "top -b -n 1", out => divide(["100", out.split("\n")
-// .find(line => line.includes("Cpu(s)"))
-// ?.split(/\s+/)[1]
-// .replace(",", ".") || "0"])],
-// })
-//
-// export const ram = Variable(0, {
-// poll: [intval, "free", out => divide(out.split("\n")
-// .find(line => line.includes("Mem:"))
-// ?.split(/\s+/)
-// .splice(1, 2) || ["1", "1"])],
-// })
-//
-// export const temperature = Variable(0, {
-// poll: [intval, `cat ${tempPath}`, n => {
-// return Number.parseInt(n) / 100_000
-// }],
-// })
diff --git a/.config/ags/main.ts b/.config/ags/main.ts
deleted file mode 100644
index fa18846..0000000
--- a/.config/ags/main.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import "lib/session"
-import "style/style"
-import init from "lib/init"
-import options from "options"
-import Bar from "widget/bar/Bar"
-import Launcher from "widget/launcher/Launcher"
-import NotificationPopups from "widget/notifications/NotificationPopups"
-import OSD from "widget/osd/OSD"
-import Overview from "widget/overview/Overview"
-import PowerMenu from "widget/powermenu/PowerMenu"
-import ScreenCorners from "widget/bar/ScreenCorners"
-import SettingsDialog from "widget/settings/SettingsDialog"
-import Verification from "widget/powermenu/Verification"
-import { forMonitors } from "lib/utils"
-import { setupQuickSettings } from "widget/quicksettings/QuickSettings"
-import { setupDateMenu } from "widget/datemenu/DateMenu"
-//import Dock from "widget/dock/Dock";
-import FloatingDock from "widget/dock/FloatingDock"
-import ToolBoxDock from "widget/dock/ToolBoxDock"
-
-App.config({
- onConfigParsed: () => {
- setupQuickSettings()
- setupDateMenu()
- init()
- },
- closeWindowDelay: {
- "launcher": options.transition.value,
- "overview": options.transition.value,
- "quicksettings": options.transition.value,
- "datemenu": options.transition.value,
- },
- windows: () => [
- ...forMonitors(Bar),
- //...forMonitors(Dock),
- ...forMonitors(FloatingDock),
- //...forMonitors(ToolBoxDock),
- ...forMonitors(NotificationPopups),
- ...forMonitors(ScreenCorners),
- ...forMonitors(OSD),
- Launcher(),
- Overview(),
- PowerMenu(),
- SettingsDialog(),
- Verification(),
- ],
-})
diff --git a/.config/ags/options.ts b/.config/ags/options.ts
deleted file mode 100644
index 4cf5a53..0000000
--- a/.config/ags/options.ts
+++ /dev/null
@@ -1,261 +0,0 @@
-import { opt, mkOptions } from 'lib/option';
-import { distro } from 'lib/variables';
-import { icon } from 'lib/utils';
-import { icons } from 'assets';
-import icons from 'lib/icons';
-//import Dock from "./widgets/dock/index.js";
-
-const options = mkOptions(OPTIONS, {
- autotheme: opt(false),
-
- wallpaper: {
- enable: opt(false),
- resolution: opt<import('service/wallpaper').Resolution>(1920),
- market: opt<import('service/wallpaper').Market>('random'),
- },
-
- theme: {
- dark: {
- primary: {
- bg: opt('#51a4e7'),
- fg: opt('#141414'),
- },
- error: {
- bg: opt('#e55f86'),
- fg: opt('#141414'),
- },
- bg: opt('#171717'),
- fg: opt('#eeeeee'),
- widget: opt('#eeeeee'),
- border: opt('#eeeeee'),
- },
- light: {
- primary: {
- bg: opt('#426ede'),
- fg: opt('#eeeeee'),
- },
- error: {
- bg: opt('#b13558'),
- fg: opt('#eeeeee'),
- },
- bg: opt('#fffffa'),
- fg: opt('#080808'),
- widget: opt('#080808'),
- border: opt('#080808'),
- },
-
- blur: opt(0),
- scheme: opt<'dark' | 'light'>('dark'),
- widget: { opacity: opt(94) },
- border: {
- width: opt(1),
- opacity: opt(100),
- },
-
- shadows: opt(true),
- padding: opt(7),
- spacing: opt(12),
- radius: opt(11),
- },
-
- transition: opt(200),
-
- font: {
- size: opt(13),
- name: opt('Ubuntu Nerd Font'),
- },
- bar: {
- flatButtons: opt(true),
- position: opt<'top' | 'bottom'>('top'),
- corners: opt(false),
- layout: {
- start: opt<Array<import('widget/bar/Bar').BarWidget>>([
- 'launcher',
- 'workspaces',
- //"taskbar",
- 'expander',
- 'messages',
- ]),
- center: opt<Array<import('widget/bar/Bar').BarWidget>>(['date']),
- end: opt<Array<import('widget/bar/Bar').BarWidget>>([
- 'media',
- 'expander',
- //"colorpicker",
- 'screenrecord',
- 'battery',
- 'systray',
- 'system',
- 'powermenu',
- ]),
- },
- launcher: {
- icon: {
- colored: opt(true),
- icon: opt(icon(distro.logo, icons.ui.search)),
- },
- label: {
- colored: opt(false),
- label: opt(''),
- //label: opt(" Applications"),
- },
- action: opt(() => App.toggleWindow('launcher')),
- },
- date: {
- format: opt('%a %d %b %Y %H:%M:%S'),
- action: opt(() => App.toggleWindow('datemenu')),
- },
- battery: {
- bar: opt<'hidden' | 'regular' | 'whole'>('regular'),
- charging: opt('#00D787'),
- percentage: opt(true),
- blocks: opt(7),
- width: opt(50),
- low: opt(30),
- },
- workspaces: {
- workspaces: opt(6),
- },
- taskbar: {
- iconSize: opt(0),
- monochrome: opt(false),
- exclusive: opt(false),
- },
- messages: {
- action: opt(() => App.toggleWindow('datemenu')),
- },
- systray: {
- ignore: opt([
- 'KDE Connect Indicator',
- //"spotify-client",
- ]),
- },
- media: {
- monochrome: opt(false),
- preferred: opt('spotify'),
- direction: opt<'left' | 'right'>('right'),
- format: opt('{artists} - {title}'),
- length: opt(40),
- },
- powermenu: {
- monochrome: opt(false),
- action: opt(() => App.toggleWindow('powermenu')),
- },
- },
-
- dock: {
- iconSize: opt(44),
- pinnedApps: opt([
- 'nemo',
- 'firefox',
- 'mullvad',
- 'qbittorrent',
- 'com.obsproject.Studio',
- 'vlc',
- 'spotify',
- //"viewnior",
- //"phototonic",
- 'gthumb',
- 'nomachine',
- 'lutris',
- 'steam',
- 'discord',
- 'vscode',
- 'wezterm',
- 'obsidian',
- ]),
- toolbox: {
- icons: [opt(icon(icons.ui.tbox_close)), opt(icon(icons.ui.tbox_appkill)), opt(icon(icons.ui.tbox_rotate)), opt(icon(icons.ui.tbox_workspaceprev)), opt(icon(icons.ui.tbox_workspacenext)), opt(icon(icons.ui.tbox_moveleft)), opt(icon(icons.ui.tbox_moveright)), opt(icon(icons.ui.tbox_moveup)), opt(icon(icons.ui.tbox_movedown)), opt(icon(icons.ui.tbox_swapnext)), opt(icon(icons.ui.tbox_split)), opt(icon(icons.ui.tbox_float)), opt(icon(icons.ui.tbox_pinned)), opt(icon(icons.ui.tbox_fullscreen)), opt(icon(icons.ui.tbox_osk))],
- },
- },
- launcher: {
- width: opt(0),
- margin: opt(80),
- nix: {
- pkgs: opt('nixpkgs/nixos-unstable'),
- max: opt(8),
- },
- sh: {
- max: opt(16),
- },
- apps: {
- iconSize: opt(62),
- max: opt(6),
- favorites: opt([['firefox', 'nemo', 'obsidian', 'discord', 'spotify']]),
- },
- },
-
- overview: {
- scale: opt(9),
- workspaces: opt(6),
- monochromeIcon: opt(false),
- },
-
- powermenu: {
- //sleep: opt('systemctl suspend'),
- sleep: opt('loginctl suspend'),
- //reboot: opt('reboot'),
- reboot: opt('loginctl reboot'),
- logout: opt('pkill Hyprland'),
- //shutdown: opt('shutdown now'),
- shutdown: opt('loginctl poweroff'),
- layout: opt<'line' | 'box'>('line'),
- labels: opt(true),
- },
-
- quicksettings: {
- avatar: {
- image: opt(`/var/lib/AccountsService/icons/${Utils.USER}`),
- size: opt(40),
- },
- width: opt(380),
- position: opt<'left' | 'center' | 'right'>('right'),
- networkSettings: opt('gtk-launch nm-connection-editor'),
- //networkSettings: opt('gtk-launch gnome-control-center'),
- media: {
- monochromeIcon: opt(true),
- coverSize: opt(100),
- },
- },
-
- datemenu: {
- position: opt<'left' | 'center' | 'right'>('center'),
- weather: {
- interval: opt(60_000),
- unit: opt<'metric' | 'imperial' | 'standard'>('metric'),
- key: opt<string>(JSON.parse(Utils.readFile(`${App.configDir}/.weather`) || '{}')?.key || ''),
- cities: opt<Array<number>>(JSON.parse(Utils.readFile(`${App.configDir}/.weather`) || '{}')?.cities || []),
- },
- },
-
- osd: {
- progress: {
- vertical: opt(true),
- pack: {
- h: opt<'start' | 'center' | 'end'>('end'),
- v: opt<'start' | 'center' | 'end'>('center'),
- },
- },
- microphone: {
- pack: {
- h: opt<'start' | 'center' | 'end'>('center'),
- v: opt<'start' | 'center' | 'end'>('end'),
- },
- },
- },
-
- notifications: {
- position: opt<Array<'top' | 'bottom' | 'left' | 'right'>>(['top', 'right']),
- blacklist: opt(['']),
- //blacklist: opt(["Spotify"]),
- width: opt(440),
- },
-
- hyprland: {
- gaps: opt(2.4),
- inactiveBorder: opt('333333ff'),
- gapsWhenOnly: opt(false),
- },
-});
-
-globalThis['options'] = options;
-export default options;
diff --git a/.config/ags/package.json b/.config/ags/package.json
deleted file mode 100644
index e0586f7..0000000
--- a/.config/ags/package.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "name": "ags",
- "author": "srdusr",
- "repository": {
- "type": "git",
- "url": "git+https://github.com/srdusr/dotfiles.git"
- },
- "devDependencies": {
- "@girs/accountsservice-1.0": "^1.0.0-3.2.7",
- "@typescript-eslint/eslint-plugin": "^6.20.0",
- "eslint": "^8.56.0",
- "eslint-config-standard-with-typescript": "^43.0.1",
- "eslint-plugin-import": "^2.29.1",
- "eslint-plugin-n": "^16.6.2",
- "eslint-plugin-promise": "^6.1.1",
- "typescript": "^5.3.3"
- }
-}
diff --git a/.config/ags/service/asusctl.ts b/.config/ags/service/asusctl.ts
deleted file mode 100644
index 16acbd7..0000000
--- a/.config/ags/service/asusctl.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-import { sh } from "lib/utils"
-
-type Profile = "Performance" | "Balanced" | "Quiet"
-type Mode = "Hybrid" | "Integrated"
-
-class Asusctl extends Service {
- static {
- Service.register(this, {}, {
- "profile": ["string", "r"],
- "mode": ["string", "r"],
- })
- }
-
- available = !!Utils.exec("which asusctl")
- #profile: Profile = "Balanced"
- #mode: Mode = "Hybrid"
-
- async nextProfile() {
- await sh("asusctl profile -n")
- const profile = await sh("asusctl profile -p")
- const p = profile.split(" ")[3] as Profile
- this.#profile = p
- this.changed("profile")
- }
-
- async setProfile(prof: Profile) {
- await sh(`asusctl profile --profile-set ${prof}`)
- this.#profile = prof
- this.changed("profile")
- }
-
- async nextMode() {
- await sh(`supergfxctl -m ${this.#mode === "Hybrid" ? "Integrated" : "Hybrid"}`)
- this.#mode = await sh("supergfxctl -g") as Mode
- this.changed("profile")
- }
-
- constructor() {
- super()
-
- if (this.available) {
- sh("asusctl profile -p").then(p => this.#profile = p.split(" ")[3] as Profile)
- sh("supergfxctl -g").then(m => this.#mode = m as Mode)
- }
- }
-
- get profiles(): Profile[] { return ["Performance", "Balanced", "Quiet"] }
- get profile() { return this.#profile }
- get mode() { return this.#mode }
-}
-
-export default new Asusctl
diff --git a/.config/ags/service/brightness.ts b/.config/ags/service/brightness.ts
deleted file mode 100644
index a0b8eb5..0000000
--- a/.config/ags/service/brightness.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import { bash, dependencies, sh } from "lib/utils"
-
-if (!dependencies("brightnessctl"))
- App.quit()
-
-const get = (args: string) => Number(Utils.exec(`brightnessctl ${args}`))
-const screen = await bash`ls -w1 /sys/class/backlight | head -1`
-const kbd = await bash`ls -w1 /sys/class/leds | head -1`
-
-class Brightness extends Service {
- static {
- Service.register(this, {}, {
- "screen": ["float", "rw"],
- "kbd": ["int", "rw"],
- })
- }
-
- #kbdMax = get(`--device ${kbd} max`)
- #kbd = get(`--device ${kbd} get`)
- #screenMax = get("max")
- #screen = get("get") / get("max")
-
- get kbd() { return this.#kbd }
- get screen() { return this.#screen }
-
- set kbd(value) {
- if (value < 0 || value > this.#kbdMax)
- return
-
- sh(`brightnessctl -d ${kbd} s ${value} -q`).then(() => {
- this.#kbd = value
- this.changed("kbd")
- })
- }
-
- set screen(percent) {
- if (percent < 0)
- percent = 0
-
- if (percent > 1)
- percent = 1
-
- sh(`brightnessctl set ${Math.floor(percent * 100)}% -q`).then(() => {
- this.#screen = percent
- this.changed("screen")
- })
- }
-
- constructor() {
- super()
-
- const screenPath = `/sys/class/backlight/${screen}/brightness`
- const kbdPath = `/sys/class/leds/${kbd}/brightness`
-
- Utils.monitorFile(screenPath, async f => {
- const v = await Utils.readFileAsync(f)
- this.#screen = Number(v) / this.#screenMax
- this.changed("screen")
- })
-
- Utils.monitorFile(kbdPath, async f => {
- const v = await Utils.readFileAsync(f)
- this.#kbd = Number(v) / this.#kbdMax
- this.changed("kbd")
- })
- }
-}
-
-export default new Brightness
diff --git a/.config/ags/service/colorpicker.ts b/.config/ags/service/colorpicker.ts
deleted file mode 100644
index 5918f31..0000000
--- a/.config/ags/service/colorpicker.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-import icons from "lib/icons"
-import { bash, dependencies } from "lib/utils"
-
-const COLORS_CACHE = Utils.CACHE_DIR + "/colorpicker.json"
-const MAX_NUM_COLORS = 10
-
-class ColorPicker extends Service {
- static {
- Service.register(this, {}, {
- "colors": ["jsobject"],
- })
- }
-
- #notifID = 0
- #colors = JSON.parse(Utils.readFile(COLORS_CACHE) || "[]") as string[]
-
- get colors() { return [...this.#colors] }
- set colors(colors) {
- this.#colors = colors
- this.changed("colors")
- }
-
- // TODO: doesn't work?
- async wlCopy(color: string) {
- if (dependencies("wl-copy"))
- bash(`wl-copy ${color}`)
- }
-
- readonly pick = async () => {
- if (!dependencies("hyprpicker"))
- return
-
- const color = await bash("hyprpicker -a -r")
- if (!color)
- return
-
- this.wlCopy(color)
- const list = this.colors
- if (!list.includes(color)) {
- list.push(color)
- if (list.length > MAX_NUM_COLORS)
- list.shift()
-
- this.colors = list
- Utils.writeFile(JSON.stringify(list, null, 2), COLORS_CACHE)
- }
-
- this.#notifID = await Utils.notify({
- id: this.#notifID,
- iconName: icons.ui.colorpicker,
- summary: color,
- })
- }
-}
-
-export default new ColorPicker
diff --git a/.config/ags/service/nix.ts b/.config/ags/service/nix.ts
deleted file mode 100644
index 3bde9fc..0000000
--- a/.config/ags/service/nix.ts
+++ /dev/null
@@ -1,109 +0,0 @@
-import icons from "lib/icons"
-import { bash, dependencies } from "lib/utils"
-import options from "options"
-
-const CACHE = `${Utils.CACHE_DIR}/nixpkgs`
-const PREFIX = "legacyPackages.x86_64-linux."
-const MAX = options.launcher.nix.max
-const nixpkgs = options.launcher.nix.pkgs
-
-export type Nixpkg = {
- name: string
- description: string
- pname: string
- version: string
-}
-
-class Nix extends Service {
- static {
- Service.register(this, {}, {
- "available": ["boolean", "r"],
- "ready": ["boolean", "rw"],
- })
- }
-
- #db: { [name: string]: Nixpkg } = {}
- #ready = true
-
- private set ready(r: boolean) {
- this.#ready = r
- this.changed("ready")
- }
-
- get db() { return this.#db }
- get ready() { return this.#ready }
- get available() { return Utils.exec("which nix") }
-
- constructor() {
- super()
- if (!this.available)
- return this
-
- this.#updateList()
- nixpkgs.connect("changed", this.#updateList)
- }
-
- query = async (filter: string) => {
- if (!dependencies("fzf", "nix") || !this.#ready)
- return [] as string[]
-
- return bash(`cat ${CACHE} | fzf -f ${filter} -e | head -n ${MAX} `)
- .then(str => str.split("\n").filter(i => i))
- }
-
- nix(cmd: string, bin: string, args: string) {
- return Utils.execAsync(`nix ${cmd} ${nixpkgs}#${bin} --impure ${args}`)
- }
-
- run = async (input: string) => {
- if (!dependencies("nix"))
- return
-
- try {
- const [bin, ...args] = input.trim().split(/\s+/)
-
- this.ready = false
- await this.nix("shell", bin, "--command sh -c 'exit'")
- this.ready = true
-
- this.nix("run", bin, ["--", ...args].join(" "))
- } catch (err) {
- if (typeof err === "string")
- Utils.notify("NixRun Error", err, icons.nix.nix)
- else
- logError(err)
- } finally {
- this.ready = true
- }
- }
-
- #updateList = async () => {
- if (!dependencies("nix"))
- return
-
- this.ready = false
- this.#db = {}
-
- // const search = await bash(`nix search ${nixpkgs} --json`)
- const search = ""
- if (!search) {
- this.ready = true
- return
- }
-
- const json = Object.entries(JSON.parse(search) as {
- [name: string]: Nixpkg
- })
-
- for (const [pkg, info] of json) {
- const name = pkg.replace(PREFIX, "")
- this.#db[name] = { ...info, name }
- }
-
- const list = Object.keys(this.#db).join("\n")
- await Utils.writeFile(list, CACHE)
- this.ready = true
- }
-}
-
-export default new Nix
diff --git a/.config/ags/service/powermenu.ts b/.config/ags/service/powermenu.ts
deleted file mode 100644
index fd16bc1..0000000
--- a/.config/ags/service/powermenu.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import options from "options"
-
-const { sleep, reboot, logout, shutdown } = options.powermenu
-
-export type Action = "sleep" | "reboot" | "logout" | "shutdown"
-
-class PowerMenu extends Service {
- static {
- Service.register(this, {}, {
- "title": ["string"],
- "cmd": ["string"],
- })
- }
-
- #title = ""
- #cmd = ""
-
- get title() { return this.#title }
- get cmd() { return this.#cmd }
-
- action(action: Action) {
- [this.#cmd, this.#title] = {
- sleep: [sleep.value, "Sleep"],
- reboot: [reboot.value, "Reboot"],
- logout: [logout.value, "Log Out"],
- shutdown: [shutdown.value, "Shutdown"],
- }[action]
-
- this.notify("cmd")
- this.notify("title")
- this.emit("changed")
- App.closeWindow("powermenu")
- App.openWindow("verification")
- }
-
- readonly shutdown = () => {
- this.action("shutdown")
- }
-}
-
-const powermenu = new PowerMenu
-Object.assign(globalThis, { powermenu })
-export default powermenu
diff --git a/.config/ags/service/screenrecord.ts b/.config/ags/service/screenrecord.ts
deleted file mode 100644
index 58721d2..0000000
--- a/.config/ags/service/screenrecord.ts
+++ /dev/null
@@ -1,102 +0,0 @@
-import GLib from "gi://GLib"
-import icons from "lib/icons"
-import { dependencies, sh, bash } from "lib/utils"
-
-const now = () => GLib.DateTime.new_now_local().format("%Y-%m-%d_%H-%M-%S")
-
-class Recorder extends Service {
- static {
- Service.register(this, {}, {
- "timer": ["int"],
- "recording": ["boolean"],
- })
- }
-
- #recordings = Utils.HOME + "/Videos/Screencasting"
- #screenshots = Utils.HOME + "/Pictures/Screenshots"
- #file = ""
- #interval = 0
-
- recording = false
- timer = 0
-
- async start() {
- if (!dependencies("slurp", "wf-recorder"))
- return
-
- if (this.recording)
- return
-
- Utils.ensureDirectory(this.#recordings)
- this.#file = `${this.#recordings}/${now()}.mp4`
- sh(`wf-recorder -g "${await sh("slurp")}" -f ${this.#file} --pixel-format yuv420p`)
-
- this.recording = true
- this.changed("recording")
-
- this.timer = 0
- this.#interval = Utils.interval(1000, () => {
- this.changed("timer")
- this.timer++
- })
- }
-
- async stop() {
- if (!this.recording)
- return
-
- await bash("killall -INT wf-recorder")
- this.recording = false
- this.changed("recording")
- GLib.source_remove(this.#interval)
-
- Utils.notify({
- iconName: icons.fallback.video,
- summary: "Screenrecord",
- body: this.#file,
- actions: {
- "Show in Files": () => sh(`xdg-open ${this.#recordings}`),
- "View": () => sh(`xdg-open ${this.#file}`),
- },
- })
- }
-
- async screenshot(full = false) {
- if (!dependencies("slurp", "wayshot"))
- return
-
- const file = `${this.#screenshots}/${now()}.png`
- Utils.ensureDirectory(this.#screenshots)
-
- if (full) {
- await sh(`wayshot -f ${file}`)
- }
- else {
- const size = await sh("slurp")
- if (!size)
- return
-
- await sh(`wayshot -f ${file} -s "${size}"`)
- }
-
- bash(`wl-copy < ${file}`)
-
- Utils.notify({
- image: file,
- summary: "Screenshot",
- body: file,
- actions: {
- "Show in Files": () => sh(`xdg-open ${this.#screenshots}`),
- "View": () => sh(`xdg-open ${file}`),
- "Edit": () => {
- if (dependencies("swappy"))
- sh(`swappy -f ${file}`)
- },
- },
- })
- }
-}
-
-const recorder = new Recorder
-Object.assign(globalThis, { recorder })
-export default recorder
diff --git a/.config/ags/service/wallpaper.ts b/.config/ags/service/wallpaper.ts
deleted file mode 100644
index 865c6d9..0000000
--- a/.config/ags/service/wallpaper.ts
+++ /dev/null
@@ -1,127 +0,0 @@
-import options from 'options';
-import { dependencies, sh } from 'lib/utils';
-
-export type Resolution = 1920 | 1366 | 3840;
-export type Market = 'random' | 'en-US' | 'ja-JP' | 'en-AU' | 'en-GB' | 'de-DE' | 'en-NZ' | 'en-CA';
-
-const WP = `${Utils.HOME}/pictures/wallpapers`;
-const Cache = `${Utils.HOME}/Pictures/Wallpapers/Bing`;
-
-class Wallpaper extends Service {
- static {
- Service.register(
- this,
- {},
- {
- wallpaper: ['string'],
- },
- );
- }
-
- #blockMonitor = false;
-
- #wallpaper() {
- if (!dependencies('swww')) return;
-
- sh('hyprctl cursorpos').then(pos => {
- sh(['swww', 'img', '--transition-type', 'grow', '--transition-pos', pos.replace(' ', ''), WP]).then(() => {
- this.changed('wallpaper');
- });
- });
- }
-
- async #setWallpaper(path: string) {
- this.#blockMonitor = true;
-
- await sh(`cp "${path}" "${WP}"`);
- this.#wallpaper();
-
- this.#blockMonitor = false;
- }
-
- async #fetchBing() {
- // Check if wallpaper functionality is enabled
- if (!options.wallpaper.enable.value) {
- console.log('Wallpaper functionality is disabled.');
- return;
- }
-
- try {
- const res = await Utils.fetch('https://bing.biturl.top/', {
- params: {
- resolution: options.wallpaper.resolution.value,
- format: 'json',
- image_format: 'jpg',
- index: 'random',
- mkt: options.wallpaper.market.value,
- },
- });
-
- if (!res.ok) {
- console.warn('Failed to fetch from Bing:', res.statusText);
- return;
- }
-
- const data = await res.json();
- const { url } = data;
-
- if (!url) {
- console.warn('No URL found in Bing response:', data);
- return;
- }
-
- const file = `${Cache}/${url.replace('https://www.bing.com/th?id=', '')}`;
-
- Utils.ensureDirectory(Cache);
-
- if (!(await Utils.fileExists(file))) {
- await sh(`curl "${url}" --output "${file}"`);
- await this.#setWallpaper(file);
- } else {
- console.log(`Wallpaper already exists: ${file}`);
- }
- } catch (error) {
- console.error('Error fetching wallpaper:', error);
- }
- }
-
- readonly random = () => {
- // Check if wallpaper functionality is enabled
- if (!options.wallpaper.enable.value) {
- console.log('Wallpaper functionality is disabled.');
- return;
- }
- this.#fetchBing();
- };
-
- readonly set = (path: string) => {
- this.#setWallpaper(path);
- };
-
- get wallpaper() {
- return WP;
- }
- constructor() {
- super();
-
- // Respect wallpaper.enable option
- if (!options.wallpaper.enable.value) {
- console.log('Wallpaper functionality is disabled, not starting swww-daemon.');
- return;
- }
-
- if (!dependencies('swww')) return;
-
- // Monitor and set wallpaper if enabled
- Utils.monitorFile(WP, () => {
- if (!this.#blockMonitor) this.#wallpaper();
- });
-
- // Start swww-daemon only when wallpaper is enabled
- Utils.execAsync('swww-daemon')
- .then(this.#wallpaper)
- .catch(() => null);
- }
-}
-
-export default new Wallpaper();
diff --git a/.config/ags/service/weather.ts b/.config/ags/service/weather.ts
deleted file mode 100644
index 14f2df2..0000000
--- a/.config/ags/service/weather.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import options from "options"
-
-const { interval, key, cities, unit } = options.datemenu.weather
-
-class Weather extends Service {
- static {
- Service.register(this, {}, {
- "forecasts": ["jsobject"],
- })
- }
-
- #forecasts: Forecast[] = []
- get forecasts() { return this.#forecasts }
-
- async #fetch(placeid: number) {
- const url = "https://api.openweathermap.org/data/2.5/forecast"
- const res = await Utils.fetch(url, {
- params: {
- id: placeid,
- appid: key.value,
- untis: unit.value,
- },
- })
- return await res.json()
- }
-
- constructor() {
- super()
- if (!key.value)
- return this
-
- Utils.interval(interval.value, () => {
- Promise.all(cities.value.map(this.#fetch)).then(forecasts => {
- this.#forecasts = forecasts as Forecast[]
- this.changed("forecasts")
- })
- })
- }
-}
-
-export default new Weather
-
-type Forecast = {
- city: {
- name: string,
- }
- list: Array<{
- dt: number
- main: {
- temp: number
- feels_like: number
- },
- weather: Array<{
- main: string,
- description: string,
- icon: string,
- }>
- }>
-}
diff --git a/.config/ags/style/extra.scss b/.config/ags/style/extra.scss
deleted file mode 100644
index e7f9d44..0000000
--- a/.config/ags/style/extra.scss
+++ /dev/null
@@ -1,67 +0,0 @@
-@import './mixins/button.scss';
-
-* {
- font-size: $font-size;
- font-family: $font-name;
-}
-
-separator {
- &.horizontal {
- min-height: $border-width;
- }
-
- &.vertical {
- min-width: $border-width;
- }
-}
-
-window.popup {
- >* {
- border: none;
- box-shadow: none;
- }
-
- menu {
- border-radius: $popover-radius;
- background-color: $bg;
- padding: $popover-padding;
- border: $border-width solid $popover-border-color;
-
- separator {
- background-color: $border-color;
- }
-
- menuitem {
- @include button;
- padding: $spacing * .5;
- margin: ($spacing * .5) 0;
-
- &:first-child {
- margin-top: 0;
- }
-
- &:last-child {
- margin-bottom: 0;
- }
- }
- }
-}
-
-tooltip {
- * {
- all: unset;
- }
-
- background-color: transparent;
- border: none;
-
- >*>* {
- background-color: $bg;
- border-radius: $radius;
- border: $border-width solid $popover-border-color;
- color: $fg;
- padding: 8px;
- margin: 4px;
- box-shadow: 0 0 3px 0 $shadow-color;
- }
-}
diff --git a/.config/ags/style/mixins/a11y-button.scss b/.config/ags/style/mixins/a11y-button.scss
deleted file mode 100644
index 00b24c6..0000000
--- a/.config/ags/style/mixins/a11y-button.scss
+++ /dev/null
@@ -1,48 +0,0 @@
-@import './button';
-
-@mixin accs-button($flat: false, $reactive: true) {
- @include unset;
- color: $fg;
-
- >* {
- border-radius: $radius;
- transition: $transition;
-
- @if $flat {
- background-color: transparent;
- box-shadow: none;
- }
-
- @else {
- background-color: $widget-bg;
- box-shadow: inset 0 0 0 $border-width $border-color;
- }
- }
-
-
- @if $reactive {
-
- &:focus>*,
- &.focused>* {
- @include button-focus;
- }
-
- &:hover>* {
- @include button-hover;
- }
-
- &:active,
- &.active,
- &.on,
- &:checked {
- >* {
- @include button-active;
- }
-
- &:hover>* {
- box-shadow: inset 0 0 0 $border-width $border-color,
- inset 0 0 0 99px $hover-bg;
- }
- }
- }
-}
diff --git a/.config/ags/style/mixins/button.scss b/.config/ags/style/mixins/button.scss
deleted file mode 100644
index 79ec275..0000000
--- a/.config/ags/style/mixins/button.scss
+++ /dev/null
@@ -1,70 +0,0 @@
-@mixin button-focus() {
- box-shadow: inset 0 0 0 $border-width $primary-bg;
- background-color: $hover-bg;
- color: $hover-fg;
-}
-
-@mixin button-hover() {
- box-shadow: inset 0 0 0 $border-width $border-color;
- background-color: $hover-bg;
- color: $hover-fg;
-}
-
-@mixin button-active() {
- box-shadow: inset 0 0 0 $border-width $border-color;
- background-image: $active-gradient;
- background-color: $primary-bg;
- color: $primary-fg;
-}
-
-@mixin button-disabled() {
- box-shadow: none;
- background-color: transparent;
- color: transparentize($fg, 0.7);
-}
-
-@mixin button($flat: false, $reactive: true, $radius: $radius, $focusable: true) {
- all: unset;
- transition: $transition;
- border-radius: $radius;
- color: $fg;
-
- @if $flat {
- background-color: transparent;
- background-image: none;
- box-shadow: none;
- }
-
- @else {
- background-color: $widget-bg;
- box-shadow: inset 0 0 0 $border-width $border-color;
- }
-
- @if $reactive {
- @if $focusable {
- &:focus {
- @include button-focus;
- }
- }
-
- &:hover {
- @include button-hover;
- }
-
- &:active,
- &.on,
- &.active,
- &:checked {
- @include button-active;
-
- &:hover {
- box-shadow: inset 0 0 0 $border-width $border-color,
- inset 0 0 0 99px $hover-bg;
- }
- }
- }
-
- &:disabled {
- @include button-disabled;
- }
-}
diff --git a/.config/ags/style/mixins/floating-widget.scss b/.config/ags/style/mixins/floating-widget.scss
deleted file mode 100644
index 613668d..0000000
--- a/.config/ags/style/mixins/floating-widget.scss
+++ /dev/null
@@ -1,12 +0,0 @@
-@mixin floating-widget {
- @if $shadows {
- box-shadow: 0 0 5px 0 $shadow-color;
- }
-
- margin: max($spacing, 8px);
- border: $border-width solid $popover-border-color;
- background-color: $bg;
- color: $fg;
- border-radius: $popover-radius;
- padding: $popover-padding;
-}
diff --git a/.config/ags/style/mixins/hidden.scss b/.config/ags/style/mixins/hidden.scss
deleted file mode 100644
index ea6a42c..0000000
--- a/.config/ags/style/mixins/hidden.scss
+++ /dev/null
@@ -1,15 +0,0 @@
-@mixin hidden {
- background-color: transparent;
- background-image: none;
- border-color: transparent;
- box-shadow: none;
- -gtk-icon-transform: scale(0);
-
- * {
- background-color: transparent;
- background-image: none;
- border-color: transparent;
- box-shadow: none;
- -gtk-icon-transform: scale(0);
- }
-}
diff --git a/.config/ags/style/mixins/media.scss b/.config/ags/style/mixins/media.scss
deleted file mode 100644
index 3178029..0000000
--- a/.config/ags/style/mixins/media.scss
+++ /dev/null
@@ -1,42 +0,0 @@
-@mixin media() {
- @include widget;
- padding: $padding;
-
- .cover {
- @if $shadows {
- box-shadow: 2px 2px 2px 0 $shadow-color;
- }
-
- background-size: cover;
- background-position: center;
- border-radius: $radius*0.8;
- margin-right: $spacing;
- }
-
- button {
- @include button($flat: true);
- padding: $padding * .5;
-
- &.play-pause {
- margin: 0 ($spacing * .5);
- }
-
- image {
- font-size: 1.2em;
- }
- }
-
- .artist {
- color: transparentize($fg, .2);
- font-size: .9em;
- }
-
- scale {
- @include slider($width: .5em, $slider: false, $gradient: linear-gradient($fg, $fg));
- margin-bottom: $padding * .5;
-
- trough {
- border: none;
- }
- }
-}
diff --git a/.config/ags/style/mixins/scrollable.scss b/.config/ags/style/mixins/scrollable.scss
deleted file mode 100644
index b66f246..0000000
--- a/.config/ags/style/mixins/scrollable.scss
+++ /dev/null
@@ -1,42 +0,0 @@
-@mixin scrollable($top: false, $bottom: false) {
-
- @if $top and $shadows {
- undershoot.top {
- background: linear-gradient(to bottom, $shadow-color, transparent, transparent, transparent, transparent, transparent);
- }
- }
-
- @if $bottom and $shadows {
- undershoot.bottom {
- background: linear-gradient(to top, $shadow-color, transparent, transparent, transparent, transparent, transparent);
- }
- }
-
- scrollbar,
- scrollbar * {
- all: unset;
- }
-
- scrollbar.vertical {
- transition: $transition;
- background-color: transparentize($bg, 0.7);
-
- &:hover {
- background-color: transparentize($bg, 0.3);
-
- slider {
- background-color: transparentize($fg, 0.3);
- min-width: .6em;
- }
- }
- }
-
-
- scrollbar.vertical slider {
- background-color: transparentize($fg, 0.5);
- border-radius: $radius;
- min-width: .4em;
- min-height: 2em;
- transition: $transition;
- }
-}
diff --git a/.config/ags/style/mixins/slider.scss b/.config/ags/style/mixins/slider.scss
deleted file mode 100644
index b90e566..0000000
--- a/.config/ags/style/mixins/slider.scss
+++ /dev/null
@@ -1,74 +0,0 @@
-@import './unset';
-
-@mixin slider($width: 0.7em, $slider-width: .5em, $gradient: $active-gradient, $slider: true, $focusable: true, $radius: $radius) {
- @include unset($rec: true);
-
- trough {
- transition: $transition;
- border-radius: $radius;
- border: $border;
- background-color: $widget-bg;
- min-height: $width;
- min-width: $width;
-
- highlight,
- progress {
- border-radius: max($radius - $border-width, 0);
- background-image: $gradient;
- min-height: $width;
- min-width: $width;
- }
- }
-
- slider {
- box-shadow: none;
- background-color: transparent;
- border: $border-width solid transparent;
- transition: $transition;
- border-radius: $radius;
- min-height: $width;
- min-width: $width;
- margin: -$slider-width;
- }
-
- &:hover {
- trough {
- background-color: $hover-bg;
- }
-
- slider {
- @if $slider {
- background-color: $fg;
- border-color: $border-color;
-
- @if $shadows {
- box-shadow: 0 0 3px 0 $shadow-color;
- }
- }
- }
- }
-
- &:disabled {
-
- highlight,
- progress {
- background-color: transparentize($fg, 0.4);
- background-image: none;
- }
- }
-
- @if $focusable {
- trough:focus {
- background-color: $hover-bg;
- box-shadow: inset 0 0 0 $border-width $primary-bg;
-
- slider {
- @if $slider {
- background-color: $fg;
- box-shadow: inset 0 0 0 $border-width $primary-bg;
- }
- }
- }
-
- }
-}
diff --git a/.config/ags/style/mixins/spacing.scss b/.config/ags/style/mixins/spacing.scss
deleted file mode 100644
index 4096fba..0000000
--- a/.config/ags/style/mixins/spacing.scss
+++ /dev/null
@@ -1,53 +0,0 @@
-@mixin spacing($multiplier: 1, $spacing: $spacing, $rec: false) {
- &.horizontal>* {
- margin: 0 calc($spacing * $multiplier / 2);
-
- &:first-child {
- margin-left: 0;
- }
-
- &:last-child {
- margin-right: 0;
- }
- }
-
- &.vertical>* {
- margin: calc($spacing * $multiplier / 2) 0;
-
- &:first-child {
- margin-top: 0;
- }
-
- &:last-child {
- margin-bottom: 0;
- }
- }
-
- @if $rec {
- box {
- &.horizontal>* {
- margin: 0 $spacing * $multiplier / 2;
-
- &:first-child {
- margin-left: 0;
- }
-
- &:last-child {
- margin-right: 0;
- }
- }
-
- &.vertical>* {
- margin: $spacing * $multiplier / 2 0;
-
- &:first-child {
- margin-top: 0;
- }
-
- &:last-child {
- margin-bottom: 0;
- }
- }
- }
- }
-}
diff --git a/.config/ags/style/mixins/switch.scss b/.config/ags/style/mixins/switch.scss
deleted file mode 100644
index 2abf360..0000000
--- a/.config/ags/style/mixins/switch.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-@import './button';
-
-@mixin switch {
- @include button;
-
- slider {
- background-color: $primary-fg;
- border-radius: $radius;
- min-width: 24px;
- min-height: 24px;
- }
-
- image {
- color: transparent;
- }
-}
diff --git a/.config/ags/style/mixins/unset.scss b/.config/ags/style/mixins/unset.scss
deleted file mode 100644
index eb80af5..0000000
--- a/.config/ags/style/mixins/unset.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-@mixin unset($rec: false) {
- all: unset;
-
- @if $rec {
- * {
- all: unset
- }
- }
-}
diff --git a/.config/ags/style/mixins/widget.scss b/.config/ags/style/mixins/widget.scss
deleted file mode 100644
index 053f1aa..0000000
--- a/.config/ags/style/mixins/widget.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-@mixin widget {
- transition: $transition;
- border-radius: $radius;
- color: $fg;
- background-color: $widget-bg;
- border: $border;
-}
diff --git a/.config/ags/style/style.ts b/.config/ags/style/style.ts
deleted file mode 100644
index a9b94fe..0000000
--- a/.config/ags/style/style.ts
+++ /dev/null
@@ -1,103 +0,0 @@
-/* eslint-disable max-len */
-import { type Opt } from "lib/option"
-import options from "options"
-import { bash, dependencies, sh } from "lib/utils"
-
-const deps = [
- "font",
- "theme",
- "bar.flatButtons",
- "bar.position",
- "bar.battery.charging",
- "bar.battery.blocks",
-]
-
-const {
- dark,
- light,
- blur,
- scheme,
- padding,
- spacing,
- radius,
- shadows,
- widget,
- border,
-} = options.theme
-
-const popoverPaddingMultiplier = 1.6
-
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-const t = (dark: Opt<any> | string, light: Opt<any> | string) => scheme.value === "dark"
- ? `${dark}` : `${light}`
-
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-const $ = (name: string, value: string | Opt<any>) => `$${name}: ${value};`
-
-const variables = () => [
- $("bg", blur.value ? `transparentize(${t(dark.bg, light.bg)}, ${blur.value / 100})` : t(dark.bg, light.bg)),
- $("fg", t(dark.fg, light.fg)),
-
- $("primary-bg", t(dark.primary.bg, light.primary.bg)),
- $("primary-fg", t(dark.primary.fg, light.primary.fg)),
-
- $("error-bg", t(dark.error.bg, light.error.bg)),
- $("error-fg", t(dark.error.fg, light.error.fg)),
-
- $("scheme", scheme),
- $("padding", `${padding}pt`),
- $("spacing", `${spacing}pt`),
- $("radius", `${radius}px`),
- $("transition", `${options.transition}ms`),
-
- $("shadows", `${shadows}`),
-
- $("widget-bg", `transparentize(${t(dark.widget, light.widget)}, ${widget.opacity.value / 100})`),
-
- $("hover-bg", `transparentize(${t(dark.widget, light.widget)}, ${(widget.opacity.value * .9) / 100})`),
- $("hover-fg", `lighten(${t(dark.fg, light.fg)}, 8%)`),
-
- $("border-width", `${border.width}px`),
- $("border-color", `transparentize(${t(dark.border, light.border)}, ${border.opacity.value / 100})`),
- $("border", "$border-width solid $border-color"),
-
- $("active-gradient", `linear-gradient(to right, ${t(dark.primary.bg, light.primary.bg)}, darken(${t(dark.primary.bg, light.primary.bg)}, 4%))`),
- $("shadow-color", t("rgba(0,0,0,.6)", "rgba(0,0,0,.4)")),
- $("text-shadow", t("2pt 2pt 2pt $shadow-color", "none")),
-
- $("popover-border-color", `transparentize(${t(dark.border, light.border)}, ${Math.max(((border.opacity.value - 1) / 100), 0)})`),
- $("popover-padding", `$padding * ${popoverPaddingMultiplier}`),
- $("popover-radius", radius.value === 0 ? "0" : "$radius + $popover-padding"),
-
- $("font-size", `${options.font.size}pt`),
- $("font-name", options.font.name),
-
- // etc
- $("charging-bg", options.bar.battery.charging),
- $("bar-battery-blocks", options.bar.battery.blocks),
- $("bar-position", options.bar.position),
- $("hyprland-gaps-multiplier", options.hyprland.gaps),
-]
-
-async function resetCss() {
- if (!dependencies("sass", "fd"))
- return
-
- try {
- const vars = `${TMP}/variables.scss`
- await Utils.writeFile(variables().join("\n"), vars)
-
- const fd = await sh(`fd ".scss" ${App.configDir}`)
- const files = fd.split(/\s+/).map(f => `@import '${f}';`)
- const scss = [`@import '${vars}';`, ...files].join("\n")
- const css = await bash`echo "${scss}" | sass --stdin`
-
- App.applyCss(css, true)
- } catch (error) {
- logError(error)
- }
-}
-
-Utils.monitorFile(App.configDir, resetCss)
-options.handler(deps, resetCss)
-await resetCss()
diff --git a/.config/ags/tsconfig.json b/.config/ags/tsconfig.json
deleted file mode 100644
index 1708aa3..0000000
--- a/.config/ags/tsconfig.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "compilerOptions": {
- "target": "ES2022",
- "module": "ES2022",
- "lib": [
- "ES2022"
- ],
- "allowJs": true,
- "checkJs": true,
- "strict": true,
- "noImplicitAny": false,
- "baseUrl": ".",
- "typeRoots": [
- "./types",
- "./node_modules/@girs"
- ],
- "skipLibCheck": true
- }
-}
diff --git a/.config/ags/widget/PopupWindow.ts b/.config/ags/widget/PopupWindow.ts
deleted file mode 100644
index b53b6fd..0000000
--- a/.config/ags/widget/PopupWindow.ts
+++ /dev/null
@@ -1,156 +0,0 @@
-import { type WindowProps } from "types/widgets/window"
-import { type RevealerProps } from "types/widgets/revealer"
-import { type EventBoxProps } from "types/widgets/eventbox"
-import type Gtk from "gi://Gtk?version=3.0"
-import options from "options"
-
-type Transition = RevealerProps["transition"]
-type Child = WindowProps["child"]
-
-type PopupWindowProps = Omit<WindowProps, "name"> & {
- name: string
- layout?: keyof ReturnType<typeof Layout>
- transition?: Transition,
-}
-
-export const Padding = (name: string, {
- css = "",
- hexpand = true,
- vexpand = true,
-}: EventBoxProps = {}) => Widget.EventBox({
- hexpand,
- vexpand,
- can_focus: false,
- child: Widget.Box({ css }),
- setup: w => w.on("button-press-event", () => App.toggleWindow(name)),
-})
-
-const PopupRevealer = (
- name: string,
- child: Child,
- transition: Transition = "slide_down",
-) => Widget.Box(
- { css: "padding: 1px;" },
- Widget.Revealer({
- transition,
- child: Widget.Box({
- class_name: "window-content",
- child,
- }),
- transitionDuration: options.transition.bind(),
- setup: self => self.hook(App, (_, wname, visible) => {
- if (wname === name)
- self.reveal_child = visible
- }),
- }),
-)
-
-const Layout = (name: string, child: Child, transition?: Transition) => ({
- "center": () => Widget.CenterBox({},
- Padding(name),
- Widget.CenterBox(
- { vertical: true },
- Padding(name),
- PopupRevealer(name, child, transition),
- Padding(name),
- ),
- Padding(name),
- ),
- "top": () => Widget.CenterBox({},
- Padding(name),
- Widget.Box(
- { vertical: true },
- PopupRevealer(name, child, transition),
- Padding(name),
- ),
- Padding(name),
- ),
- "top-right": () => Widget.Box({},
- Padding(name),
- Widget.Box(
- {
- hexpand: false,
- vertical: true,
- },
- PopupRevealer(name, child, transition),
- Padding(name),
- ),
- ),
- "top-center": () => Widget.Box({},
- Padding(name),
- Widget.Box(
- {
- hexpand: false,
- vertical: true,
- },
- PopupRevealer(name, child, transition),
- Padding(name),
- ),
- Padding(name),
- ),
- "top-left": () => Widget.Box({},
- Widget.Box(
- {
- hexpand: false,
- vertical: true,
- },
- PopupRevealer(name, child, transition),
- Padding(name),
- ),
- Padding(name),
- ),
- "bottom-left": () => Widget.Box({},
- Widget.Box(
- {
- hexpand: false,
- vertical: true,
- },
- Padding(name),
- PopupRevealer(name, child, transition),
- ),
- Padding(name),
- ),
- "bottom-center": () => Widget.Box({},
- Padding(name),
- Widget.Box(
- {
- hexpand: false,
- vertical: true,
- },
- Padding(name),
- PopupRevealer(name, child, transition),
- ),
- Padding(name),
- ),
- "bottom-right": () => Widget.Box({},
- Padding(name),
- Widget.Box(
- {
- hexpand: false,
- vertical: true,
- },
- Padding(name),
- PopupRevealer(name, child, transition),
- ),
- ),
-})
-
-export default ({
- name,
- child,
- layout = "center",
- transition,
- exclusivity = "ignore",
- ...props
-}: PopupWindowProps) => Widget.Window<Gtk.Widget>({
- name,
- class_names: [name, "popup-window"],
- setup: w => w.keybind("Escape", () => App.closeWindow(name)),
- visible: false,
- keymode: "on-demand",
- exclusivity,
- layer: "top",
- anchor: ["top", "bottom", "right", "left"],
- child: Layout(name, child, transition)[layout](),
- ...props,
-})
diff --git a/.config/ags/widget/RegularWindow.ts b/.config/ags/widget/RegularWindow.ts
deleted file mode 100644
index 1e4225d..0000000
--- a/.config/ags/widget/RegularWindow.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import Gtk from "gi://Gtk?version=3.0"
-
-export default Widget.subclass<typeof Gtk.Window, Gtk.Window.ConstructorProperties>(Gtk.Window)
diff --git a/.config/ags/widget/bar/Bar.ts b/.config/ags/widget/bar/Bar.ts
deleted file mode 100644
index 9343a36..0000000
--- a/.config/ags/widget/bar/Bar.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import BatteryBar from "./buttons/BatteryBar"
-import ColorPicker from "./buttons/ColorPicker"
-import Date from "./buttons/Date"
-import Launcher from "./buttons/Launcher"
-import Media from "./buttons/Media"
-import PowerMenu from "./buttons/PowerMenu"
-import SysTray from "./buttons/SysTray"
-import SystemIndicators from "./buttons/SystemIndicators"
-import Taskbar from "./buttons/Taskbar"
-import Workspaces from "./buttons/Workspaces"
-import ScreenRecord from "./buttons/ScreenRecord"
-import Messages from "./buttons/Messages"
-import options from "options"
-
-const { start, center, end } = options.bar.layout
-const pos = options.bar.position.bind()
-
-export type BarWidget = keyof typeof widget
-
-const widget = {
- battery: BatteryBar,
- colorpicker: ColorPicker,
- date: Date,
- launcher: Launcher,
- media: Media,
- powermenu: PowerMenu,
- systray: SysTray,
- system: SystemIndicators,
- taskbar: Taskbar,
- workspaces: Workspaces,
- screenrecord: ScreenRecord,
- messages: Messages,
- expander: () => Widget.Box({ expand: true }),
-}
-
-export default (monitor: number) => Widget.Window({
- monitor,
- class_name: "bar",
- name: `bar${monitor}`,
- exclusivity: "exclusive",
- anchor: pos.as(pos => [pos, "right", "left"]),
- child: Widget.CenterBox({
- css: "min-width: 2px; min-height: 2px;",
- startWidget: Widget.Box({
- hexpand: true,
- children: start.bind().as(s => s.map(w => widget[w]())),
- }),
- centerWidget: Widget.Box({
- hpack: "center",
- children: center.bind().as(c => c.map(w => widget[w]())),
- }),
- endWidget: Widget.Box({
- hexpand: true,
- children: end.bind().as(e => e.map(w => widget[w]())),
- }),
- }),
-})
diff --git a/.config/ags/widget/bar/PanelButton.ts b/.config/ags/widget/bar/PanelButton.ts
deleted file mode 100644
index 332b46d..0000000
--- a/.config/ags/widget/bar/PanelButton.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-import options from "options"
-import { ButtonProps } from "types/widgets/button"
-
-type PanelButtonProps = ButtonProps & {
- window?: string,
- flat?: boolean
-}
-
-export default ({
- window = "",
- flat,
- child,
- setup,
- ...rest
-}: PanelButtonProps) => Widget.Button({
- child: Widget.Box({ child }),
- setup: self => {
- let open = false
-
- self.toggleClassName("panel-button")
- self.toggleClassName(window)
-
- self.hook(options.bar.flatButtons, () => {
- self.toggleClassName("flat", flat ?? options.bar.flatButtons.value)
- })
-
- self.hook(App, (_, win, visible) => {
- if (win !== window)
- return
-
- if (open && !visible) {
- open = false
- self.toggleClassName("active", false)
- }
-
- if (visible) {
- open = true
- self.toggleClassName("active")
- }
- })
-
- if (setup)
- setup(self)
- },
- ...rest,
-})
diff --git a/.config/ags/widget/bar/ScreenCorners.ts b/.config/ags/widget/bar/ScreenCorners.ts
deleted file mode 100644
index 1b35e50..0000000
--- a/.config/ags/widget/bar/ScreenCorners.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import options from "options"
-
-const { corners } = options.bar
-
-export default (monitor: number) => Widget.Window({
- monitor,
- name: `corner${monitor}`,
- class_name: "screen-corner",
- anchor: ["top", "bottom", "right", "left"],
- click_through: true,
- child: Widget.Box({
- class_name: "shadow",
- child: Widget.Box({
- class_name: "border",
- expand: true,
- child: Widget.Box({
- class_name: "corner",
- expand: true,
- }),
- }),
- }),
- setup: self => self.hook(corners, () => {
- self.toggleClassName("corners", corners.value)
- }),
-})
diff --git a/.config/ags/widget/bar/bar.scss b/.config/ags/widget/bar/bar.scss
deleted file mode 100644
index 5c6c2cd..0000000
--- a/.config/ags/widget/bar/bar.scss
+++ /dev/null
@@ -1,242 +0,0 @@
-@use 'sass:color';
-
-$bar-spacing: $spacing * 0.3;
-$button-radius: $radius;
-
-@mixin panel-button($flat: true, $reactive: true) {
- @include accs-button($flat, $reactive);
-
- >* {
- border-radius: $button-radius;
- margin: $bar-spacing;
- background-color: $bg;
- }
-
- label,
- image {
- font-weight: bold;
- }
-
- >* {
- padding: $padding * 0.8 $padding * 1.2;
- }
-}
-
-.bar {
- .panel-button {
- @include panel-button;
-
- &:not(.flat) {
- @include accs-button($flat: false);
- }
- }
-
- .launcher {
- .colored {
- color: transparentize($primary-bg, 0.2);
- }
-
- &:hover .colored {
- color: $primary-bg;
- }
-
- &:active .colored,
- &.active .colored {
- color: $primary-fg;
- }
- }
-
- .workspaces {
- label {
- font-size: 0;
- min-width: 5pt;
- min-height: 5pt;
- border-radius: $radius * 0.6;
- box-shadow: inset 0 0 0 $border-width $border-color;
- margin: 0 $padding * 0.5;
- transition: $transition * 0.5;
- background-color: transparentize($fg, 0.8);
-
- &.occupied {
- background-color: transparentize($fg, 0.2);
- min-width: 7pt;
- min-height: 7pt;
- }
-
- &.active {
- // background-color: $primary-bg;
- background-image: $active-gradient;
- min-width: 20pt;
- min-height: 12pt;
- }
-
- &.inctive {
- // background-color: $primary-bg;
- background-image: $active-gradient;
- min-width: 20pt;
- min-height: 12pt;
- }
- }
-
- &.inactive,
- &:active {
- label {
- background-color: transparentize($primary-fg, 0.3);
-
- &.occupied {
- background-color: transparentize($primary-fg, 0.15);
- }
-
- &.active {
- background-color: $primary-fg;
- }
-
- &.inactive {
- background-color: $primary-fg;
- }
- }
- }
- }
-
- .media label {
- margin: 0 ($spacing * 0.5);
- }
-
- .taskbar .indicator.active {
- background-color: $primary-bg;
- border-radius: $radius;
- min-height: 4pt;
- min-width: 6pt;
- margin: 2pt;
- }
-
- .powermenu.colored,
- .recorder {
- image {
- color: transparentize($error-bg, 0.3);
- }
-
- &:hover image {
- color: transparentize($error-bg, 0.15);
- }
-
- &:active image {
- color: $primary-fg;
- }
- }
-
- .quicksettings>box>box {
- @include spacing($spacing: if($bar-spacing==0, $padding / 2, $bar-spacing));
- }
-
- .quicksettings:not(.active):not(:active) {
- .bluetooth {
- color: $primary-bg;
-
- label {
- font-size: $font-size * 0.7;
- color: $fg;
- text-shadow: $text-shadow;
- }
- }
- }
-
- .battery-bar {
- >* {
- padding: 0;
- }
-
- &.bar-hidden>box {
- padding: 0 $spacing * 0.5;
-
- image {
- margin: 0;
- }
- }
-
- levelbar * {
- all: unset;
- transition: $transition;
- }
-
- .whole {
- @if $shadows {
- image {
- -gtk-icon-shadow: $text-shadow;
- }
-
- label {
- text-shadow: $text-shadow;
- }
- }
- }
-
- .regular image {
- margin-left: $spacing * 0.5;
- }
-
- trough {
- @include widget;
- min-height: 12pt;
- min-width: 12pt;
- }
-
- .regular trough {
- margin-right: $spacing * 0.5;
- }
-
- block {
- margin: 0;
-
- &:last-child {
- border-radius: 0 $button-radius $button-radius 0;
- }
-
- &:first-child {
- border-radius: $button-radius 0 0 $button-radius;
- }
- }
-
- .vertical {
- block {
- &:last-child {
- border-radius: 0 0 $button-radius $button-radius;
- }
-
- &:first-child {
- border-radius: $button-radius $button-radius 0 0;
- }
- }
- }
-
- @for $i from 1 through $bar-battery-blocks {
- block:nth-child(#{$i}).filled {
- background-color: color.mix($bg, $primary-bg, $i * 3);
- }
-
- &.low block:nth-child(#{$i}).filled {
- background-color: color.mix($bg, $error-bg, $i * 3);
- }
-
- &.charging block:nth-child(#{$i}).filled {
- background-color: color.mix($bg, $charging-bg, $i * 3);
- }
-
- &:active .regular block:nth-child(#{$i}).filled {
- background-color: color.mix($bg, $primary-fg, $i * 3);
- }
- }
-
- &.low image {
- color: $error-bg;
- }
-
- &.charging image {
- color: $charging-bg;
- }
-
- &:active image {
- color: $primary-fg;
- }
- }
-}
diff --git a/.config/ags/widget/bar/buttons/BatteryBar.ts b/.config/ags/widget/bar/buttons/BatteryBar.ts
deleted file mode 100644
index 18de329..0000000
--- a/.config/ags/widget/bar/buttons/BatteryBar.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-import icons from "lib/icons"
-import options from "options"
-import PanelButton from "../PanelButton"
-
-const battery = await Service.import("battery")
-const { bar, percentage, blocks, width, low } = options.bar.battery
-
-const Indicator = () => Widget.Icon({
- setup: self => self.hook(battery, () => {
- self.icon = battery.charging || battery.charged
- ? icons.battery.charging
- : battery.icon_name
- }),
-})
-
-const PercentLabel = () => Widget.Revealer({
- transition: "slide_right",
- click_through: true,
- reveal_child: percentage.bind(),
- child: Widget.Label({
- label: battery.bind("percent").as(p => `${p}%`),
- }),
-})
-
-const LevelBar = () => {
- const level = Widget.LevelBar({
- bar_mode: "discrete",
- max_value: blocks.bind(),
- visible: bar.bind().as(b => b !== "hidden"),
- value: battery.bind("percent").as(p => (p / 100) * blocks.value),
- })
- const update = () => {
- level.value = (battery.percent / 100) * blocks.value
- level.css = `block { min-width: ${width.value / blocks.value}pt; }`
- }
- return level
- .hook(width, update)
- .hook(blocks, update)
- .hook(bar, () => {
- level.vpack = bar.value === "whole" ? "fill" : "center"
- level.hpack = bar.value === "whole" ? "fill" : "center"
- })
-}
-
-const WholeButton = () => Widget.Overlay({
- vexpand: true,
- child: LevelBar(),
- class_name: "whole",
- pass_through: true,
- overlay: Widget.Box({
- hpack: "center",
- children: [
- Widget.Icon({
- icon: icons.battery.charging,
- visible: Utils.merge([
- battery.bind("charging"),
- battery.bind("charged"),
- ], (ing, ed) => ing || ed),
- }),
- Widget.Box({
- hpack: "center",
- vpack: "center",
- child: PercentLabel(),
- }),
- ],
- }),
-})
-
-const Regular = () => Widget.Box({
- class_name: "regular",
- children: [
- Indicator(),
- PercentLabel(),
- LevelBar(),
- ],
-})
-
-export default () => PanelButton({
- class_name: "battery-bar",
- hexpand: false,
- on_clicked: () => { percentage.value = !percentage.value },
- visible: battery.bind("available"),
- child: Widget.Box({
- expand: true,
- visible: battery.bind("available"),
- child: bar.bind().as(b => b === "whole" ? WholeButton() : Regular()),
- }),
- setup: self => self
- .hook(bar, w => w.toggleClassName("bar-hidden", bar.value === "hidden"))
- .hook(battery, w => {
- w.toggleClassName("charging", battery.charging || battery.charged)
- w.toggleClassName("low", battery.percent < low.value)
- }),
-})
diff --git a/.config/ags/widget/bar/buttons/ColorPicker.ts b/.config/ags/widget/bar/buttons/ColorPicker.ts
deleted file mode 100644
index 5b1f3f6..0000000
--- a/.config/ags/widget/bar/buttons/ColorPicker.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import PanelButton from "../PanelButton"
-import colorpicker from "service/colorpicker"
-import Gdk from "gi://Gdk"
-
-const css = (color: string) => `
-* {
- background-color: ${color};
- color: transparent;
-}
-*:hover {
- color: white;
- text-shadow: 2px 2px 3px rgba(0,0,0,.8);
-}`
-
-export default () => {
- const menu = Widget.Menu({
- class_name: "colorpicker",
- children: colorpicker.bind("colors").as(c => c.map(color => Widget.MenuItem({
- child: Widget.Label(color),
- css: css(color),
- on_activate: () => colorpicker.wlCopy(color),
- }))),
- })
-
- return PanelButton({
- class_name: "color-picker",
- child: Widget.Icon("color-select-symbolic"),
- tooltip_text: colorpicker.bind("colors").as(v => `${v.length} colors`),
- on_clicked: colorpicker.pick,
- on_secondary_click: self => {
- if (colorpicker.colors.length === 0)
- return
-
- menu.popup_at_widget(self, Gdk.Gravity.SOUTH, Gdk.Gravity.NORTH, null)
- },
- })
-}
diff --git a/.config/ags/widget/bar/buttons/Date.ts b/.config/ags/widget/bar/buttons/Date.ts
deleted file mode 100644
index 44c2540..0000000
--- a/.config/ags/widget/bar/buttons/Date.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { clock } from "lib/variables"
-import PanelButton from "../PanelButton"
-import options from "options"
-
-const { format, action } = options.bar.date
-const time = Utils.derive([clock, format], (c, f) => c.format(f) || "")
-
-export default () => PanelButton({
- window: "datemenu",
- on_clicked: action.bind(),
- child: Widget.Label({
- justification: "center",
- label: time.bind(),
- }),
-})
diff --git a/.config/ags/widget/bar/buttons/Launcher.ts b/.config/ags/widget/bar/buttons/Launcher.ts
deleted file mode 100644
index f3fee6b..0000000
--- a/.config/ags/widget/bar/buttons/Launcher.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-import PanelButton from "../PanelButton"
-import options from "options"
-import nix from "service/nix"
-
-const { icon, label, action } = options.bar.launcher
-
-function Spinner() {
- const child = Widget.Icon({
- icon: icon.icon.bind(),
- class_name: Utils.merge([
- icon.colored.bind(),
- nix.bind("ready"),
- ], (c, r) => `${c ? "colored" : ""} ${r ? "" : "spinning"}`),
- css: `
- @keyframes spin {
- to { -gtk-icon-transform: rotate(1turn); }
- }
-
- image.spinning {
- animation-name: spin;
- animation-duration: 1s;
- animation-timing-function: linear;
- animation-iteration-count: infinite;
- }
- `,
- })
-
- return Widget.Revealer({
- transition: "slide_left",
- child,
- reveal_child: Utils.merge([
- icon.icon.bind(),
- nix.bind("ready"),
- ], (i, r) => Boolean(i || r)),
- })
-}
-
-export default () => PanelButton({
- window: "launcher",
- on_clicked: action.bind(),
- child: Widget.Box([
- Spinner(),
- Widget.Label({
- class_name: label.colored.bind().as(c => c ? "colored" : ""),
- visible: label.label.bind().as(v => !!v),
- label: label.label.bind(),
- }),
- ]),
-})
diff --git a/.config/ags/widget/bar/buttons/Media.ts b/.config/ags/widget/bar/buttons/Media.ts
deleted file mode 100644
index b3aab61..0000000
--- a/.config/ags/widget/bar/buttons/Media.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-import { type MprisPlayer } from "types/service/mpris"
-import PanelButton from "../PanelButton"
-import options from "options"
-import icons from "lib/icons"
-import { icon } from "lib/utils"
-
-const mpris = await Service.import("mpris")
-const { length, direction, preferred, monochrome, format } = options.bar.media
-
-const getPlayer = (name = preferred.value) =>
- mpris.getPlayer(name) || mpris.players[0] || null
-
-const Content = (player: MprisPlayer) => {
- const revealer = Widget.Revealer({
- click_through: true,
- visible: length.bind().as(l => l > 0),
- transition: direction.bind().as(d => `slide_${d}` as const),
- setup: self => {
- let current = ""
- self.hook(player, () => {
- if (current === player.track_title)
- return
-
- current = player.track_title
- self.reveal_child = true
- Utils.timeout(3000, () => {
- !self.is_destroyed && (self.reveal_child = false)
- })
- })
- },
- child: Widget.Label({
- truncate: "end",
- max_width_chars: length.bind().as(n => n > 0 ? n : -1),
- label: Utils.merge([
- player.bind("track_title"),
- player.bind("track_artists"),
- format.bind(),
- ], () => `${format}`
- .replace("{title}", player.track_title)
- .replace("{artists}", player.track_artists.join(", "))
- .replace("{artist}", player.track_artists[0] || "")
- .replace("{album}", player.track_album)
- .replace("{name}", player.name)
- .replace("{identity}", player.identity),
- ),
- }),
- })
-
- const playericon = Widget.Icon({
- icon: Utils.merge([player.bind("entry"), monochrome.bind()], (entry => {
- const name = `${entry}${monochrome.value ? "-symbolic" : ""}`
- return icon(name, icons.fallback.audio)
- })),
- })
-
- return Widget.Box({
- attribute: { revealer },
- children: direction.bind().as(d => d === "right"
- ? [playericon, revealer] : [revealer, playericon]),
- })
-}
-
-export default () => {
- let player = getPlayer()
-
- const btn = PanelButton({
- class_name: "media",
- child: Widget.Icon(icons.fallback.audio),
- })
-
- const update = () => {
- player = getPlayer()
- btn.visible = !!player
-
- if (!player)
- return
-
- const content = Content(player)
- const { revealer } = content.attribute
- btn.child = content
- btn.on_primary_click = () => { player.playPause() }
- btn.on_secondary_click = () => { player.playPause() }
- btn.on_scroll_up = () => { player.next() }
- btn.on_scroll_down = () => { player.previous() }
- btn.on_hover = () => { revealer.reveal_child = true }
- btn.on_hover_lost = () => { revealer.reveal_child = false }
- }
-
- return btn
- .hook(preferred, update)
- .hook(mpris, update, "notify::players")
-}
diff --git a/.config/ags/widget/bar/buttons/Messages.ts b/.config/ags/widget/bar/buttons/Messages.ts
deleted file mode 100644
index a8971e9..0000000
--- a/.config/ags/widget/bar/buttons/Messages.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import icons from "lib/icons"
-import PanelButton from "../PanelButton"
-import options from "options"
-
-const n = await Service.import("notifications")
-const notifs = n.bind("notifications")
-const action = options.bar.messages.action.bind()
-
-export default () => PanelButton({
- class_name: "messages",
- on_clicked: action,
- visible: notifs.as(n => n.length > 0),
- child: Widget.Box([
- Widget.Icon(icons.notifications.message),
- ]),
-})
diff --git a/.config/ags/widget/bar/buttons/PowerMenu.ts b/.config/ags/widget/bar/buttons/PowerMenu.ts
deleted file mode 100644
index 4432ade..0000000
--- a/.config/ags/widget/bar/buttons/PowerMenu.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import icons from "lib/icons"
-import PanelButton from "../PanelButton"
-import options from "options"
-
-const { monochrome, action } = options.bar.powermenu
-
-export default () => PanelButton({
- window: "powermenu",
- on_clicked: action.bind(),
- child: Widget.Icon(icons.powermenu.shutdown),
- setup: self => self.hook(monochrome, () => {
- self.toggleClassName("colored", !monochrome.value)
- self.toggleClassName("box")
- }),
-})
diff --git a/.config/ags/widget/bar/buttons/ScreenRecord.ts b/.config/ags/widget/bar/buttons/ScreenRecord.ts
deleted file mode 100644
index 1d6eb36..0000000
--- a/.config/ags/widget/bar/buttons/ScreenRecord.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import PanelButton from "../PanelButton"
-import screenrecord from "service/screenrecord"
-import icons from "lib/icons"
-
-export default () => PanelButton({
- class_name: "recorder",
- on_clicked: () => screenrecord.stop(),
- visible: screenrecord.bind("recording"),
- child: Widget.Box({
- children: [
- Widget.Icon(icons.recorder.recording),
- Widget.Label({
- label: screenrecord.bind("timer").as(time => {
- const sec = time % 60
- const min = Math.floor(time / 60)
- return `${min}:${sec < 10 ? "0" + sec : sec}`
- }),
- }),
- ],
- }),
-})
diff --git a/.config/ags/widget/bar/buttons/SysTray.ts b/.config/ags/widget/bar/buttons/SysTray.ts
deleted file mode 100644
index 9f569d1..0000000
--- a/.config/ags/widget/bar/buttons/SysTray.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-import { type TrayItem } from "types/service/systemtray"
-import PanelButton from "../PanelButton"
-import Gdk from "gi://Gdk"
-import options from "options"
-
-const systemtray = await Service.import("systemtray")
-const { ignore } = options.bar.systray
-
-const SysTrayItem = (item: TrayItem) => PanelButton({
- class_name: "tray-item",
- child: Widget.Icon({ icon: item.bind("icon") }),
- tooltip_markup: item.bind("tooltip_markup"),
- setup: self => {
- const { menu } = item
- if (!menu)
- return
-
- const id = menu.connect("popped-up", () => {
- self.toggleClassName("active")
- menu.connect("notify::visible", () => {
- self.toggleClassName("active", menu.visible)
- })
- menu.disconnect(id!)
- })
-
- self.connect("destroy", () => menu.disconnect(id))
- },
-
- on_primary_click: btn => item.menu?.popup_at_widget(
- btn, Gdk.Gravity.SOUTH, Gdk.Gravity.NORTH, null),
-
- on_secondary_click: btn => item.menu?.popup_at_widget(
- btn, Gdk.Gravity.SOUTH, Gdk.Gravity.NORTH, null),
-})
-
-export default () => Widget.Box()
- .bind("children", systemtray, "items", i => i
- .filter(({ id }) => !ignore.value.includes(id))
- .map(SysTrayItem))
diff --git a/.config/ags/widget/bar/buttons/SystemIndicators.ts b/.config/ags/widget/bar/buttons/SystemIndicators.ts
deleted file mode 100644
index cc98548..0000000
--- a/.config/ags/widget/bar/buttons/SystemIndicators.ts
+++ /dev/null
@@ -1,107 +0,0 @@
-import PanelButton from '../PanelButton';
-import icons from 'lib/icons';
-import asusctl from 'service/asusctl';
-
-const notifications = await Service.import('notifications');
-const bluetooth = await Service.import('bluetooth');
-const audio = await Service.import('audio');
-const network = await Service.import('network');
-const powerprof = await Service.import('powerprofiles');
-
-const ProfileIndicator = () => {
- const visible = asusctl.available ? asusctl.bind('profile').as(p => p !== 'Balanced') : powerprof.bind('active_profile').as(p => p !== 'balanced');
-
- const icon = asusctl.available ? asusctl.bind('profile').as(p => icons.asusctl.profile[p]) : powerprof.bind('active_profile').as(p => icons.powerprofile[p]);
-
- return Widget.Icon({ visible, icon });
-};
-
-const ModeIndicator = () => {
- if (!asusctl.available) {
- return Widget.Icon({
- setup(self) {
- Utils.idle(() => (self.visible = false));
- },
- });
- }
-
- return Widget.Icon({
- visible: asusctl.bind('mode').as(m => m !== 'Hybrid'),
- icon: asusctl.bind('mode').as(m => icons.asusctl.mode[m]),
- });
-};
-
-const MicrophoneIndicator = () =>
- Widget.Icon()
- .hook(audio, self => (self.visible = audio.recorders.length > 0 || audio.microphone.is_muted || false))
- .hook(audio.microphone, self => {
- const vol = audio.microphone.is_muted ? 0 : audio.microphone.volume;
- const { muted, low, medium, high } = icons.audio.mic;
- const cons = [
- [67, high],
- [34, medium],
- [1, low],
- [0, muted],
- ] as const;
- self.icon = cons.find(([n]) => n <= vol * 100)?.[1] || '';
- });
-
-const DNDIndicator = () =>
- Widget.Icon({
- visible: notifications.bind('dnd'),
- icon: icons.notifications.silent,
- });
-
-const BluetoothIndicator = () =>
- Widget.Overlay({
- class_name: 'bluetooth',
- passThrough: true,
- child: Widget.Icon({
- icon: icons.bluetooth.enabled,
- visible: bluetooth.bind('enabled'),
- }),
- overlay: Widget.Label({
- hpack: 'end',
- vpack: 'start',
- label: bluetooth.bind('connected_devices').as(c => `${c.length}`),
- visible: bluetooth.bind('connected_devices').as(c => c.length > 0),
- }),
- });
-
-const NetworkIndicator = () =>
- Widget.Icon().hook(network, self => {
- const icon = network[network.primary || 'wifi']?.icon_name;
- self.icon = icon || '';
- self.visible = !!icon;
- });
-
-const AudioIndicator = () =>
- Widget.Icon().hook(audio.speaker, self => {
- const vol = audio.speaker.is_muted ? 0 : audio.speaker.volume;
- const { muted, low, medium, high, overamplified } = icons.audio.volume;
- const cons = [
- [101, overamplified],
- [67, high],
- [34, medium],
- [1, low],
- [0, muted],
- ] as const;
- self.icon = cons.find(([n]) => n <= vol * 100)?.[1] || '';
- });
-
-export default () =>
- PanelButton({
- window: 'quicksettings',
- on_clicked: () => App.toggleWindow('quicksettings'),
- on_scroll_up: () => (audio.speaker.volume += 0.02),
- on_scroll_down: () => (audio.speaker.volume -= 0.02),
- child: Widget.Box([
- //ProfileIndicator(),
- ModeIndicator(),
- DNDIndicator(),
- BluetoothIndicator(),
- MicrophoneIndicator(),
- AudioIndicator(),
- NetworkIndicator(),
- ]),
- });
diff --git a/.config/ags/widget/bar/buttons/Taskbar.ts b/.config/ags/widget/bar/buttons/Taskbar.ts
deleted file mode 100644
index b9c65fa..0000000
--- a/.config/ags/widget/bar/buttons/Taskbar.ts
+++ /dev/null
@@ -1,90 +0,0 @@
-import { launchApp, icon } from "lib/utils"
-import icons from "lib/icons"
-import options from "options"
-import PanelButton from "../PanelButton"
-
-const hyprland = await Service.import("hyprland")
-const apps = await Service.import("applications")
-const { monochrome, exclusive, iconSize } = options.bar.taskbar
-const { position } = options.bar
-
-const focus = (address: string) => hyprland.messageAsync(
- `dispatch focuswindow address:${address}`)
-
-const DummyItem = (address: string) => Widget.Box({
- attribute: { address },
- visible: false,
-})
-
-const AppItem = (address: string) => {
- const client = hyprland.getClient(address)
- if (!client || client.class === "")
- return DummyItem(address)
-
- const app = apps.list.find(app => app.match(client.class))
-
- const btn = PanelButton({
- class_name: "panel-button",
- tooltip_text: Utils.watch(client.title, hyprland, () =>
- hyprland.getClient(address)?.title || "",
- ),
- on_primary_click: () => focus(address),
- on_middle_click: () => app && launchApp(app),
- child: Widget.Icon({
- size: iconSize.bind(),
- icon: monochrome.bind().as(m => icon(
- (app?.icon_name || client.class) + (m ? "-symbolic" : ""),
- icons.fallback.executable + (m ? "-symbolic" : ""),
- )),
- }),
- })
-
- return Widget.Box(
- {
- attribute: { address },
- visible: Utils.watch(true, [exclusive, hyprland], () => {
- return exclusive.value
- ? hyprland.active.workspace.id === client.workspace.id
- : true
- }),
- },
- Widget.Overlay({
- child: btn,
- pass_through: true,
- overlay: Widget.Box({
- className: "indicator",
- hpack: "center",
- vpack: position.bind().as(p => p === "top" ? "start" : "end"),
- setup: w => w.hook(hyprland, () => {
- w.toggleClassName("active", hyprland.active.client.address === address)
- }),
- }),
- }),
- )
-}
-
-function sortItems<T extends { attribute: { address: string } }>(arr: T[]) {
- return arr.sort(({ attribute: a }, { attribute: b }) => {
- const aclient = hyprland.getClient(a.address)!
- const bclient = hyprland.getClient(b.address)!
- return aclient.workspace.id - bclient.workspace.id
- })
-}
-
-export default () => Widget.Box({
- class_name: "taskbar",
- children: sortItems(hyprland.clients.map(c => AppItem(c.address))),
- setup: w => w
- .hook(hyprland, (w, address?: string) => {
- if (typeof address === "string")
- w.children = w.children.filter(ch => ch.attribute.address !== address)
- }, "client-removed")
- .hook(hyprland, (w, address?: string) => {
- if (typeof address === "string")
- w.children = sortItems([...w.children, AppItem(address)])
- }, "client-added")
- .hook(hyprland, (w, event?: string) => {
- if (event === "movewindow")
- w.children = sortItems(w.children)
- }, "event"),
-})
diff --git a/.config/ags/widget/bar/buttons/Workspaces.ts b/.config/ags/widget/bar/buttons/Workspaces.ts
deleted file mode 100644
index a59f61b..0000000
--- a/.config/ags/widget/bar/buttons/Workspaces.ts
+++ /dev/null
@@ -1,66 +0,0 @@
-import PanelButton from '../PanelButton';
-import options from 'options';
-import { sh, range } from 'lib/utils';
-
-const hyprland = await Service.import('hyprland');
-const { workspaces } = options.bar.workspaces;
-
-const dispatch = arg => {
- sh(`hyprctl dispatch workspace ${arg}`);
-};
-
-const Workspaces = ws =>
- Widget.Box({
- children: range(ws || 20).map(i =>
- Widget.Label({
- attribute: i,
- vpack: 'center',
- label: `${i}`,
- setup: self => {
- const updateState = () => {
- const monitorData = JSON.parse(hyprland.message('j/monitors'));
- const activeWorkspaceId = monitorData[0]?.activeWorkspace?.id;
- const workspaceData = hyprland.getWorkspace(i);
-
- if (activeWorkspaceId !== undefined) {
- self.toggleClassName('active', activeWorkspaceId === i);
- }
- self.toggleClassName('occupied', (workspaceData?.windows || 0) > 0);
- };
-
- // Hook to Hyprland for updates
- self.hook(hyprland, updateState);
-
- // Initial update
- updateState();
- },
- }),
- ),
- setup: box => {
- box.hook(hyprland, () => {
- const monitorData = JSON.parse(hyprland.message('j/monitors'));
- const activeWorkspaceId = monitorData[0]?.activeWorkspace?.id;
-
- if (activeWorkspaceId !== undefined) {
- for (const btn of box.children) {
- const workspaceId = btn.attribute;
- btn.toggleClassName('active', workspaceId === activeWorkspaceId);
-
- if (ws === 0) {
- btn.visible = hyprland.workspaces.some(workspace => workspace.id === workspaceId);
- }
- }
- }
- });
- },
- });
-
-export default () =>
- PanelButton({
- window: 'overview',
- class_name: 'workspaces',
- on_scroll_up: () => dispatch('m+1'),
- on_scroll_down: () => dispatch('m-1'),
- on_clicked: () => App.toggleWindow('overview'),
- child: workspaces.bind().as(Workspaces),
- });
diff --git a/.config/ags/widget/bar/screencorner.scss b/.config/ags/widget/bar/screencorner.scss
deleted file mode 100644
index 93cd459..0000000
--- a/.config/ags/widget/bar/screencorner.scss
+++ /dev/null
@@ -1,51 +0,0 @@
-$_shadow-size: $padding;
-$_radius: $radius * $hyprland-gaps-multiplier;
-$_margin: 99px;
-
-window.screen-corner {
- box.shadow {
- margin-right: $_margin * -1;
- margin-left: $_margin * -1;
-
- @if $shadows {
- box-shadow: inset 0 0 $_shadow-size 0 transparent;
- }
-
- @if $bar-position =='top' {
- margin-bottom: $_margin * -1;
- }
-
- @if $bar-position =='bottom' {
- margin-top: $_margin * -1;
- }
- }
-
- box.border {
- @if $bar-position =='top' {
- border-top: $border-width none $bg;
- //border-top: $border-width solid $bg;
- }
-
- @if $bar-position =='bottom' {
- border-bottom: $border-width solid $bg;
- }
-
- margin-right: $_margin;
- margin-left: $_margin;
- }
-
- box.corner {
- box-shadow: 0 0 0 $border-width $border-color;
- }
-
- &.corners {
- box.border {
- border-radius: if($radius>0, $radius * $hyprland-gaps-multiplier, 0);
- box-shadow: 0 0 0 $_radius $bg;
- }
-
- box.corner {
- border-radius: if($radius>0, $radius * $hyprland-gaps-multiplier, 0);
- }
- }
-}
diff --git a/.config/ags/widget/datemenu/DateColumn.ts b/.config/ags/widget/datemenu/DateColumn.ts
deleted file mode 100644
index a462302..0000000
--- a/.config/ags/widget/datemenu/DateColumn.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-import { clock, uptime } from 'lib/variables';
-import GLib from 'gi://GLib';
-import Gtk from 'gi://Gtk';
-
-function up(up: number) {
- const h = Math.floor(up / 60);
- const m = Math.floor(up % 60);
- return `uptime: ${h}:${m < 10 ? '0' + m : m}`;
-}
-
-export default () =>
- Widget.Box({
- vertical: true,
- class_name: 'date-column vertical',
- children: [
- Widget.Box({
- class_name: 'clock-box',
- vertical: true,
- children: [
- Widget.Label({
- class_name: 'clock',
- label: clock.bind().as(t => t.format('%H:%M')!),
- }),
- Widget.Label({
- class_name: 'uptime',
- label: uptime.bind().as(up),
- }),
- ],
- }),
- Widget.Box({
- class_name: 'calendar',
- children: [
- (() => {
- const calendar = Widget.Calendar({
- hexpand: true,
- hpack: 'center',
- });
-
- // Get today's date and mark it
- const today = new Date();
- calendar.select_day(today.getDate());
- calendar.select_month(today.getMonth(), today.getFullYear());
- calendar.mark_day(today.getDate()); // This should trigger styling
-
- // Prevent scrolling from triggering GNOME Calendar
- const eventBox = Widget.EventBox({
- child: calendar,
- onPrimaryClick: () => {
- GLib.spawn_command_line_async('gnome-calendar');
- },
- });
-
- return eventBox;
- })(),
- ],
- }),
- ],
- });
diff --git a/.config/ags/widget/datemenu/DateMenu.ts b/.config/ags/widget/datemenu/DateMenu.ts
deleted file mode 100644
index f7fdf6d..0000000
--- a/.config/ags/widget/datemenu/DateMenu.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import PopupWindow from "widget/PopupWindow"
-import NotificationColumn from "./NotificationColumn"
-import DateColumn from "./DateColumn"
-import options from "options"
-
-const { bar, datemenu } = options
-const pos = bar.position.bind()
-const layout = Utils.derive([bar.position, datemenu.position], (bar, qs) =>
- `${bar}-${qs}` as const,
-)
-
-const Settings = () => Widget.Box({
- class_name: "datemenu horizontal",
- vexpand: false,
- children: [
- NotificationColumn(),
- Widget.Separator({ orientation: 1 }),
- DateColumn(),
- ],
-})
-
-const DateMenu = () => PopupWindow({
- name: "datemenu",
- exclusivity: "exclusive",
- transition: pos.as(pos => pos === "top" ? "slide_down" : "slide_up"),
- layout: layout.value,
- child: Settings(),
-})
-
-export function setupDateMenu() {
- App.addWindow(DateMenu())
- layout.connect("changed", () => {
- App.removeWindow("datemenu")
- App.addWindow(DateMenu())
- })
-}
diff --git a/.config/ags/widget/datemenu/NotificationColumn.ts b/.config/ags/widget/datemenu/NotificationColumn.ts
deleted file mode 100644
index 07d6829..0000000
--- a/.config/ags/widget/datemenu/NotificationColumn.ts
+++ /dev/null
@@ -1,113 +0,0 @@
-import { type Notification as Notif } from "types/service/notifications"
-import Notification from "widget/notifications/Notification"
-import options from "options"
-import icons from "lib/icons"
-
-const notifications = await Service.import("notifications")
-const notifs = notifications.bind("notifications")
-
-const Animated = (n: Notif) => Widget.Revealer({
- transition_duration: options.transition.value,
- transition: "slide_down",
- child: Notification(n),
- setup: self => Utils.timeout(options.transition.value, () => {
- if (!self.is_destroyed)
- self.reveal_child = true
- }),
-})
-
-const ClearButton = () => Widget.Button({
- on_clicked: notifications.clear,
- sensitive: notifs.as(n => n.length > 0),
- child: Widget.Box({
- children: [
- Widget.Label("Clear "),
- Widget.Icon({
- icon: notifs.as(n => icons.trash[n.length > 0 ? "full" : "empty"]),
- }),
- ],
- }),
-})
-
-const Header = () => Widget.Box({
- class_name: "header",
- children: [
- Widget.Label({ label: "Notifications", hexpand: true, xalign: 0 }),
- ClearButton(),
- ],
-})
-
-const NotificationList = () => {
- const map: Map<number, ReturnType<typeof Animated>> = new Map
- const box = Widget.Box({
- vertical: true,
- children: notifications.notifications.map(n => {
- const w = Animated(n)
- map.set(n.id, w)
- return w
- }),
- visible: notifs.as(n => n.length > 0),
- })
-
- function remove(_: unknown, id: number) {
- const n = map.get(id)
- if (n) {
- n.reveal_child = false
- Utils.timeout(options.transition.value, () => {
- n.destroy()
- map.delete(id)
- })
- }
- }
-
- return box
- .hook(notifications, remove, "closed")
- .hook(notifications, (_, id: number) => {
- if (id !== undefined) {
- if (map.has(id))
- remove(null, id)
-
- const n = notifications.getNotification(id)!
-
- const w = Animated(n)
- map.set(id, w)
- box.children = [w, ...box.children]
- }
- }, "notified")
-}
-
-const Placeholder = () => Widget.Box({
- class_name: "placeholder",
- vertical: true,
- vpack: "center",
- hpack: "center",
- vexpand: true,
- hexpand: true,
- visible: notifs.as(n => n.length === 0),
- children: [
- Widget.Icon(icons.notifications.silent),
- Widget.Label("Your inbox is empty"),
- ],
-})
-
-export default () => Widget.Box({
- class_name: "notifications",
- css: options.notifications.width.bind().as(w => `min-width: ${w}px`),
- vertical: true,
- children: [
- Header(),
- Widget.Scrollable({
- vexpand: true,
- hscroll: "never",
- class_name: "notification-scrollable",
- child: Widget.Box({
- class_name: "notification-list vertical",
- vertical: true,
- children: [
- NotificationList(),
- Placeholder(),
- ],
- }),
- }),
- ],
-})
diff --git a/.config/ags/widget/datemenu/datemenu.scss b/.config/ags/widget/datemenu/datemenu.scss
deleted file mode 100644
index 6fd9257..0000000
--- a/.config/ags/widget/datemenu/datemenu.scss
+++ /dev/null
@@ -1,110 +0,0 @@
-@import "../notifications/notifications.scss";
-
-@mixin calendar {
- @include widget;
- padding: $padding*2 $padding*2 0;
-
- calendar {
- all: unset;
-
- &.button {
- @include button($flat: true);
- }
-
- &:selected {
- box-shadow: inset 0 -8px 0 0 transparentize($primary-bg, 0.5),
- inset 0 0 0 1px $primary-bg;
- border-radius: $radius*0.6;
- }
-
- &.header {
- background-color: transparent;
- border: none;
- color: transparentize($fg, 0.5);
- }
-
- &.highlight {
- background-color: transparent;
- color: transparentize($primary-bg, 0.5);
- }
-
- &:indeterminate {
- color: transparentize($fg, 0.9);
- }
-
- font-size: 1.1em;
- padding: .2em;
- }
-}
-
-window#datemenu .datemenu {
- @include floating-widget;
-
- .notifications {
- .header {
- margin-bottom: $spacing;
- margin-right: $spacing;
-
- >label {
- margin-left: $radius * .5;
- }
-
- button {
- @include button;
- padding: $padding*.7 $padding;
- }
- }
-
- .notification-scrollable {
- @include scrollable($top: true, $bottom: true);
- }
-
- .notification-list {
- margin-right: $spacing;
- }
-
- .notification {
- @include notification;
- @include widget;
- padding: $padding;
- margin-bottom: $spacing;
- }
-
- .placeholder {
- image {
- font-size: 7em;
- }
-
- label {
- font-size: 1.2em;
- }
- }
- }
-
-
- separator {
- background-color: $popover-border-color;
- border-radius: $radius;
- margin-right: $spacing;
- }
-
- .datemenu {
- @include spacing;
- }
-
- .clock-box {
- padding: $padding;
-
- .clock {
- font-size: 5em;
- }
-
- .uptime {
- color: transparentize($fg, 0.2);
- }
- }
-
- .calendar {
- @include calendar;
- }
-}
diff --git a/.config/ags/widget/desktop/Desktop.ts b/.config/ags/widget/desktop/Desktop.ts
deleted file mode 100644
index f711967..0000000
--- a/.config/ags/widget/desktop/Desktop.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import options from "options"
-import { matugen } from "lib/matugen"
-const mpris = await Service.import("mpris")
-
-const pref = () => options.bar.media.preferred.value
-
-export default (monitor: number) => Widget.Window({
- monitor,
- layer: "bottom",
- name: `desktop${monitor}`,
- class_name: "desktop",
- anchor: ["top", "bottom", "left", "right"],
- child: Widget.Box({
- expand: true,
- css: options.theme.dark.primary.bg.bind().as(c => `
- transition: 500ms;
- background-color: ${c}`),
- child: Widget.Box({
- class_name: "wallpaper",
- expand: true,
- vpack: "center",
- hpack: "center",
- setup: self => self
- .hook(mpris, () => {
- const img = mpris.getPlayer(pref())!.cover_path
- matugen("image", img)
- Utils.timeout(500, () => self.css = `
- background-image: url('${img}');
- background-size: contain;
- background-repeat: no-repeat;
- transition: 200ms;
- min-width: 700px;
- min-height: 700px;
- border-radius: 30px;
- box-shadow: 25px 25px 30px 0 rgba(0,0,0,0.5);`,
- )
- }),
- }),
- }),
-})
diff --git a/.config/ags/widget/dock/Dock.ts b/.config/ags/widget/dock/Dock.ts
deleted file mode 100644
index c55f89f..0000000
--- a/.config/ags/widget/dock/Dock.ts
+++ /dev/null
@@ -1,150 +0,0 @@
-import { launchApp } from "lib/utils";
-import options from "options";
-import * as Gtk from "gi://Gtk?version=3.0";
-import { type ButtonProps } from "types/widgets/button";
-import { type BoxProps } from "types/widgets/box";
-
-const hyprland = await Service.import("hyprland");
-const applications = await Service.import("applications");
-
-const focus = (address: string) => hyprland.messageAsync(`dispatch focuswindow address:${address}`);
-
-const AppButton = ({ icon, pinned = false, term, ...rest }: ButtonProps & { term?: string }): Gtk.Button & ButtonProps => {
- const { iconSize } = options.dock;
-
- const buttonBox = Widget.Box({
- class_name: 'box',
- child: Widget.Icon({
- icon,
- size: iconSize,
- }),
- });
-
- const button = Widget.Button({
- ...rest,
- class_name: '',
- child: pinned ? buttonBox : Widget.Overlay({
- child: buttonBox,
- pass_through: false,
- overlays: [],
- }),
- });
-
- return Object.assign(button, {});
-};
-
-const createAppButton = ({ app, term, ...params }) => {
- return AppButton({
- icon: app.icon_name || '',
- term,
- ...params,
- });
-};
-
-const filterValidClients = (clients: any[]) => {
- return clients.filter(client => (
- client.mapped &&
- [client.class, client.title, client.initialClass].every(prop => typeof prop === 'string' && prop !== '')
- ));
-};
-
-const Taskbar = (): Gtk.Box & BoxProps => {
- const addedApps = new Set<string>();
-
- const updateTaskbar = (clients: any[]) => {
- const validClients = filterValidClients(clients);
-
- const focusedAddress = hyprland?.active.client?.address;
- const running = validClients.filter(client => client.mapped);
- const focused = running.find(client => client.address === focusedAddress);
-
- return validClients.map(client => {
- if (![client.class, client.title, client.initialClass].every(prop => typeof prop === 'string' && prop !== '')) {
- return null;
- }
-
- if (addedApps.has(client.title)) {
- return null;
- }
-
- for (const appName of options.dock.pinnedApps.value) {
- if (!appName || typeof appName !== 'string') {
- continue;
- }
-
- if (client.class.includes(appName) || client.title.includes(appName)
- || client.initialClass.includes(appName)) {
- return null;
- }
- }
-
- const matchingApp = applications?.list.find(app => (
- app.match(client.title) || app.match(client.class) || app.match(client.initialClass)
- ));
-
- if (matchingApp) {
- addedApps.add(client.title);
- return createAppButton({
- app: matchingApp,
- term: matchingApp.title,
- on_primary_click: () => {
- const clickAddress = client.address || focusedAddress;
- clickAddress && focus(clickAddress);
- },
- on_secondary_click: () => launchApp(matchingApp),
- });
- a
- }
- return null;
- });
- };
-
- return Widget.Box({
- vertical: false,
- })
- .bind('children', hyprland, 'clients', updateTaskbar);
-};
-
-const PinnedApps = (): Gtk.Box & BoxProps => {
- const updatePinnedApps = (pinnedApps: string[]) => {
- return pinnedApps
- .map(term => ({ app: applications?.query(term)?.[0], term }))
- .filter(({ app }) => app)
- .map(({ app, term = true }) => createAppButton({
- app,
- term,
- pinned: true,
- on_primary_click: () => {
- const matchingClients = hyprland?.clients.filter(client => (
- typeof client.class === 'string' &&
- typeof client.title === 'string' &&
- typeof client.initialClass === 'string' &&
- (client.class.includes(term) || client.title.includes(term) || client.initialClass.includes(term))
- ));
-
- if (matchingClients.length > 0) {
- const { address } = matchingClients[0];
- address && focus(address);
- } else {
- launchApp(app);
- }
- },
- on_secondary_click: () => launchApp(app),
- }));
- };
-
- return Widget.Box({
- class_name: 'pins',
- vertical: false,
- homogeneous: true,
- })
- .bind('children', options.dock.pinnedApps, 'value', updatePinnedApps);
-};
-
-const Dock = (): Gtk.Box & BoxProps => Widget.Box({
- class_name: 'dock',
- vertical: false,
- children: [PinnedApps(), Taskbar()],
-});
-
-export default Dock;
diff --git a/.config/ags/widget/dock/FloatingDock.ts b/.config/ags/widget/dock/FloatingDock.ts
deleted file mode 100644
index 369f56f..0000000
--- a/.config/ags/widget/dock/FloatingDock.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-import options from 'options';
-import Dock from './Dock.ts';
-const hyprland = await Service.import('hyprland');
-const apps = await Service.import('applications');
-
-const { Gdk, Gtk } = imports.gi;
-import type Gtk from 'gi://Gtk?version=3.0';
-import { type WindowProps } from 'types/widgets/window';
-import { type RevealerProps } from 'types/widgets/revealer';
-import { type EventBoxProps } from 'types/widgets/eventbox';
-
-/** @param {number} monitor */
-const FloatingDock = (monitor: number): Gtk.Window & WindowProps => {
- const update = () => {
- const ws = Hyprland.getWorkspace(Hyprland.active.workspace.id);
- if (Hyprland.getMonitor(monitor)?.name === ws?.monitor) self.reveal_child = ws?.windows === 0;
- };
- const revealer: Gtk.Revealer & RevealerProps = Widget.Revealer({
- transition: 'slide_up',
- transitionDuration: 90,
- child: Dock(),
- setup: self => self.hook(hyprland, update, 'client-added').hook(hyprland, update, 'client-removed').hook(hyprland.active.workspace, update),
- });
-
- const window = Widget.Window({
- monitor,
- //halign: 'fill',
- halign: 'end',
- //layer: "overlay",
- layer: 'dock',
- name: `dock${monitor}`,
- click_through: false,
- class_name: 'floating-dock',
- // class_name: 'floating-dock-no-gap',
- // class_name: "f-dock-wrap",
-
- typeHint: Gdk.WindowTypeHint.DOCK,
- exclusivity: 'false',
-
- anchor: ['bottom'],
- child: Widget.Box({
- vertical: false,
- halign: 'bottom',
- hpack: 'start',
- children: [
- revealer,
- Widget.Box({
- class_name: 'padding',
- css: 'padding: 9px; margin: 0;',
- vertical: false,
- halign: 'bottom',
- hpack: 'start',
- }),
- ],
- }),
- });
-
- window
- .on('enter-notify-event', () => {
- revealer.reveal_child = true;
- })
- .on('leave-notify-event', () => {
- revealer.reveal_child = false;
- })
- .bind('visible', options.bar.position, 'value', v => v !== 'left');
-
- return window;
-};
-
-export default FloatingDock;
diff --git a/.config/ags/widget/dock/ToolBox.ts b/.config/ags/widget/dock/ToolBox.ts
deleted file mode 100644
index 51fda72..0000000
--- a/.config/ags/widget/dock/ToolBox.ts
+++ /dev/null
@@ -1,122 +0,0 @@
-import options from "options";
-import { sh } from "lib/utils";
-import * as Gtk from "gi://Gtk?version=3.0";
-import { type ButtonProps } from "types/widgets/button";
-import { type BoxProps } from "types/widgets/box";
-
-const hyprland = await Service.import("hyprland");
-const { icons } = options.dock.toolbox;
-const buttonToggles = {};
-
-const dispatch = (action: string, arg: string) => {
- //console.log(`Performing action: ${action} with argument: ${arg}`);
- sh(`hyprctl dispatch ${action} ${arg}`);
-};
-
-const keyword = (action: string, arg: string) => {
- //console.log(`Performing action: ${action} with argument: ${arg}`);
- sh(`hyprctl keyword ${action} ${arg}`);
-};
-
-const ToggleSwitch = (buttonIndex, actionOn, argOn, actionOff, argOff, actionExec) => {
- buttonToggles[buttonIndex] = !buttonToggles[buttonIndex];
- const { action, arg } = buttonToggles[buttonIndex] ? { action: actionOn, arg: argOn } : { action: actionOff, arg: argOff };
- actionExec(action, arg);
-};
-
-const ToggleOnMulti = (buttonIndex, actionOn, argOn, actionOff, argOff, actionExec) => {
- buttonToggles[buttonIndex] = !buttonToggles[buttonIndex];
- if (buttonToggles[buttonIndex]) {
- actionOn.forEach(({ action, arg }) => {
- actionExec(action, arg);
- });
- } else {
- actionExec(actionOff, argOff);
- }
-};
-
-const execAction = (trigger, actionIndex, actionOn, argOn, actionOff, argOff, action, arg, actionExec) => {
- switch (trigger) {
- case 'toggleOn-multi':
- ToggleOnMulti(actionIndex, actionOn, argOn, actionOff, argOff, actionExec);
- break;
- case 'toggle-switch':
- ToggleSwitch(actionIndex, actionOn, argOn, actionOff, argOff, actionExec);
- break;
- case 'oneshot':
- actionExec(action, arg);
- break;
- default:
- break;
- }
-};
-
-const buttonConfigs = [
- { actionExec: dispatch, trigger: 'oneshot', actionIndex: 0, action: 'killactive', arg: '' },
- { actionExec: dispatch, trigger: 'oneshot', actionIndex: 1, action: 'exec hyprctl', arg: 'kill' },
- {
- actionExec: keyword,
- trigger: 'toggle-switch',
- actionIndex: 2,
- actionOn: 'monitor', argOn: 'eDP-1,2736x1824,0x0,0,transform,1',
- actionOff: 'monitor', argOff: 'eDP-1,2736x1824,0x0,0,transform,0'
- },
- { actionExec: dispatch, trigger: 'oneshot', actionIndex: 3, action: 'workspace', arg: 'r-1' },
- { actionExec: dispatch, trigger: 'oneshot', actionIndex: 4, action: 'workspace', arg: 'r+1' },
- { actionExec: dispatch, trigger: 'oneshot', actionIndex: 5, action: 'movewindow', arg: 'l' },
- { actionExec: dispatch, trigger: 'oneshot', actionIndex: 6, action: 'movewindow', arg: 'r' },
- { actionExec: dispatch, trigger: 'oneshot', actionIndex: 7, action: 'movewindow', arg: 'u' },
- { actionExec: dispatch, trigger: 'oneshot', actionIndex: 8, action: 'movewindow', arg: 'd' },
- { actionExec: dispatch, trigger: 'oneshot', actionIndex: 9, action: 'swapnext', arg: 'next' },
- { actionExec: dispatch, trigger: 'oneshot', actionIndex: 10, action: 'togglesplit', arg: '' },
- {
- actionExec: dispatch,
- trigger: 'toggleOn-multi',
- actionIndex: 11,
- actionOn: [
- { action: 'setfloating', arg: 'active' },
- { action: 'resizeactive', arg: 'exact 90% 90%' },
- { action: 'centerwindow', arg: '' },
- ],
- actionOff: 'settiled', argOff: 'active'
- },
- { actionExec: dispatch, trigger: 'oneshot', actionIndex: 12, action: 'pin', arg: '' },
- { actionExec: dispatch, trigger: 'oneshot', actionIndex: 13, action: 'fullscreen', arg: '0' },
- {
- actionExec: dispatch,
- trigger: 'toggle-switch',
- actionIndex: 14,
- actionOn: 'exec', argOn: 'wvctl 1',
- actionOff: 'exec', argOff: 'wvctl 0'
- },
-];
-
-const ToolBox = () => {
- const ToolBoxButtons = () => {
- const buttons = buttonConfigs.map(({ actionIndex, actionOn, argOn, actionOff, argOff, actionExec, trigger, action, arg }) => {
- const execActionWrapper = () => execAction(trigger, actionIndex, actionOn, argOn, actionOff, argOff, action, arg, actionExec);
-
- return Widget.Button({
- child: Widget.Icon({
- icon: icons[actionIndex].bind(),
- }),
- on_clicked: execActionWrapper,
- });
- });
-
- return Widget.Box({
- vertical: true,
- homogeneous: true,
- children: buttons,
- });
- };
-
- return Widget.Box({
- class_name: "toolbox",
- vertical: true,
- homogeneous: true,
- children: [ToolBoxButtons()],
- });
-};
-
-export default ToolBox;
diff --git a/.config/ags/widget/dock/ToolBoxDock.ts b/.config/ags/widget/dock/ToolBoxDock.ts
deleted file mode 100644
index 21beaeb..0000000
--- a/.config/ags/widget/dock/ToolBoxDock.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import options from "options";
-import ToolBox from "./ToolBox.ts";
-const hyprland = await Service.import("hyprland");
-const apps = await Service.import("applications");
-
-import type Gtk from "gi://Gtk?version=3.0";
-import { type WindowProps } from "types/widgets/window";
-import { type RevealerProps } from "types/widgets/revealer";
-import { type EventBoxProps } from "types/widgets/eventbox";
-
-/** @param {number} monitor */
-const ToolBoxDock = (monitor: number): Gtk.Window & WindowProps => {
-
- const revealer: Gtk.Revealer & RevealerProps = Widget.Revealer({
- transition: 'slide_left',
- transitionDuration: 50,
- child: ToolBox(),
- });
-
- const window = Widget.Window({
- monitor,
- halign: 'fill',
- layer: "overlay",
- name: `toolbox${monitor}`,
- click_through: false,
- class_name: 'floating-toolbox',
- anchor: ['right'],
- child: Widget.Box({
- vertical: true,
- halign: 'top',
- hpack: 'fill',
- children: [
- revealer,
- Widget.Box({
- class_name: 'padding',
- css: 'padding: 14px;',
- vertical: true,
- halign: 'top',
- hpack: 'fill',
- }),
- ],
- }),
- });
-
- window
- .on('enter-notify-event', () => {
- revealer.reveal_child = true;
- })
- .on('leave-notify-event', () => {
- revealer.reveal_child = false;
- })
- .bind('visible', options.bar.position, 'value', v => v !== 'left');
-
- return window;
-};
-
-export default ToolBoxDock;
diff --git a/.config/ags/widget/dock/dock.scss b/.config/ags/widget/dock/dock.scss
deleted file mode 100644
index 9dc6256..0000000
--- a/.config/ags/widget/dock/dock.scss
+++ /dev/null
@@ -1,73 +0,0 @@
-@use 'sass:color';
-
-.floating-dock {
- padding-left: 0.2rem;
- padding-right: 0.2rem;
- padding-top: 0.3rem;
- padding-bottom: 0.3rem;
- border-radius: 1rem;
-}
-
-.dock {
- // @include floating-widget;
- border-radius: $radius;
- background-color: transparentize($bg, 0.07);
- min-width: 0;
- padding: 6;
-
- // Common styles for both PinnedApps and Taskbar buttons
- button {
- @include button($flat: true);
- border-radius: 4;
- padding: 2;
-
- .box {
- margin: 0em;
- min-width: 1em;
- min-height: 0em;
- padding: 0;
- }
-
- image {
- margin: 0px;
- }
-
- .indicator {
- background-color: transparentize($primary-bg, 0.3);
- border-radius: $radius;
- min-height: 1pt;
- min-width: 16pt;
- margin: 1pt;
- }
- }
-}
-
-.toolbox {
- // @include floating-widget;
- border-radius: $radius;
- background-color: transparentize($bg, 0.07);
- min-width: 0;
- padding: 6;
-
- // Common styles for both PinnedApps and Taskbar buttons
- button {
- @include button($flat: true);
- border-radius: 0;
- padding: 0;
-
- image {
- margin: 0px;
- font-size: 32px;
- }
-
- &:hover,
- &:active,
- &:focus {
- // Override hover, active, and focus styles for buttons in .toolbox
- background-color: transparent;
- border: none;
- box-shadow: none;
- outline: none;
- }
- }
-}
diff --git a/.config/ags/widget/launcher/AppLauncher.ts b/.config/ags/widget/launcher/AppLauncher.ts
deleted file mode 100644
index 08258de..0000000
--- a/.config/ags/widget/launcher/AppLauncher.ts
+++ /dev/null
@@ -1,125 +0,0 @@
-import { type Application } from 'types/service/applications';
-import { launchApp, icon } from 'lib/utils';
-import options from 'options';
-import icons from 'lib/icons';
-
-const apps = await Service.import('applications');
-const { query } = apps;
-const { iconSize } = options.launcher.apps;
-
-const QuickAppButton = (app: Application) =>
- Widget.Button({
- hexpand: true,
- tooltip_text: app.name,
- on_clicked: () => {
- App.closeWindow('launcher');
- launchApp(app);
- },
- child: Widget.Icon({
- size: iconSize.bind(),
- icon: icon(app.icon_name, icons.fallback.executable),
- }),
- });
-
-const AppItem = (app: Application) => {
- const title = Widget.Label({
- class_name: 'title',
- label: app.name,
- hexpand: true,
- xalign: 0,
- vpack: 'center',
- truncate: 'end',
- });
-
- const description = Widget.Label({
- class_name: 'description',
- label: app.description || '',
- hexpand: true,
- wrap: true,
- max_width_chars: 30,
- xalign: 0,
- justification: 'left',
- vpack: 'center',
- });
-
- const appicon = Widget.Icon({
- icon: icon(app.icon_name, icons.fallback.executable),
- size: iconSize.bind(),
- });
-
- const textBox = Widget.Box({
- vertical: true,
- vpack: 'center',
- children: app.description ? [title, description] : [title],
- });
-
- return Widget.Button({
- class_name: 'app-item',
- attribute: { app },
- child: Widget.Box({
- children: [appicon, textBox],
- }),
- on_clicked: () => {
- App.closeWindow('launcher');
- launchApp(app);
- },
- });
-};
-export function Favorites() {
- const favs = options.launcher.apps.favorites.bind();
- return Widget.Revealer({
- visible: favs.as(f => f.length > 0),
- child: Widget.Box({
- vertical: true,
- children: favs.as(favs =>
- favs.flatMap(fs => [
- Widget.Separator(),
- Widget.Box({
- class_name: 'quicklaunch horizontal',
- children: fs
- .map(f => query(f)?.[0])
- .filter(f => f)
- .map(QuickAppButton),
- }),
- ]),
- ),
- }),
- });
-}
-
-export function Launcher() {
- const applist = Variable(query(''));
- const max = options.launcher.apps.max;
- let first = applist.value[0];
-
- function SeparatedAppItem(app: Application) {
- return Widget.Revealer({ attribute: { app } }, Widget.Box({ vertical: true }, Widget.Separator(), AppItem(app)));
- }
-
- const list = Widget.Box({
- vertical: true,
- children: applist.bind().as(list => list.map(SeparatedAppItem)),
- setup: self => self.hook(apps, () => (applist.value = query('')), 'notify::frequents'),
- });
-
- return Object.assign(list, {
- filter(text: string | null) {
- first = query(text || '')[0];
- list.children.reduce((i, item) => {
- if (!text || i >= max.value) {
- item.reveal_child = false;
- return i;
- }
- if (item.attribute.app.match(text)) {
- item.reveal_child = true;
- return ++i;
- }
- item.reveal_child = false;
- return i;
- }, 0);
- },
- launchFirst() {
- launchApp(first);
- },
- });
-}
diff --git a/.config/ags/widget/launcher/Launcher.ts b/.config/ags/widget/launcher/Launcher.ts
deleted file mode 100644
index 90b4d58..0000000
--- a/.config/ags/widget/launcher/Launcher.ts
+++ /dev/null
@@ -1,134 +0,0 @@
-import { type Binding } from 'lib/utils';
-import PopupWindow, { Padding } from 'widget/PopupWindow';
-import icons from 'lib/icons';
-import options from 'options';
-import nix from 'service/nix';
-import * as AppLauncher from './AppLauncher';
-import * as NixRun from './NixRun';
-import * as ShRun from './ShRun';
-
-const { width, margin } = options.launcher;
-const isnix = nix.available;
-
-function Launcher() {
- const favs = AppLauncher.Favorites();
- const applauncher = AppLauncher.Launcher();
- const sh = ShRun.ShRun();
- const shicon = ShRun.Icon();
- const nix = NixRun.NixRun();
- const nixload = NixRun.Spinner();
-
- function HelpButton(cmd: string, desc: string | Binding<string>) {
- return Widget.Box(
- { vertical: true },
- Widget.Separator(),
- Widget.Button(
- {
- class_name: 'help',
- on_clicked: () => {
- entry.grab_focus();
- entry.text = `:${cmd} `;
- entry.set_position(-1);
- },
- },
- Widget.Box([
- Widget.Label({
- class_name: 'name',
- label: `:${cmd}`,
- }),
- Widget.Label({
- hexpand: true,
- hpack: 'end',
- class_name: 'description',
- label: desc,
- }),
- ]),
- ),
- );
- }
-
- const help = Widget.Revealer({
- child: Widget.Box(
- { vertical: true },
- HelpButton('sh', 'run a binary'),
- isnix
- ? HelpButton(
- 'nx',
- options.launcher.nix.pkgs.bind().as(pkg => `run a nix package from ${pkg}`),
- )
- : Widget.Box(),
- ),
- });
-
- const entry = Widget.Entry({
- hexpand: true,
- primary_icon_name: icons.ui.search,
- on_accept: ({ text }) => {
- if (text?.startsWith(':nx')) nix.run(text.substring(3));
- else if (text?.startsWith(':sh')) sh.run(text.substring(3));
- else applauncher.launchFirst();
-
- App.toggleWindow('launcher');
- entry.text = '';
- },
- on_change: ({ text }) => {
- text ||= '';
- favs.reveal_child = text === '';
- help.reveal_child = text.split(' ').length === 1 && text?.startsWith(':');
-
- if (text?.startsWith(':nx')) nix.filter(text.substring(3));
- else nix.filter('');
-
- if (text?.startsWith(':sh')) sh.filter(text.substring(3));
- else sh.filter('');
-
- if (!text?.startsWith(':')) applauncher.filter(text);
- },
- });
-
- function focus() {
- entry.text = '';
- entry.set_position(-1);
- entry.select_region(0, -1);
- entry.grab_focus();
- favs.reveal_child = true;
- }
-
- const layout = Widget.Box({
- css: width.bind().as(v => `min-width: ${v}pt;`),
- class_name: 'launcher',
- vertical: true,
- vpack: 'start',
- setup: self =>
- self.hook(App, (_, win, visible) => {
- if (win !== 'launcher') return;
-
- entry.text = '';
- if (visible) focus();
- }),
- children: [
- Widget.Box([entry, nixload, shicon]),
- favs,
- help,
- applauncher,
- //nix,
- sh,
- ],
- });
-
- return Widget.Box(
- { vertical: true, css: 'padding: 1px' },
- Padding('applauncher', {
- css: margin.bind().as(v => `min-height: ${v}pt;`),
- vexpand: false,
- }),
- layout,
- );
-}
-
-export default () =>
- PopupWindow({
- name: 'launcher',
- layout: 'top',
- child: Launcher(),
- });
diff --git a/.config/ags/widget/launcher/NixRun.ts b/.config/ags/widget/launcher/NixRun.ts
deleted file mode 100644
index cec9e09..0000000
--- a/.config/ags/widget/launcher/NixRun.ts
+++ /dev/null
@@ -1,118 +0,0 @@
-import icons from "lib/icons"
-import nix, { type Nixpkg } from "service/nix"
-
-const iconVisible = Variable(false)
-
-function Item(pkg: Nixpkg) {
- const name = Widget.Label({
- class_name: "name",
- label: pkg.name.split(".").at(-1),
- })
-
- const subpkg = pkg.name.includes(".") ? Widget.Label({
- class_name: "description",
- hpack: "end",
- hexpand: true,
- label: ` ${pkg.name.split(".").slice(0, -1).join(".")}`,
- }) : null
-
- const version = Widget.Label({
- class_name: "version",
- label: pkg.version,
- hexpand: true,
- hpack: "end",
- })
-
- const description = pkg.description ? Widget.Label({
- class_name: "description",
- label: pkg.description,
- justification: "left",
- wrap: true,
- hpack: "start",
- max_width_chars: 40,
- }) : null
-
- return Widget.Box(
- {
- attribute: { name: pkg.name },
- vertical: true,
- },
- Widget.Separator(),
- Widget.Button(
- {
- class_name: "nix-item",
- on_clicked: () => {
- nix.run(pkg.name)
- App.closeWindow("launcher")
- },
- },
- Widget.Box(
- { vertical: true },
- Widget.Box([name, version]),
- Widget.Box([
- description as ReturnType<typeof Widget.Label>,
- subpkg as ReturnType<typeof Widget.Label>,
- ]),
- ),
- ),
- )
-}
-
-export function Spinner() {
- const icon = Widget.Icon({
- icon: icons.nix.nix,
- class_name: "spinner",
- css: `
- @keyframes spin {
- to { -gtk-icon-transform: rotate(1turn); }
- }
-
- image.spinning {
- animation-name: spin;
- animation-duration: 1s;
- animation-timing-function: linear;
- animation-iteration-count: infinite;
- }
- `,
- setup: self => self.hook(nix, () => {
- self.toggleClassName("spinning", !nix.ready)
- }),
- })
-
- return Widget.Revealer({
- transition: "slide_left",
- child: icon,
- reveal_child: Utils.merge([
- nix.bind("ready"),
- iconVisible.bind(),
- ], (ready, show) => !ready || show),
- })
-}
-
-export function NixRun() {
- const list = Widget.Box<ReturnType<typeof Item>>({
- vertical: true,
- })
-
- const revealer = Widget.Revealer({
- child: list,
- })
-
- async function filter(term: string) {
- iconVisible.value = Boolean(term)
-
- if (!term)
- revealer.reveal_child = false
-
- if (term.trim()) {
- const found = await nix.query(term)
- list.children = found.map(k => Item(nix.db[k]))
- revealer.reveal_child = true
- }
- }
-
- return Object.assign(revealer, {
- filter,
- run: nix.run,
- })
-}
diff --git a/.config/ags/widget/launcher/ShRun.ts b/.config/ags/widget/launcher/ShRun.ts
deleted file mode 100644
index c4215ef..0000000
--- a/.config/ags/widget/launcher/ShRun.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-import icons from "lib/icons"
-import options from "options"
-import { bash, dependencies } from "lib/utils"
-
-const iconVisible = Variable(false)
-
-const MAX = options.launcher.sh.max
-const BINS = `${Utils.CACHE_DIR}/binaries`
-bash("{ IFS=:; ls -H $PATH; } | sort ")
- .then(bins => Utils.writeFile(bins, BINS))
-
-async function query(filter: string) {
- if (!dependencies("fzf"))
- return [] as string[]
-
- return bash(`cat ${BINS} | fzf -f ${filter} | head -n ${MAX}`)
- .then(str => Array.from(new Set(str.split("\n").filter(i => i)).values()))
- .catch(err => { print(err); return [] })
-}
-
-function run(args: string) {
- Utils.execAsync(args)
- .then(out => {
- print(`:sh ${args.trim()}:`)
- print(out)
- })
- .catch(err => {
- Utils.notify("ShRun Error", err, icons.app.terminal)
- })
-}
-
-function Item(bin: string) {
- return Widget.Box(
- {
- attribute: { bin },
- vertical: true,
- },
- Widget.Separator(),
- Widget.Button({
- child: Widget.Label({
- label: bin,
- hpack: "start",
- }),
- class_name: "sh-item",
- on_clicked: () => {
- Utils.execAsync(bin)
- App.closeWindow("launcher")
- },
- }),
- )
-}
-
-export function Icon() {
- const icon = Widget.Icon({
- icon: icons.app.terminal,
- class_name: "spinner",
- })
-
- return Widget.Revealer({
- transition: "slide_left",
- child: icon,
- reveal_child: iconVisible.bind(),
- })
-}
-
-export function ShRun() {
- const list = Widget.Box<ReturnType<typeof Item>>({
- vertical: true,
- })
-
- const revealer = Widget.Revealer({
- child: list,
- })
-
- async function filter(term: string) {
- iconVisible.value = Boolean(term)
-
- if (!term)
- revealer.reveal_child = false
-
- if (term.trim()) {
- const found = await query(term)
- list.children = found.map(Item)
- revealer.reveal_child = true
- }
- }
-
- return Object.assign(revealer, { filter, run })
-}
diff --git a/.config/ags/widget/launcher/launcher.scss b/.config/ags/widget/launcher/launcher.scss
deleted file mode 100644
index 926abc3..0000000
--- a/.config/ags/widget/launcher/launcher.scss
+++ /dev/null
@@ -1,143 +0,0 @@
-@use "sass:math";
-@use "sass:color";
-
-window#launcher .launcher {
- @include floating_widget;
-
- .quicklaunch {
- @include spacing;
-
- button {
- @include button($flat: true);
- padding: $padding;
- }
- }
-
- entry {
- @include button;
- padding: $padding;
- margin: $spacing;
-
- selection {
- color: color.mix($fg, $bg, 50%);
- background-color: transparent;
- }
-
- label,
- image {
- color: $fg;
- }
- }
-
- image.spinner {
- color: $primary-bg;
- margin-right: $spacing;
- }
-
- separator {
- margin: 4pt 0;
- background-color: $popover-border-color;
- }
-
- button.app-item {
- @include button($flat: true, $reactive: false);
-
- >box {
- @include spacing(0.5);
- }
-
- transition: $transition;
- padding: $padding;
-
- label {
- transition: $transition;
-
- &.title {
- color: $fg;
- }
-
- &.description {
- color: transparentize($fg, 0.3);
- }
- }
-
- image {
- transition: $transition;
- }
-
- &:hover,
- &:focus {
- .title {
- color: $primary-bg;
- }
-
- .description {
- color: transparentize($primary-bg, .4);
- }
-
- image {
- -gtk-icon-shadow: 2px 2px $primary-bg;
- }
- }
-
- &:active {
- background-color: transparentize($primary-bg, 0.5);
- border-radius: $radius;
- box-shadow: inset 0 0 0 $border-width $border-color;
-
- .title {
- color: $fg;
- }
- }
- }
-
- button.help,
- button.nix-item {
- @include button($flat: true, $reactive: false);
- padding: 0 ($padding * .5);
-
- label {
- transition: $transition;
- color: $fg;
- }
-
- .name {
- font-size: 1.2em;
- font-weight: bold;
- }
-
- .description {
- color: transparentize($fg, .3)
- }
-
- &:hover,
- &:focus {
- label {
- text-shadow: $text-shadow;
- }
-
- .name,
- .version {
- color: $primary-bg;
- }
-
- .description {
- color: transparentize($primary-bg, .3)
- }
- }
- }
-
- button.sh-item {
- @include button($flat: true, $reactive: false);
- padding: 0 ($padding * .5);
-
- transition: $transition;
- color: $fg;
-
- &:hover,
- &:focus {
- color: $primary-bg;
- text-shadow: $text-shadow;
- }
- }
-}
diff --git a/.config/ags/widget/notifications/Notification.ts b/.config/ags/widget/notifications/Notification.ts
deleted file mode 100644
index c1c8dd8..0000000
--- a/.config/ags/widget/notifications/Notification.ts
+++ /dev/null
@@ -1,138 +0,0 @@
-import { type Notification } from "types/service/notifications"
-import GLib from "gi://GLib"
-import icons from "lib/icons"
-
-const time = (time: number, format = "%H:%M") => GLib.DateTime
- .new_from_unix_local(time)
- .format(format)
-
-const NotificationIcon = ({ app_entry, app_icon, image }: Notification) => {
- if (image) {
- return Widget.Box({
- vpack: "start",
- hexpand: false,
- class_name: "icon img",
- css: `
- background-image: url("${image}");
- background-size: cover;
- background-repeat: no-repeat;
- background-position: center;
- min-width: 78px;
- min-height: 78px;
- `,
- })
- }
-
- let icon = icons.fallback.notification
- if (Utils.lookUpIcon(app_icon))
- icon = app_icon
-
- if (Utils.lookUpIcon(app_entry || ""))
- icon = app_entry || ""
-
- return Widget.Box({
- vpack: "start",
- hexpand: false,
- class_name: "icon",
- css: `
- min-width: 78px;
- min-height: 78px;
- `,
- child: Widget.Icon({
- icon,
- size: 58,
- hpack: "center", hexpand: true,
- vpack: "center", vexpand: true,
- }),
- })
-}
-
-export default (notification: Notification) => {
- const content = Widget.Box({
- class_name: "content",
- children: [
- NotificationIcon(notification),
- Widget.Box({
- hexpand: true,
- vertical: true,
- children: [
- Widget.Box({
- children: [
- Widget.Label({
- class_name: "title",
- xalign: 0,
- justification: "left",
- hexpand: true,
- max_width_chars: 24,
- truncate: "end",
- wrap: true,
- label: notification.summary.trim(),
- use_markup: true,
- }),
- Widget.Label({
- class_name: "time",
- vpack: "start",
- label: time(notification.time),
- }),
- Widget.Button({
- class_name: "close-button",
- vpack: "start",
- child: Widget.Icon("window-close-symbolic"),
- on_clicked: notification.close,
- }),
- ],
- }),
- Widget.Label({
- class_name: "description",
- hexpand: true,
- use_markup: true,
- xalign: 0,
- justification: "left",
- label: notification.body.trim(),
- max_width_chars: 24,
- wrap: true,
- }),
- ],
- }),
- ],
- })
-
- const actionsbox = notification.actions.length > 0 ? Widget.Revealer({
- transition: "slide_down",
- child: Widget.EventBox({
- child: Widget.Box({
- class_name: "actions horizontal",
- children: notification.actions.map(action => Widget.Button({
- class_name: "action-button",
- on_clicked: () => notification.invoke(action.id),
- hexpand: true,
- child: Widget.Label(action.label),
- })),
- }),
- }),
- }) : null
-
- const eventbox = Widget.EventBox({
- vexpand: false,
- on_primary_click: notification.dismiss,
- on_hover() {
- if (actionsbox)
- actionsbox.reveal_child = true
- },
- on_hover_lost() {
- if (actionsbox)
- actionsbox.reveal_child = true
-
- notification.dismiss()
- },
- child: Widget.Box({
- vertical: true,
- children: actionsbox ? [content, actionsbox] : [content],
- }),
- })
-
- return Widget.Box({
- class_name: `notification ${notification.urgency}`,
- child: eventbox,
- })
-}
diff --git a/.config/ags/widget/notifications/NotificationPopups.ts b/.config/ags/widget/notifications/NotificationPopups.ts
deleted file mode 100644
index a4a2b54..0000000
--- a/.config/ags/widget/notifications/NotificationPopups.ts
+++ /dev/null
@@ -1,90 +0,0 @@
-import Notification from "./Notification"
-import options from "options"
-
-const notifications = await Service.import("notifications")
-const { transition } = options
-const { position } = options.notifications
-const { timeout, idle } = Utils
-
-function Animated(id: number) {
- const n = notifications.getNotification(id)!
- const widget = Notification(n)
-
- const inner = Widget.Revealer({
- transition: "slide_left",
- transition_duration: transition.value,
- child: widget,
- })
-
- const outer = Widget.Revealer({
- transition: "slide_down",
- transition_duration: transition.value,
- child: inner,
- })
-
- const box = Widget.Box({
- hpack: "end",
- child: outer,
- })
-
- idle(() => {
- outer.reveal_child = true
- timeout(transition.value, () => {
- inner.reveal_child = true
- })
- })
-
- return Object.assign(box, {
- dismiss() {
- inner.reveal_child = false
- timeout(transition.value, () => {
- outer.reveal_child = false
- timeout(transition.value, () => {
- box.destroy()
- })
- })
- },
- })
-}
-
-function PopupList() {
- const map: Map<number, ReturnType<typeof Animated>> = new Map
- const box = Widget.Box({
- hpack: "end",
- vertical: true,
- css: options.notifications.width.bind().as(w => `min-width: ${w}px;`),
- })
-
- function remove(_: unknown, id: number) {
- map.get(id)?.dismiss()
- map.delete(id)
- }
-
- return box
- .hook(notifications, (_, id: number) => {
- if (id !== undefined) {
- if (map.has(id))
- remove(null, id)
-
- if (notifications.dnd)
- return
-
- const w = Animated(id)
- map.set(id, w)
- box.children = [w, ...box.children]
- }
- }, "notified")
- .hook(notifications, remove, "dismissed")
- .hook(notifications, remove, "closed")
-}
-
-export default (monitor: number) => Widget.Window({
- monitor,
- name: `notifications${monitor}`,
- anchor: position.bind(),
- class_name: "notifications",
- child: Widget.Box({
- css: "padding: 2px;",
- child: PopupList(),
- }),
-})
diff --git a/.config/ags/widget/notifications/notifications.scss b/.config/ags/widget/notifications/notifications.scss
deleted file mode 100644
index 369932f..0000000
--- a/.config/ags/widget/notifications/notifications.scss
+++ /dev/null
@@ -1,79 +0,0 @@
-@mixin notification() {
- &.critical {
- box-shadow: inset 0 0 0.5em 0 $error-bg;
- }
-
- &:hover button.close-button {
- @include button-hover;
- background-color: transparentize($error-bg, 0.5);
- }
-
- .content {
- .title {
- margin-right: $spacing;
- color: $fg;
- font-size: 1.1em;
- }
-
- .time {
- color: transparentize($fg, 0.2);
- }
-
- .description {
- font-size: 0.9em;
- color: transparentize($fg, 0.2);
- }
-
- .icon {
- border-radius: $radius * 0.8;
- margin-right: $spacing;
-
- &.img {
- border: $border;
- }
- }
- }
-
- box.actions {
- @include spacing(0.5);
- margin-top: $spacing;
-
- button {
- @include button;
- border-radius: $radius * 0.8;
- font-size: 1.2em;
- padding: $padding * 0.7;
- }
- }
-
- button.close-button {
- @include button($flat: true);
- margin-left: $spacing / 2;
- border-radius: $radius * 0.8;
- min-width: 1.2em;
- min-height: 1.2em;
-
- &:hover {
- background-color: transparentize($error-bg, 0.2);
- }
-
- &:active {
- background-image: none;
- background-color: $error-bg;
- }
- }
-}
-
-window.notifications {
- @include unset;
-
- .notification {
- @include notification;
- @include floating-widget;
- border-radius: $radius;
-
- .description {
- min-width: 200px;
- }
- }
-}
diff --git a/.config/ags/widget/osd/OSD.ts b/.config/ags/widget/osd/OSD.ts
deleted file mode 100644
index 8239a08..0000000
--- a/.config/ags/widget/osd/OSD.ts
+++ /dev/null
@@ -1,111 +0,0 @@
-import { icon } from "lib/utils"
-import icons from "lib/icons"
-import Progress from "./Progress"
-import brightness from "service/brightness"
-import options from "options"
-
-const audio = await Service.import("audio")
-const { progress, microphone } = options.osd
-
-const DELAY = 2500
-
-function OnScreenProgress(vertical: boolean) {
- const indicator = Widget.Icon({
- size: 42,
- vpack: "start",
- })
- const progress = Progress({
- vertical,
- width: vertical ? 42 : 300,
- height: vertical ? 300 : 42,
- child: indicator,
- })
-
- const revealer = Widget.Revealer({
- transition: "slide_left",
- child: progress,
- })
-
- let count = 0
- function show(value: number, icon: string) {
- revealer.reveal_child = true
- indicator.icon = icon
- progress.setValue(value)
- count++
- Utils.timeout(DELAY, () => {
- count--
-
- if (count === 0)
- revealer.reveal_child = false
- })
- }
-
- return revealer
- .hook(brightness, () => show(
- brightness.screen,
- icons.brightness.screen,
- ), "notify::screen")
- .hook(brightness, () => show(
- brightness.kbd,
- icons.brightness.keyboard,
- ), "notify::kbd")
- .hook(audio.speaker, () => show(
- audio.speaker.volume,
- icon(audio.speaker.icon_name || "", icons.audio.type.speaker),
- ), "notify::volume")
-}
-
-function MicrophoneMute() {
- const icon = Widget.Icon({
- class_name: "microphone",
- })
-
- const revealer = Widget.Revealer({
- transition: "slide_up",
- child: icon,
- })
-
- let count = 0
- let mute = audio.microphone.stream?.is_muted ?? false
-
- return revealer.hook(audio.microphone, () => Utils.idle(() => {
- if (mute !== audio.microphone.stream?.is_muted) {
- mute = audio.microphone.stream!.is_muted
- icon.icon = icons.audio.mic[mute ? "muted" : "high"]
- revealer.reveal_child = true
- count++
-
- Utils.timeout(DELAY, () => {
- count--
- if (count === 0)
- revealer.reveal_child = false
- })
- }
- }))
-}
-
-export default (monitor: number) => Widget.Window({
- monitor,
- name: `indicator${monitor}`,
- class_name: "indicator",
- layer: "overlay",
- click_through: true,
- anchor: ["right", "left", "top", "bottom"],
- child: Widget.Box({
- css: "padding: 2px;",
- expand: true,
- child: Widget.Overlay(
- { child: Widget.Box({ expand: true }) },
- Widget.Box({
- hpack: progress.pack.h.bind(),
- vpack: progress.pack.v.bind(),
- child: progress.vertical.bind().as(OnScreenProgress),
- }),
- Widget.Box({
- hpack: microphone.pack.h.bind(),
- vpack: microphone.pack.v.bind(),
- child: MicrophoneMute(),
- }),
- ),
- }),
-})
diff --git a/.config/ags/widget/osd/Progress.ts b/.config/ags/widget/osd/Progress.ts
deleted file mode 100644
index bcf27da..0000000
--- a/.config/ags/widget/osd/Progress.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-import type Gtk from "gi://Gtk?version=3.0"
-import GLib from "gi://GLib?version=2.0"
-import { range } from "lib/utils"
-import options from "options"
-
-type ProgressProps = {
- height?: number
- width?: number
- vertical?: boolean
- child: Gtk.Widget
-}
-
-export default ({
- height = 18,
- width = 180,
- vertical = false,
- child,
-}: ProgressProps) => {
- const fill = Widget.Box({
- class_name: "fill",
- hexpand: vertical,
- vexpand: !vertical,
- hpack: vertical ? "fill" : "start",
- vpack: vertical ? "end" : "fill",
- child,
- })
-
- const container = Widget.Box({
- class_name: "progress",
- child: fill,
- css: `
- min-width: ${width}px;
- min-height: ${height}px;
- `,
- })
-
- let fill_size = 0
- let animations: number[] = []
-
- return Object.assign(container, {
- setValue(value: number) {
- if (value < 0)
- return
-
- if (animations.length > 0) {
- for (const id of animations)
- GLib.source_remove(id)
-
- animations = []
- }
-
- const axis = vertical ? "height" : "width"
- const axisv = vertical ? height : width
- const min = vertical ? width : height
- const preferred = (axisv - min) * value + min
-
- if (!fill_size) {
- fill_size = preferred
- fill.css = `min-${axis}: ${preferred}px;`
- return
- }
-
- const frames = options.transition.value / 10
- const goal = preferred - fill_size
- const step = goal / frames
-
- animations = range(frames, 0).map(i => Utils.timeout(5 * i, () => {
- fill_size += step
- fill.css = `min-${axis}: ${fill_size}px`
- animations.shift()
- }))
- },
- })
-}
diff --git a/.config/ags/widget/osd/osd.scss b/.config/ags/widget/osd/osd.scss
deleted file mode 100644
index 33df6d2..0000000
--- a/.config/ags/widget/osd/osd.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-window.indicator {
- .progress {
- @include floating-widget;
- padding: $padding * 0.5;
- border-radius: if($radius >0, calc($radius + $padding * 0.5), 0);
- @debug $radius;
-
- .fill {
- border-radius: $radius;
- background-color: $primary-bg;
- color: $primary-fg;
-
- image {
- -gtk-icon-transform: scale(0.7);
- }
- }
- }
-
- .microphone {
- @include floating-widget;
- margin: $spacing * 2;
- padding: $popover-padding * 2;
- font-size: 58px;
- color: transparentize($fg, 0.1);
- }
-}
diff --git a/.config/ags/widget/overview/Overview.ts b/.config/ags/widget/overview/Overview.ts
deleted file mode 100644
index 8911920..0000000
--- a/.config/ags/widget/overview/Overview.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import PopupWindow from "widget/PopupWindow"
-import Workspace from "./Workspace"
-import options from "options"
-import { range } from "lib/utils"
-
-const hyprland = await Service.import("hyprland")
-
-const Overview = (ws: number) => Widget.Box({
- class_name: "overview horizontal",
- children: ws > 0
- ? range(ws).map(Workspace)
- : hyprland.workspaces
- .map(({ id }) => Workspace(id))
- .sort((a, b) => a.attribute.id - b.attribute.id),
-
- setup: w => {
- if (ws > 0)
- return
-
- w.hook(hyprland, (w, id?: string) => {
- if (id === undefined)
- return
-
- w.children = w.children
- .filter(ch => ch.attribute.id !== Number(id))
- }, "workspace-removed")
- w.hook(hyprland, (w, id?: string) => {
- if (id === undefined)
- return
-
- w.children = [...w.children, Workspace(Number(id))]
- .sort((a, b) => a.attribute.id - b.attribute.id)
- }, "workspace-added")
- },
-})
-
-export default () => PopupWindow({
- name: "overview",
- layout: "center",
- child: options.overview.workspaces.bind().as(Overview),
-})
diff --git a/.config/ags/widget/overview/Window.ts b/.config/ags/widget/overview/Window.ts
deleted file mode 100644
index 02f71eb..0000000
--- a/.config/ags/widget/overview/Window.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import { type Client } from "types/service/hyprland"
-import { createSurfaceFromWidget, icon } from "lib/utils"
-import Gdk from "gi://Gdk"
-import Gtk from "gi://Gtk?version=3.0"
-import options from "options"
-import icons from "lib/icons"
-
-const monochrome = options.overview.monochromeIcon
-const TARGET = [Gtk.TargetEntry.new("text/plain", Gtk.TargetFlags.SAME_APP, 0)]
-const hyprland = await Service.import("hyprland")
-const apps = await Service.import("applications")
-const dispatch = (args: string) => hyprland.messageAsync(`dispatch ${args}`)
-
-export default ({ address, size: [w, h], class: c, title }: Client) => Widget.Button({
- class_name: "client",
- attribute: { address },
- tooltip_text: `${title}`,
- child: Widget.Icon({
- css: options.overview.scale.bind().as(v => `
- min-width: ${(v / 100) * w}px;
- min-height: ${(v / 100) * h}px;
- `),
- icon: monochrome.bind().as(m => {
- const app = apps.list.find(app => app.match(c))
- if (!app)
- return icons.fallback.executable + (m ? "-symbolic" : "")
-
-
- return icon(
- app.icon_name + (m ? "-symbolic" : ""),
- icons.fallback.executable + (m ? "-symbolic" : ""),
- )
- }),
- }),
- on_secondary_click: () => dispatch(`closewindow address:${address}`),
- on_clicked: () => {
- dispatch(`focuswindow address:${address}`)
- App.closeWindow("overview")
- },
- setup: btn => btn
- .on("drag-data-get", (_w, _c, data) => data.set_text(address, address.length))
- .on("drag-begin", (_, context) => {
- Gtk.drag_set_icon_surface(context, createSurfaceFromWidget(btn))
- btn.toggleClassName("hidden", true)
- })
- .on("drag-end", () => btn.toggleClassName("hidden", false))
- .drag_source_set(Gdk.ModifierType.BUTTON1_MASK, TARGET, Gdk.DragAction.COPY),
-})
diff --git a/.config/ags/widget/overview/Workspace.ts b/.config/ags/widget/overview/Workspace.ts
deleted file mode 100644
index 1b8d60b..0000000
--- a/.config/ags/widget/overview/Workspace.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-import Window from "./Window"
-import Gdk from "gi://Gdk"
-import Gtk from "gi://Gtk?version=3.0"
-import options from "options"
-
-const TARGET = [Gtk.TargetEntry.new("text/plain", Gtk.TargetFlags.SAME_APP, 0)]
-const scale = (size: number) => (options.overview.scale.value / 100) * size
-const hyprland = await Service.import("hyprland")
-
-const dispatch = (args: string) => hyprland.messageAsync(`dispatch ${args}`)
-
-const size = (id: number) => {
- const def = { h: 1080, w: 1920 }
- const ws = hyprland.getWorkspace(id)
- if (!ws)
- return def
-
- const mon = hyprland.getMonitor(ws.monitorID)
- return mon ? { h: mon.height, w: mon.width } : def
-}
-
-export default (id: number) => {
- const fixed = Widget.Fixed()
-
- // TODO: early return if position is unchaged
- async function update() {
- const json = await hyprland.messageAsync("j/clients").catch(() => null)
- if (!json)
- return
-
- fixed.get_children().forEach(ch => ch.destroy())
- const clients = JSON.parse(json) as typeof hyprland.clients
- clients
- .filter(({ workspace }) => workspace.id === id)
- .forEach(c => {
- const x = c.at[0] - (hyprland.getMonitor(c.monitor)?.x || 0)
- const y = c.at[1] - (hyprland.getMonitor(c.monitor)?.y || 0)
- c.mapped && fixed.put(Window(c), scale(x), scale(y))
- })
- fixed.show_all()
- }
-
- return Widget.Box({
- attribute: { id },
- tooltipText: `${id}`,
- class_name: "workspace",
- vpack: "center",
- css: options.overview.scale.bind().as(v => `
- min-width: ${(v / 100) * size(id).w}px;
- min-height: ${(v / 100) * size(id).h}px;
- `),
- setup(box) {
- box.hook(options.overview.scale, update)
- box.hook(hyprland, update, "notify::clients")
- box.hook(hyprland.active.client, update)
- box.hook(hyprland.active.workspace, () => {
- box.toggleClassName("active", hyprland.active.workspace.id === id)
- })
- },
- child: Widget.EventBox({
- expand: true,
- on_primary_click: () => {
- App.closeWindow("overview")
- dispatch(`workspace ${id}`)
- },
- setup: eventbox => {
- eventbox.drag_dest_set(Gtk.DestDefaults.ALL, TARGET, Gdk.DragAction.COPY)
- eventbox.connect("drag-data-received", (_w, _c, _x, _y, data) => {
- const address = new TextDecoder().decode(data.get_data())
- dispatch(`movetoworkspacesilent ${id},address:${address}`)
- })
- },
- child: fixed,
- }),
- })
-}
diff --git a/.config/ags/widget/overview/overview.scss b/.config/ags/widget/overview/overview.scss
deleted file mode 100644
index 4665b52..0000000
--- a/.config/ags/widget/overview/overview.scss
+++ /dev/null
@@ -1,34 +0,0 @@
-window#overview .overview {
- @include floating-widget;
- @include spacing;
-
- .workspace {
- &.active>widget {
- border-color: $primary-bg;
- }
-
- >widget {
- @include widget;
- border-radius: if($radius ==0, 0, $radius + $padding);
-
- &:hover {
- background-color: $hover-bg;
- }
-
- &:drop(active) {
- border-color: $primary-bg;
- }
- }
- }
-
- .client {
- @include button;
- border-radius: $radius;
- margin: $padding;
-
- &.hidden {
- @include hidden;
- transition: 0;
- }
- }
-}
diff --git a/.config/ags/widget/powermenu/PowerMenu.ts b/.config/ags/widget/powermenu/PowerMenu.ts
deleted file mode 100644
index fe0a0e9..0000000
--- a/.config/ags/widget/powermenu/PowerMenu.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-import PopupWindow from "widget/PopupWindow"
-import powermenu, { type Action } from "service/powermenu"
-import icons from "lib/icons"
-import options from "options"
-import type Gtk from "gi://Gtk?version=3.0"
-
-const { layout, labels } = options.powermenu
-
-const SysButton = (action: Action, label: string) => Widget.Button({
- on_clicked: () => powermenu.action(action),
- child: Widget.Box({
- vertical: true,
- class_name: "system-button",
- children: [
- Widget.Icon(icons.powermenu[action]),
- Widget.Label({
- label,
- visible: labels.bind(),
- }),
- ],
- }),
-})
-
-export default () => PopupWindow({
- name: "powermenu",
- transition: "crossfade",
- child: Widget.Box<Gtk.Widget>({
- class_name: "powermenu horizontal",
- setup: self => self.hook(layout, () => {
- self.toggleClassName("box", layout.value === "box")
- self.toggleClassName("line", layout.value === "line")
- }),
- children: layout.bind().as(layout => {
- switch (layout) {
- case "line": return [
- SysButton("shutdown", "Shutdown"),
- SysButton("logout", "Log Out"),
- SysButton("reboot", "Reboot"),
- SysButton("sleep", "Sleep"),
- ]
- case "box": return [
- Widget.Box(
- { vertical: true },
- SysButton("shutdown", "Shutdown"),
- SysButton("logout", "Log Out"),
- ),
- Widget.Box(
- { vertical: true },
- SysButton("reboot", "Reboot"),
- SysButton("sleep", "Sleep"),
- ),
- ]
- }
- }),
- }),
-})
diff --git a/.config/ags/widget/powermenu/Verification.ts b/.config/ags/widget/powermenu/Verification.ts
deleted file mode 100644
index e85c81a..0000000
--- a/.config/ags/widget/powermenu/Verification.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import PopupWindow from "widget/PopupWindow"
-import powermenu from "service/powermenu"
-
-export default () => PopupWindow({
- name: "verification",
- transition: "crossfade",
- child: Widget.Box({
- class_name: "verification",
- vertical: true,
- children: [
- Widget.Box({
- class_name: "text-box",
- vertical: true,
- children: [
- Widget.Label({
- class_name: "title",
- label: powermenu.bind("title"),
- }),
- Widget.Label({
- class_name: "desc",
- label: "Are you sure?",
- }),
- ],
- }),
- Widget.Box({
- class_name: "buttons horizontal",
- vexpand: true,
- vpack: "end",
- homogeneous: true,
- children: [
- Widget.Button({
- child: Widget.Label("No"),
- on_clicked: () => App.toggleWindow("verification"),
- setup: self => self.hook(App, (_, name: string, visible: boolean) => {
- if (name === "verification" && visible)
- self.grab_focus()
- }),
- }),
- Widget.Button({
- child: Widget.Label("Yes"),
- on_clicked: () => Utils.exec(powermenu.cmd),
- }),
- ],
- }),
- ],
- }),
-})
diff --git a/.config/ags/widget/powermenu/powermenu.scss b/.config/ags/widget/powermenu/powermenu.scss
deleted file mode 100644
index d5ce0de..0000000
--- a/.config/ags/widget/powermenu/powermenu.scss
+++ /dev/null
@@ -1,110 +0,0 @@
-window#powermenu,
-window#verification {
- // the fraction has to be more than hyprland ignorealpha
- background-color: rgba(0, 0, 0, .4);
-}
-
-window#verification .verification {
- @include floating-widget;
- padding: $popover-padding * 1.5;
- min-width: 300px;
- min-height: 100px;
-
- .text-box {
- margin-bottom: $spacing;
-
- .title {
- font-size: 1.6em;
- }
-
- .desc {
- color: transparentize($fg, 0.1);
- font-size: 1.1em;
- }
- }
-
- .buttons {
- @include spacing;
- margin-top: $padding;
-
- button {
- @include button;
- font-size: 1.5em;
- padding: $padding;
- }
- }
-}
-
-window#powermenu .powermenu {
- @include floating-widget;
-
- &.line {
- padding: $popover-padding * 1.5;
-
- button {
- padding: $popover-padding;
- }
-
- label {
- margin-bottom: $spacing * -.5;
- }
- }
-
- &.box {
- padding: $popover-padding * 2;
-
- button {
- padding: $popover-padding * 1.5;
- }
-
- label {
- margin-bottom: $spacing * -1;
- }
- }
-
- button {
- @include unset;
-
- image {
- @include button;
- border-radius: $radius + ($popover-padding * 1.4);
- min-width: 1.7em;
- min-height: 1.7em;
- font-size: 4em;
- }
-
- label,
- image {
- color: transparentize($fg, 0.1);
- }
-
- label {
- margin-top: $spacing * .3;
- }
-
- &:hover {
- image {
- @include button-hover;
- }
-
- label {
- color: $fg;
- }
- }
-
- &:focus image {
- @include button-focus;
- }
-
- &:active image {
- @include button-active;
- }
-
- &:focus,
- &:active {
- label {
- color: $primary-bg;
- }
- }
- }
-}
diff --git a/.config/ags/widget/quicksettings/QuickSettings.ts b/.config/ags/widget/quicksettings/QuickSettings.ts
deleted file mode 100644
index 2c0d6ac..0000000
--- a/.config/ags/widget/quicksettings/QuickSettings.ts
+++ /dev/null
@@ -1,84 +0,0 @@
-import type Gtk from "gi://Gtk?version=3.0"
-import { ProfileSelector, ProfileToggle } from "./widgets/PowerProfile"
-import { Header } from "./widgets/Header"
-import { Volume, Microhone, SinkSelector, AppMixer } from "./widgets/Volume"
-import { Brightness } from "./widgets/Brightness"
-import { NetworkToggle, WifiSelection } from "./widgets/Network"
-import { BluetoothToggle, BluetoothDevices } from "./widgets/Bluetooth"
-import { DND } from "./widgets/DND"
-import { DarkModeToggle } from "./widgets/DarkMode"
-import { MicMute } from "./widgets/MicMute"
-import { Media } from "./widgets/Media"
-import PopupWindow from "widget/PopupWindow"
-import options from "options"
-
-const { bar, quicksettings } = options
-const media = (await Service.import("mpris")).bind("players")
-const layout = Utils.derive([bar.position, quicksettings.position], (bar, qs) =>
- `${bar}-${qs}` as const,
-)
-
-const Row = (
- toggles: Array<() => Gtk.Widget> = [],
- menus: Array<() => Gtk.Widget> = [],
-) => Widget.Box({
- vertical: true,
- children: [
- Widget.Box({
- homogeneous: true,
- class_name: "row horizontal",
- children: toggles.map(w => w()),
- }),
- ...menus.map(w => w()),
- ],
-})
-
-const Settings = () => Widget.Box({
- vertical: true,
- class_name: "quicksettings vertical",
- css: quicksettings.width.bind().as(w => `min-width: ${w}px;`),
- children: [
- Header(),
- Widget.Box({
- class_name: "sliders-box vertical",
- vertical: true,
- children: [
- Row(
- [Volume],
- [SinkSelector, AppMixer],
- ),
- Microhone(),
- Brightness(),
- ],
- }),
- Row(
- [NetworkToggle, BluetoothToggle],
- [WifiSelection, BluetoothDevices],
- ),
- Row(
- [ProfileToggle, DarkModeToggle],
- [ProfileSelector],
- ),
- Row([MicMute, DND]),
- Widget.Box({
- visible: media.as(l => l.length > 0),
- child: Media(),
- }),
- ],
-})
-
-const QuickSettings = () => PopupWindow({
- name: "quicksettings",
- exclusivity: "exclusive",
- transition: bar.position.bind().as(pos => pos === "top" ? "slide_down" : "slide_up"),
- layout: layout.value,
- child: Settings(),
-})
-
-export function setupQuickSettings() {
- App.addWindow(QuickSettings())
- layout.connect("changed", () => {
- App.removeWindow("quicksettings")
- App.addWindow(QuickSettings())
- })
-}
diff --git a/.config/ags/widget/quicksettings/ToggleButton.ts b/.config/ags/widget/quicksettings/ToggleButton.ts
deleted file mode 100644
index 62a2e67..0000000
--- a/.config/ags/widget/quicksettings/ToggleButton.ts
+++ /dev/null
@@ -1,154 +0,0 @@
-import { type Props as IconProps } from "types/widgets/icon"
-import { type Props as LabelProps } from "types/widgets/label"
-import type GObject from "gi://GObject?version=2.0"
-import type Gtk from "gi://Gtk?version=3.0"
-import icons from "lib/icons"
-
-export const opened = Variable("")
-App.connect("window-toggled", (_, name: string, visible: boolean) => {
- if (name === "quicksettings" && !visible)
- Utils.timeout(500, () => opened.value = "")
-})
-
-export const Arrow = (name: string, activate?: false | (() => void)) => {
- let deg = 0
- let iconOpened = false
- const icon = Widget.Icon(icons.ui.arrow.right).hook(opened, () => {
- if (opened.value === name && !iconOpened || opened.value !== name && iconOpened) {
- const step = opened.value === name ? 10 : -10
- iconOpened = !iconOpened
- for (let i = 0; i < 9; ++i) {
- Utils.timeout(15 * i, () => {
- deg += step
- icon.setCss(`-gtk-icon-transform: rotate(${deg}deg);`)
- })
- }
- }
- })
- return Widget.Button({
- child: icon,
- class_name: "arrow",
- on_clicked: () => {
- opened.value = opened.value === name ? "" : name
- if (typeof activate === "function")
- activate()
- },
- })
-}
-
-type ArrowToggleButtonProps = {
- name: string
- icon: IconProps["icon"]
- label: LabelProps["label"]
- activate: () => void
- deactivate: () => void
- activateOnArrow?: boolean
- connection: [GObject.Object, () => boolean]
-}
-export const ArrowToggleButton = ({
- name,
- icon,
- label,
- activate,
- deactivate,
- activateOnArrow = true,
- connection: [service, condition],
-}: ArrowToggleButtonProps) => Widget.Box({
- class_name: "toggle-button",
- setup: self => self.hook(service, () => {
- self.toggleClassName("active", condition())
- }),
- children: [
- Widget.Button({
- child: Widget.Box({
- hexpand: true,
- children: [
- Widget.Icon({
- class_name: "icon",
- icon,
- }),
- Widget.Label({
- class_name: "label",
- max_width_chars: 10,
- truncate: "end",
- label,
- }),
- ],
- }),
- on_clicked: () => {
- if (condition()) {
- deactivate()
- if (opened.value === name)
- opened.value = ""
- } else {
- activate()
- }
- },
- }),
- Arrow(name, activateOnArrow && activate),
- ],
-})
-
-type MenuProps = {
- name: string
- icon: IconProps["icon"]
- title: LabelProps["label"]
- content: Gtk.Widget[]
-}
-export const Menu = ({ name, icon, title, content }: MenuProps) => Widget.Revealer({
- transition: "slide_down",
- reveal_child: opened.bind().as(v => v === name),
- child: Widget.Box({
- class_names: ["menu", name],
- vertical: true,
- children: [
- Widget.Box({
- class_name: "title-box",
- children: [
- Widget.Icon({
- class_name: "icon",
- icon,
- }),
- Widget.Label({
- class_name: "title",
- truncate: "end",
- label: title,
- }),
- ],
- }),
- Widget.Separator(),
- Widget.Box({
- vertical: true,
- class_name: "content vertical",
- children: content,
- }),
- ],
- }),
-})
-
-type SimpleToggleButtonProps = {
- icon: IconProps["icon"]
- label: LabelProps["label"]
- toggle: () => void
- connection: [GObject.Object, () => boolean]
-}
-export const SimpleToggleButton = ({
- icon,
- label,
- toggle,
- connection: [service, condition],
-}: SimpleToggleButtonProps) => Widget.Button({
- on_clicked: toggle,
- class_name: "simple-toggle",
- setup: self => self.hook(service, () => {
- self.toggleClassName("active", condition())
- }),
- child: Widget.Box([
- Widget.Icon({ icon }),
- Widget.Label({
- max_width_chars: 10,
- truncate: "end",
- label,
- }),
- ]),
-})
diff --git a/.config/ags/widget/quicksettings/quicksettings.scss b/.config/ags/widget/quicksettings/quicksettings.scss
deleted file mode 100644
index bd18ff1..0000000
--- a/.config/ags/widget/quicksettings/quicksettings.scss
+++ /dev/null
@@ -1,177 +0,0 @@
-window#quicksettings .quicksettings {
- @include floating-widget;
- @include spacing;
-
- padding: $popover-padding * 1.4;
-
- .avatar {
- @include widget;
- border-radius: $radius * 3;
- }
-
- .header {
- @include spacing(.5);
- color: transparentize($fg, .15);
-
- button {
- @include button;
- padding: $padding;
-
- image {
- font-size: 1.4em;
- }
- }
- }
-
- .sliders-box {
- @include widget;
- padding: $padding;
-
- button {
- @include button($flat: true);
- padding: $padding * .5;
- }
-
- .volume button.arrow:last-child {
- margin-left: $spacing * .4;
- }
-
- .volume,
- .brightness {
- padding: $padding * .5;
- }
-
- scale {
- @include slider;
- margin: 0 ($spacing * .5);
-
- &.muted highlight {
- background-image: none;
- background-color: transparentize($fg, $amount: .2);
- }
- }
- }
-
- .row {
- @include spacing;
- }
-
- .menu {
- @include unset;
- @include widget;
- padding: $padding;
- margin-top: $spacing;
-
- .icon {
- margin: 0 ($spacing * .5);
- margin-left: $spacing * .2;
- }
-
- .title {
- font-weight: bold;
- }
-
- separator {
- margin: ($radius * .5);
- background-color: $border-color;
- }
-
- button {
- @include button($flat: true);
- padding: ($padding * .5);
-
- image:first-child {
- margin-right: $spacing * .5;
- }
- }
-
- .bluetooth-devices {
- @include spacing(.5);
- }
-
- switch {
- @include switch;
- }
- }
-
- .sliders-box .menu {
- margin: ($spacing * .5) 0;
-
- &.app-mixer {
- .mixer-item {
- padding: $padding * .5;
- padding-left: 0;
- padding-right: $padding * 2;
-
- scale {
- @include slider($width: .5em);
- }
-
- image {
- font-size: 1.2em;
- margin: 0 $padding;
- }
- }
- }
- }
-
- .toggle-button {
- @include button;
- font-weight: bold;
-
- image {
- font-size: 1.3em;
- }
-
- label {
- margin-left: $spacing * .3;
- }
-
- button {
- @include button($flat: true);
-
- &:first-child {
- padding: $padding * 1.2;
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- }
-
- &:last-child {
- padding: $padding * .5;
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- }
- }
-
- &.active {
- background-color: $primary-bg;
-
- label,
- image {
- color: $primary-fg;
- }
- }
- }
-
- .simple-toggle {
- @include button;
- font-weight: bold;
- padding: $padding * 1.2;
-
- label {
- margin-left: $spacing * .3;
- }
-
- image {
- font-size: 1.3em;
- }
- }
-
- .media {
- @include spacing;
-
- .player {
- @include media;
- }
- }
-}
diff --git a/.config/ags/widget/quicksettings/widgets/Bluetooth.ts b/.config/ags/widget/quicksettings/widgets/Bluetooth.ts
deleted file mode 100644
index 649e654..0000000
--- a/.config/ags/widget/quicksettings/widgets/Bluetooth.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-import { type BluetoothDevice } from "types/service/bluetooth"
-import { Menu, ArrowToggleButton } from "../ToggleButton"
-import icons from "lib/icons"
-
-const bluetooth = await Service.import("bluetooth")
-
-export const BluetoothToggle = () => ArrowToggleButton({
- name: "bluetooth",
- icon: bluetooth.bind("enabled").as(p => icons.bluetooth[p ? "enabled" : "disabled"]),
- label: Utils.watch("Disabled", bluetooth, () => {
- if (!bluetooth.enabled)
- return "Disabled"
-
- if (bluetooth.connected_devices.length === 1)
- return bluetooth.connected_devices[0].alias
-
- return `${bluetooth.connected_devices.length} Connected`
- }),
- connection: [bluetooth, () => bluetooth.enabled],
- deactivate: () => bluetooth.enabled = false,
- activate: () => bluetooth.enabled = true,
-})
-
-const DeviceItem = (device: BluetoothDevice) => Widget.Box({
- children: [
- Widget.Icon(device.icon_name + "-symbolic"),
- Widget.Label(device.name),
- Widget.Label({
- label: `${device.battery_percentage}%`,
- visible: device.bind("battery_percentage").as(p => p > 0),
- }),
- Widget.Box({ hexpand: true }),
- Widget.Spinner({
- active: device.bind("connecting"),
- visible: device.bind("connecting"),
- }),
- Widget.Switch({
- active: device.connected,
- visible: device.bind("connecting").as(p => !p),
- setup: self => self.on("notify::active", () => {
- device.setConnection(self.active)
- }),
- }),
- ],
-})
-
-export const BluetoothDevices = () => Menu({
- name: "bluetooth",
- icon: icons.bluetooth.disabled,
- title: "Bluetooth",
- content: [
- Widget.Box({
- class_name: "bluetooth-devices",
- hexpand: true,
- vertical: true,
- children: bluetooth.bind("devices").as(ds => ds
- .filter(d => d.name)
- .map(DeviceItem)),
- }),
- ],
-})
diff --git a/.config/ags/widget/quicksettings/widgets/Brightness.ts b/.config/ags/widget/quicksettings/widgets/Brightness.ts
deleted file mode 100644
index a3ce565..0000000
--- a/.config/ags/widget/quicksettings/widgets/Brightness.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import icons from "lib/icons"
-import brightness from "service/brightness"
-
-const BrightnessSlider = () => Widget.Slider({
- draw_value: false,
- hexpand: true,
- value: brightness.bind("screen"),
- on_change: ({ value }) => brightness.screen = value,
-})
-
-export const Brightness = () => Widget.Box({
- class_name: "brightness",
- children: [
- Widget.Button({
- vpack: "center",
- child: Widget.Icon(icons.brightness.indicator),
- on_clicked: () => brightness.screen = 0,
- tooltip_text: brightness.bind("screen").as(v =>
- `Screen Brightness: ${Math.floor(v * 100)}%`),
- }),
- BrightnessSlider(),
- ],
-})
diff --git a/.config/ags/widget/quicksettings/widgets/DND.ts b/.config/ags/widget/quicksettings/widgets/DND.ts
deleted file mode 100644
index 7fc1fd0..0000000
--- a/.config/ags/widget/quicksettings/widgets/DND.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { SimpleToggleButton } from "../ToggleButton"
-import icons from "lib/icons"
-
-const n = await Service.import("notifications")
-const dnd = n.bind("dnd")
-
-export const DND = () => SimpleToggleButton({
- icon: dnd.as(dnd => icons.notifications[dnd ? "silent" : "noisy"]),
- label: dnd.as(dnd => dnd ? "Silent" : "Noisy"),
- toggle: () => n.dnd = !n.dnd,
- connection: [n, () => n.dnd],
-})
diff --git a/.config/ags/widget/quicksettings/widgets/DarkMode.ts b/.config/ags/widget/quicksettings/widgets/DarkMode.ts
deleted file mode 100644
index 9ec94df..0000000
--- a/.config/ags/widget/quicksettings/widgets/DarkMode.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { SimpleToggleButton } from "../ToggleButton"
-import icons from "lib/icons"
-import options from "options"
-
-const { scheme } = options.theme
-
-export const DarkModeToggle = () => SimpleToggleButton({
- icon: scheme.bind().as(s => icons.color[s]),
- label: scheme.bind().as(s => s === "dark" ? "Dark" : "Light"),
- toggle: () => scheme.value = scheme.value === "dark" ? "light" : "dark",
- connection: [scheme, () => scheme.value === "dark"],
-})
diff --git a/.config/ags/widget/quicksettings/widgets/Header.ts b/.config/ags/widget/quicksettings/widgets/Header.ts
deleted file mode 100644
index 44c26f2..0000000
--- a/.config/ags/widget/quicksettings/widgets/Header.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import icons from "lib/icons"
-import { uptime } from "lib/variables"
-import options from "options"
-import powermenu, { Action } from "service/powermenu"
-
-const battery = await Service.import("battery")
-const { image, size } = options.quicksettings.avatar
-
-function up(up: number) {
- const h = Math.floor(up / 60)
- const m = Math.floor(up % 60)
- return `${h}h ${m < 10 ? "0" + m : m}m`
-}
-
-const Avatar = () => Widget.Box({
- class_name: "avatar",
- css: Utils.merge([image.bind(), size.bind()], (img, size) => `
- min-width: ${size}px;
- min-height: ${size}px;
- background-image: url('${img}');
- background-size: cover;
- `),
-})
-
-const SysButton = (action: Action) => Widget.Button({
- vpack: "center",
- child: Widget.Icon(icons.powermenu[action]),
- on_clicked: () => powermenu.action(action),
-})
-
-export const Header = () => Widget.Box(
- { class_name: "header horizontal" },
- Avatar(),
- Widget.Box({
- vertical: true,
- vpack: "center",
- children: [
- Widget.Box({
- visible: battery.bind("available"),
- children: [
- Widget.Icon({ icon: battery.bind("icon_name") }),
- Widget.Label({ label: battery.bind("percent").as(p => `${p}%`) }),
- ],
- }),
- Widget.Box([
- Widget.Icon({ icon: icons.ui.time }),
- Widget.Label({ label: uptime.bind().as(up) }),
-
- //Widget.Label({ label: `${user.name}\n` }),
- // //Widget.Label({ label: uptime.bind().value }),
- // Widget.Label({ label: `${user.name}\n ${uptime.bind().value}` }),
- // //Widget.Icon({ icon: icons.ui.time }),
- ]),
-
- ],
- }),
- Widget.Box({ hexpand: true }),
- Widget.Button({
- vpack: "center",
- child: Widget.Icon(icons.ui.settings),
- on_clicked: () => {
- App.closeWindow("quicksettings")
- App.closeWindow("settings-dialog")
- App.openWindow("settings-dialog")
- },
- }),
- SysButton("logout"),
- SysButton("shutdown"),
-)
diff --git a/.config/ags/widget/quicksettings/widgets/Media.ts b/.config/ags/widget/quicksettings/widgets/Media.ts
deleted file mode 100644
index 52254ea..0000000
--- a/.config/ags/widget/quicksettings/widgets/Media.ts
+++ /dev/null
@@ -1,153 +0,0 @@
-import { type MprisPlayer } from "types/service/mpris"
-import icons from "lib/icons"
-import options from "options"
-import { icon } from "lib/utils"
-
-const mpris = await Service.import("mpris")
-const players = mpris.bind("players")
-const { media } = options.quicksettings
-
-function lengthStr(length: number) {
- const min = Math.floor(length / 60)
- const sec = Math.floor(length % 60)
- const sec0 = sec < 10 ? "0" : ""
- return `${min}:${sec0}${sec}`
-}
-
-const Player = (player: MprisPlayer) => {
- const cover = Widget.Box({
- class_name: "cover",
- vpack: "start",
- css: Utils.merge([
- player.bind("cover_path"),
- player.bind("track_cover_url"),
- media.coverSize.bind(),
- ], (path, url, size) => `
- min-width: ${size}px;
- min-height: ${size}px;
- background-image: url('${path || url}');
- `),
- })
-
- const title = Widget.Label({
- class_name: "title",
- max_width_chars: 20,
- truncate: "end",
- hpack: "start",
- label: player.bind("track_title"),
- })
-
- const artist = Widget.Label({
- class_name: "artist",
- max_width_chars: 20,
- truncate: "end",
- hpack: "start",
- label: player.bind("track_artists").as(a => a.join(", ")),
- })
-
- const positionSlider = Widget.Slider({
- class_name: "position",
- draw_value: false,
- on_change: ({ value }) => player.position = value * player.length,
- setup: self => {
- const update = () => {
- const { length, position } = player
- self.visible = length > 0
- self.value = length > 0 ? position / length : 0
- }
- self.hook(player, update)
- self.hook(player, update, "position")
- self.poll(1000, update)
- },
- })
-
- const positionLabel = Widget.Label({
- class_name: "position",
- hpack: "start",
- setup: self => {
- const update = (_: unknown, time?: number) => {
- self.label = lengthStr(time || player.position)
- self.visible = player.length > 0
- }
- self.hook(player, update, "position")
- self.poll(1000, update)
- },
- })
-
- const lengthLabel = Widget.Label({
- class_name: "length",
- hpack: "end",
- visible: player.bind("length").as(l => l > 0),
- label: player.bind("length").as(lengthStr),
- })
-
- const playericon = Widget.Icon({
- class_name: "icon",
- hexpand: true,
- hpack: "end",
- vpack: "start",
- tooltip_text: player.identity || "",
- icon: Utils.merge([player.bind("entry"), media.monochromeIcon.bind()], (e, s) => {
- const name = `${e}${s ? "-symbolic" : ""}`
- return icon(name, icons.fallback.audio)
- }),
- })
-
- const playPause = Widget.Button({
- class_name: "play-pause",
- on_clicked: () => player.playPause(),
- visible: player.bind("can_play"),
- child: Widget.Icon({
- icon: player.bind("play_back_status").as(s => {
- switch (s) {
- case "Playing": return icons.mpris.playing
- case "Paused":
- case "Stopped": return icons.mpris.stopped
- }
- }),
- }),
- })
-
- const prev = Widget.Button({
- on_clicked: () => player.previous(),
- visible: player.bind("can_go_prev"),
- child: Widget.Icon(icons.mpris.prev),
- })
-
- const next = Widget.Button({
- on_clicked: () => player.next(),
- visible: player.bind("can_go_next"),
- child: Widget.Icon(icons.mpris.next),
- })
-
- return Widget.Box(
- { class_name: "player", vexpand: false },
- cover,
- Widget.Box(
- { vertical: true },
- Widget.Box([
- title,
- playericon,
- ]),
- artist,
- Widget.Box({ vexpand: true }),
- positionSlider,
- Widget.CenterBox({
- class_name: "footer horizontal",
- start_widget: positionLabel,
- center_widget: Widget.Box([
- prev,
- playPause,
- next,
- ]),
- end_widget: lengthLabel,
- }),
- ),
- )
-}
-
-export const Media = () => Widget.Box({
- vertical: true,
- class_name: "media vertical",
- children: players.as(p => p.map(Player)),
-})
diff --git a/.config/ags/widget/quicksettings/widgets/MicMute.ts b/.config/ags/widget/quicksettings/widgets/MicMute.ts
deleted file mode 100644
index b6e9454..0000000
--- a/.config/ags/widget/quicksettings/widgets/MicMute.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { SimpleToggleButton } from "../ToggleButton"
-import icons from "lib/icons"
-const { microphone } = await Service.import("audio")
-
-const icon = () => microphone.is_muted || microphone.stream?.is_muted
- ? icons.audio.mic.muted
- : icons.audio.mic.high
-
-const label = () => microphone.is_muted || microphone.stream?.is_muted
- ? "Muted"
- : "Unmuted"
-
-export const MicMute = () => SimpleToggleButton({
- icon: Utils.watch(icon(), microphone, icon),
- label: Utils.watch(label(), microphone, label),
- toggle: () => microphone.is_muted = !microphone.is_muted,
- connection: [microphone, () => microphone?.is_muted || false],
-})
diff --git a/.config/ags/widget/quicksettings/widgets/Network.ts b/.config/ags/widget/quicksettings/widgets/Network.ts
deleted file mode 100644
index eb14ab4..0000000
--- a/.config/ags/widget/quicksettings/widgets/Network.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-import { Menu, ArrowToggleButton } from "../ToggleButton"
-import icons from "lib/icons.js"
-import { dependencies, sh } from "lib/utils"
-import options from "options"
-const { wifi } = await Service.import("network")
-
-export const NetworkToggle = () => ArrowToggleButton({
- name: "network",
- icon: wifi.bind("icon_name"),
- label: wifi.bind("ssid").as(ssid => ssid || "Not Connected"),
- connection: [wifi, () => wifi.enabled],
- deactivate: () => wifi.enabled = false,
- activate: () => {
- wifi.enabled = true
- wifi.scan()
- },
-})
-
-export const WifiSelection = () => Menu({
- name: "network",
- icon: wifi.bind("icon_name"),
- title: "Wifi Selection",
- content: [
- Widget.Box({
- vertical: true,
- setup: self => self.hook(wifi, () => self.children =
- wifi.access_points.map(ap => Widget.Button({
- on_clicked: () => {
- if (dependencies("nmcli"))
- Utils.execAsync(`nmcli device wifi connect ${ap.bssid}`)
- },
- child: Widget.Box({
- children: [
- Widget.Icon(ap.iconName),
- Widget.Label(ap.ssid || ""),
- Widget.Icon({
- icon: icons.ui.tick,
- hexpand: true,
- hpack: "end",
- setup: self => Utils.idle(() => {
- if (!self.is_destroyed)
- self.visible = ap.active
- }),
- }),
- ],
- }),
- })),
- ),
- }),
- Widget.Separator(),
- Widget.Button({
- on_clicked: () => sh(options.quicksettings.networkSettings.value),
- child: Widget.Box({
- children: [
- Widget.Icon(icons.ui.settings),
- Widget.Label("Network"),
- ],
- }),
- }),
- ],
-})
diff --git a/.config/ags/widget/quicksettings/widgets/PowerProfile.ts b/.config/ags/widget/quicksettings/widgets/PowerProfile.ts
deleted file mode 100644
index f566aaf..0000000
--- a/.config/ags/widget/quicksettings/widgets/PowerProfile.ts
+++ /dev/null
@@ -1,99 +0,0 @@
-import { ArrowToggleButton, Menu } from "../ToggleButton"
-import icons from "lib/icons"
-
-import asusctl from "service/asusctl"
-const asusprof = asusctl.bind("profile")
-
-const AsusProfileToggle = () => ArrowToggleButton({
- name: "asusctl-profile",
- icon: asusprof.as(p => icons.asusctl.profile[p]),
- label: asusprof,
- connection: [asusctl, () => asusctl.profile !== "Balanced"],
- activate: () => asusctl.setProfile("Quiet"),
- deactivate: () => asusctl.setProfile("Balanced"),
- activateOnArrow: false,
-})
-
-const AsusProfileSelector = () => Menu({
- name: "asusctl-profile",
- icon: asusprof.as(p => icons.asusctl.profile[p]),
- title: "Profile Selector",
- content: [
- Widget.Box({
- vertical: true,
- hexpand: true,
- children: [
- Widget.Box({
- vertical: true,
- children: asusctl.profiles.map(prof => Widget.Button({
- on_clicked: () => asusctl.setProfile(prof),
- child: Widget.Box({
- children: [
- Widget.Icon(icons.asusctl.profile[prof]),
- Widget.Label(prof),
- ],
- }),
- })),
- }),
- ],
- }),
- Widget.Separator(),
- Widget.Button({
- on_clicked: () => Utils.execAsync("rog-control-center"),
- child: Widget.Box({
- children: [
- Widget.Icon(icons.ui.settings),
- Widget.Label("Rog Control Center"),
- ],
- }),
- }),
- ],
-})
-
-
-const pp = await Service.import("powerprofiles")
-const profile = pp.bind("active_profile")
-const profiles = pp.profiles.map(p => p.Profile)
-
-const pretty = (str: string) => str
- .split("-")
- .map(str => `${str.at(0)?.toUpperCase()}${str.slice(1)}`)
- .join(" ")
-
-const PowerProfileToggle = () => ArrowToggleButton({
- name: "asusctl-profile",
- icon: profile.as(p => icons.powerprofile[p]),
- label: profile.as(pretty),
- connection: [pp, () => pp.active_profile !== profiles[1]],
- activate: () => pp.active_profile = profiles[0],
- deactivate: () => pp.active_profile = profiles[1],
- activateOnArrow: false,
-})
-
-const PowerProfileSelector = () => Menu({
- name: "asusctl-profile",
- icon: profile.as(p => icons.powerprofile[p]),
- title: "Profile Selector",
- content: [Widget.Box({
- vertical: true,
- hexpand: true,
- child: Widget.Box({
- vertical: true,
- children: profiles.map(prof => Widget.Button({
- on_clicked: () => pp.active_profile = prof,
- child: Widget.Box({
- children: [
- Widget.Icon(icons.powerprofile[prof]),
- Widget.Label(pretty(prof)),
- ],
- }),
- })),
- }),
- })],
-})
-
-export const ProfileToggle = asusctl.available
- ? AsusProfileToggle : PowerProfileToggle
-
-export const ProfileSelector = asusctl.available
- ? AsusProfileSelector : PowerProfileSelector
diff --git a/.config/ags/widget/quicksettings/widgets/Volume.ts b/.config/ags/widget/quicksettings/widgets/Volume.ts
deleted file mode 100644
index 077439a..0000000
--- a/.config/ags/widget/quicksettings/widgets/Volume.ts
+++ /dev/null
@@ -1,161 +0,0 @@
-import { type Stream } from "types/service/audio"
-import { Arrow, Menu } from "../ToggleButton"
-import { dependencies, icon, sh } from "lib/utils"
-import icons from "lib/icons.js"
-const audio = await Service.import("audio")
-
-type Type = "microphone" | "speaker"
-
-const VolumeIndicator = (type: Type = "speaker") => Widget.Button({
- vpack: "center",
- on_clicked: () => audio[type].is_muted = !audio[type].is_muted,
- child: Widget.Icon({
- icon: audio[type].bind("icon_name")
- .as(i => icon(i || "", icons.audio.volume.medium)),
- tooltipText: audio[type].bind("volume")
- .as(vol => `Volume: ${Math.floor(vol * 100)}%`),
- }),
-})
-
-const micIndicator = (type: Type = "microphone") => Widget.Button({
- vpack: "center",
- on_clicked: () => audio[type].is_muted = !audio[type].is_muted,
- child: Widget.Icon({
- icon: audio[type].bind("icon_name")
- .as(i => icon(i || "", icons.audio.mic.medium)),
- tooltipText: audio[type].bind("volume")
- .as(vol => `Volume: ${Math.floor(vol * 100)}%`),
- }),
-})
-
-const VolumeSlider = (type: Type = "speaker") => Widget.Slider({
- hexpand: true,
- draw_value: false,
- on_change: ({ value, dragging }) => {
- if (dragging) {
- audio[type].volume = value
- audio[type].is_muted = false
- }
- },
- value: audio[type].bind("volume"),
- class_name: audio[type].bind("is_muted").as(m => m ? "muted" : ""),
-})
-
-export const Volume = () => Widget.Box({
- class_name: "volume",
- children: [
- VolumeIndicator("speaker"),
- VolumeSlider("speaker"),
- Widget.Box({
- vpack: "center",
- child: Arrow("sink-selector"),
- }),
- Widget.Box({
- vpack: "center",
- child: Arrow("app-mixer"),
- visible: audio.bind("apps").as(a => a.length > 0),
- }),
- ],
-})
-
-export const Microhone = () => Widget.Box({
- class_name: "slider horizontal",
- visible: audio.bind("recorders").as(a => a.length > 0),
- children: [
- micIndicator("microphone"),
- VolumeSlider("microphone"),
- ],
-})
-
-const MixerItem = (stream: Stream) => Widget.Box(
- {
- hexpand: true,
- class_name: "mixer-item horizontal",
- },
- Widget.Icon({
- tooltip_text: stream.bind("name").as(n => n || ""),
- icon: stream.bind("name").as(n => {
- return Utils.lookUpIcon(n || "")
- ? (n || "")
- : icons.fallback.audio
- }),
- }),
- Widget.Box(
- { vertical: true },
- Widget.Label({
- xalign: 0,
- truncate: "end",
- max_width_chars: 28,
- label: stream.bind("description").as(d => d || ""),
- }),
- Widget.Slider({
- hexpand: true,
- draw_value: false,
- value: stream.bind("volume"),
- on_change: ({ value }) => stream.volume = value,
- }),
- ),
-)
-
-const SinkItem = (stream: Stream) => Widget.Button({
- hexpand: true,
- on_clicked: () => audio.speaker = stream,
- child: Widget.Box({
- children: [
- Widget.Icon({
- icon: icon(stream.icon_name || "", icons.fallback.audio),
- tooltip_text: stream.icon_name || "",
- }),
- Widget.Label((stream.description || "").split(" ").slice(0, 4).join(" ")),
- Widget.Icon({
- icon: icons.ui.tick,
- hexpand: true,
- hpack: "end",
- visible: audio.speaker.bind("stream").as(s => s === stream.stream),
- }),
- ],
- }),
-})
-
-const SettingsButton = () => Widget.Button({
- on_clicked: () => {
- if (dependencies("pavucontrol"))
- sh("pavucontrol")
- },
- hexpand: true,
- child: Widget.Box({
- children: [
- Widget.Icon(icons.ui.settings),
- Widget.Label("Settings"),
- ],
- }),
-})
-
-export const AppMixer = () => Menu({
- name: "app-mixer",
- icon: icons.audio.mixer,
- title: "App Mixer",
- content: [
- Widget.Box({
- vertical: true,
- class_name: "vertical mixer-item-box",
- children: audio.bind("apps").as(a => a.map(MixerItem)),
- }),
- Widget.Separator(),
- SettingsButton(),
- ],
-})
-
-export const SinkSelector = () => Menu({
- name: "sink-selector",
- icon: icons.audio.type.headset,
- title: "Sink Selector",
- content: [
- Widget.Box({
- vertical: true,
- children: audio.bind("speakers").as(a => a.map(SinkItem)),
- }),
- Widget.Separator(),
- SettingsButton(),
- ],
-})
diff --git a/.config/ags/widget/settings/Group.ts b/.config/ags/widget/settings/Group.ts
deleted file mode 100644
index e9356e0..0000000
--- a/.config/ags/widget/settings/Group.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import icons from "lib/icons"
-import Row from "./Row"
-
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-export default (title: string, ...rows: ReturnType<typeof Row<any>>[]) => Widget.Box(
- {
- class_name: "group",
- vertical: true,
- },
- Widget.Box([
- Widget.Label({
- hpack: "start",
- vpack: "end",
- class_name: "group-title",
- label: title,
- setup: w => Utils.idle(() => w.visible = !!title),
- }),
- title ? Widget.Button({
- hexpand: true,
- hpack: "end",
- child: Widget.Icon(icons.ui.refresh),
- class_name: "group-reset",
- sensitive: Utils.merge(
- rows.map(({ attribute: { opt } }) => opt.bind().as(v => v !== opt.initial)),
- (...values) => values.some(b => b),
- ),
- on_clicked: () => rows.forEach(row => row.attribute.opt.reset()),
- }) : Widget.Box(),
- ]),
- Widget.Box({
- vertical: true,
- children: rows,
- }),
-)
diff --git a/.config/ags/widget/settings/Page.ts b/.config/ags/widget/settings/Page.ts
deleted file mode 100644
index 220e560..0000000
--- a/.config/ags/widget/settings/Page.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import Group from "./Group"
-
-export default <T>(
- name: string,
- icon: string,
- ...groups: ReturnType<typeof Group<T>>[]
-) => Widget.Box({
- class_name: "page",
- attribute: { name, icon },
- child: Widget.Scrollable({
- css: "min-height: 300px;",
- child: Widget.Box({
- class_name: "page-content",
- vexpand: true,
- vertical: true,
- children: groups,
- }),
- }),
-})
diff --git a/.config/ags/widget/settings/Row.ts b/.config/ags/widget/settings/Row.ts
deleted file mode 100644
index 1e17096..0000000
--- a/.config/ags/widget/settings/Row.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import { Opt } from "lib/option"
-import Setter from "./Setter"
-import icons from "lib/icons"
-
-export type RowProps<T> = {
- opt: Opt<T>
- title: string
- note?: string
- type?:
- | "number"
- | "color"
- | "float"
- | "object"
- | "string"
- | "enum"
- | "boolean"
- | "img"
- | "font"
- enums?: string[]
- max?: number
- min?: number
-}
-
-export default <T>(props: RowProps<T>) => Widget.Box(
- {
- attribute: { opt: props.opt },
- class_name: "row",
- tooltip_text: props.note ? `note: ${props.note}` : "",
- },
- Widget.Box(
- { vertical: true, vpack: "center" },
- Widget.Label({
- xalign: 0,
- class_name: "row-title",
- label: props.title,
- }),
- Widget.Label({
- xalign: 0,
- class_name: "id",
- label: props.opt.id,
- }),
- ),
- Widget.Box({ hexpand: true }),
- Widget.Box(
- { vpack: "center" },
- Setter(props),
- ),
- Widget.Button({
- vpack: "center",
- class_name: "reset",
- child: Widget.Icon(icons.ui.refresh),
- on_clicked: () => props.opt.reset(),
- sensitive: props.opt.bind().as(v => v !== props.opt.initial),
- }),
-)
diff --git a/.config/ags/widget/settings/Setter.ts b/.config/ags/widget/settings/Setter.ts
deleted file mode 100644
index 7e455c9..0000000
--- a/.config/ags/widget/settings/Setter.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-import { type RowProps } from "./Row"
-import { Opt } from "lib/option"
-import icons from "lib/icons"
-import Gdk from "gi://Gdk"
-
-function EnumSetter(opt: Opt<string>, values: string[]) {
- const lbl = Widget.Label({ label: opt.bind().as(v => `${v}`) })
- const step = (dir: 1 | -1) => {
- const i = values.findIndex(i => i === lbl.label)
- opt.setValue(dir > 0
- ? i + dir > values.length - 1 ? values[0] : values[i + dir]
- : i + dir < 0 ? values[values.length - 1] : values[i + dir],
- )
- }
- const next = Widget.Button({
- child: Widget.Icon(icons.ui.arrow.right),
- on_clicked: () => step(+1),
- })
- const prev = Widget.Button({
- child: Widget.Icon(icons.ui.arrow.left),
- on_clicked: () => step(-1),
- })
- return Widget.Box({
- class_name: "enum-setter",
- children: [lbl, prev, next],
- })
-}
-
-export default function Setter<T>({
- opt,
- type = typeof opt.value as RowProps<T>["type"],
- enums,
- max = 1000,
- min = 0,
-}: RowProps<T>) {
- switch (type) {
- case "number": return Widget.SpinButton({
- setup(self) {
- self.set_range(min, max)
- self.set_increments(1, 5)
- self.on("value-changed", () => opt.value = self.value as T)
- self.hook(opt, () => self.value = opt.value as number)
- },
- })
-
- case "float":
- case "object": return Widget.Entry({
- on_accept: self => opt.value = JSON.parse(self.text || ""),
- setup: self => self.hook(opt, () => self.text = JSON.stringify(opt.value)),
- })
-
- case "string": return Widget.Entry({
- on_accept: self => opt.value = self.text as T,
- setup: self => self.hook(opt, () => self.text = opt.value as string),
- })
-
- case "enum": return EnumSetter(opt as unknown as Opt<string>, enums!)
- case "boolean": return Widget.Switch()
- .on("notify::active", self => opt.value = self.active as T)
- .hook(opt, self => self.active = opt.value as boolean)
-
- case "img": return Widget.FileChooserButton({
- on_file_set: ({ uri }) => { opt.value = uri!.replace("file://", "") as T },
- })
-
- case "font": return Widget.FontButton({
- show_size: false,
- use_size: false,
- setup: self => self
- .hook(opt, () => self.font = opt.value as string)
- .on("font-set", ({ font }) => opt.value = font!
- .split(" ").slice(0, -1).join(" ") as T),
- })
-
- case "color": return Widget.ColorButton()
- .hook(opt, self => {
- const rgba = new Gdk.RGBA()
- rgba.parse(opt.value as string)
- self.rgba = rgba
- })
- .on("color-set", ({ rgba: { red, green, blue } }) => {
- const hex = (n: number) => {
- const c = Math.floor(255 * n).toString(16)
- return c.length === 1 ? `0${c}` : c
- }
- opt.value = `#${hex(red)}${hex(green)}${hex(blue)}` as T
- })
-
- default: return Widget.Label({
- label: `no setter with type ${type}`,
- })
- }
-}
diff --git a/.config/ags/widget/settings/SettingsDialog.ts b/.config/ags/widget/settings/SettingsDialog.ts
deleted file mode 100644
index be0c35e..0000000
--- a/.config/ags/widget/settings/SettingsDialog.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-import RegularWindow from "widget/RegularWindow"
-import layout from "./layout"
-import icons from "lib/icons"
-import options from "options"
-
-const current = Variable(layout[0].attribute.name)
-
-const Header = () => Widget.CenterBox({
- class_name: "header",
- start_widget: Widget.Button({
- class_name: "reset",
- on_clicked: options.reset,
- hpack: "start",
- vpack: "start",
- child: Widget.Icon(icons.ui.refresh),
- tooltip_text: "Reset",
- }),
- center_widget: Widget.Box({
- class_name: "pager horizontal",
- children: layout.map(({ attribute: { name, icon } }) => Widget.Button({
- xalign: 0,
- class_name: current.bind().as(v => `${v === name ? "active" : ""}`),
- on_clicked: () => current.value = name,
- child: Widget.Box([
- Widget.Icon(icon),
- Widget.Label(name),
- ]),
- })),
- }),
- end_widget: Widget.Button({
- class_name: "close",
- hpack: "end",
- vpack: "start",
- child: Widget.Icon(icons.ui.close),
- on_clicked: () => App.closeWindow("settings-dialog"),
- }),
-})
-
-const PagesStack = () => Widget.Stack({
- transition: "slide_left_right",
- children: layout.reduce((obj, page) => ({ ...obj, [page.attribute.name]: page }), {}),
- shown: current.bind() as never,
-})
-
-export default () => RegularWindow({
- name: "settings-dialog",
- class_name: "settings-dialog",
- title: "Settings",
- setup(win) {
- win.on("delete-event", () => {
- win.hide()
- return true
- })
- win.set_default_size(500, 600)
- },
- child: Widget.Box({
- vertical: true,
- children: [
- Header(),
- PagesStack(),
- ],
- }),
-})
diff --git a/.config/ags/widget/settings/Wallpaper.ts b/.config/ags/widget/settings/Wallpaper.ts
deleted file mode 100644
index 998f3b7..0000000
--- a/.config/ags/widget/settings/Wallpaper.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import wallpaper from "service/wallpaper"
-
-export default () => Widget.Box(
- { class_name: "row wallpaper" },
- Widget.Box(
- { vertical: true },
- Widget.Label({
- xalign: 0,
- class_name: "row-title",
- label: "Wallpaper",
- vpack: "start",
- }),
- Widget.Button({
- on_clicked: wallpaper.random,
- label: "Random",
- }),
- Widget.FileChooserButton({
- on_file_set: ({ uri }) => wallpaper.set(uri!.replace("file://", "")),
- }),
- ),
- Widget.Box({ hexpand: true }),
- Widget.Box({
- class_name: "preview",
- css: wallpaper.bind("wallpaper").as(wp => `
- min-height: 120px;
- min-width: 200px;
- background-image: url('${wp}');
- background-size: cover;
- `),
- }),
-)
diff --git a/.config/ags/widget/settings/layout.ts b/.config/ags/widget/settings/layout.ts
deleted file mode 100644
index 2b45810..0000000
--- a/.config/ags/widget/settings/layout.ts
+++ /dev/null
@@ -1,147 +0,0 @@
-/* eslint-disable max-len */
-import Row from "./Row"
-import Group from "./Group"
-import Page from "./Page"
-import Wallpaper from "./Wallpaper"
-import options from "options"
-import icons from "lib/icons"
-
-const {
- autotheme: at,
- font,
- theme,
- bar: b,
- launcher: l,
- overview: ov,
- powermenu: pm,
- quicksettings: qs,
- osd,
- hyprland: h,
-} = options
-
-const {
- dark,
- light,
- blur,
- scheme,
- padding,
- spacing,
- radius,
- shadows,
- widget,
- border,
-} = theme
-
-export default [
- Page("Theme", icons.ui.themes,
- Group("",
- Wallpaper() as ReturnType<typeof Row>,
- Row({ opt: at, title: "Auto Generate Color Scheme" }),
- Row({ opt: scheme, title: "Color Scheme", type: "enum", enums: ["dark", "light"] }),
- ),
- Group("Dark Colors",
- Row({ opt: dark.bg, title: "Background", type: "color" }),
- Row({ opt: dark.fg, title: "Foreground", type: "color" }),
- Row({ opt: dark.primary.bg, title: "Primary", type: "color" }),
- Row({ opt: dark.primary.fg, title: "On Primary", type: "color" }),
- Row({ opt: dark.error.bg, title: "Error", type: "color" }),
- Row({ opt: dark.error.fg, title: "On Error", type: "color" }),
- Row({ opt: dark.widget, title: "Widget", type: "color" }),
- Row({ opt: dark.border, title: "Border", type: "color" }),
- ),
- Group("Light Colors",
- Row({ opt: light.bg, title: "Background", type: "color" }),
- Row({ opt: light.fg, title: "Foreground", type: "color" }),
- Row({ opt: light.primary.bg, title: "Primary", type: "color" }),
- Row({ opt: light.primary.fg, title: "On Primary", type: "color" }),
- Row({ opt: light.error.bg, title: "Error", type: "color" }),
- Row({ opt: light.error.fg, title: "On Error", type: "color" }),
- Row({ opt: light.widget, title: "Widget", type: "color" }),
- Row({ opt: light.border, title: "Border", type: "color" }),
- ),
- Group("Theme",
- Row({ opt: shadows, title: "Shadows" }),
- Row({ opt: widget.opacity, title: "Widget Opacity", max: 100 }),
- Row({ opt: border.opacity, title: "Border Opacity", max: 100 }),
- Row({ opt: border.width, title: "Border Width" }),
- Row({ opt: blur, title: "Blur", note: "0 to disable", max: 70 }),
- ),
- Group("UI",
- Row({ opt: padding, title: "Padding" }),
- Row({ opt: spacing, title: "Spacing" }),
- Row({ opt: radius, title: "Roundness" }),
- Row({ opt: font.size, title: "Font Size" }),
- Row({ opt: font.name, title: "Font Name", type: "font" }),
- ),
- ),
- Page("Bar", icons.ui.toolbars,
- Group("General",
- Row({ opt: b.flatButtons, title: "Flat Buttons" }),
- Row({ opt: b.position, title: "Position", type: "enum", enums: ["top", "bottom"] }),
- Row({ opt: b.corners, title: "Corners" }),
- ),
- Group("Launcher",
- Row({ opt: b.launcher.icon.icon, title: "Icon" }),
- Row({ opt: b.launcher.icon.colored, title: "Colored Icon" }),
- Row({ opt: b.launcher.label.label, title: "Label" }),
- Row({ opt: b.launcher.label.colored, title: "Colored Label" }),
- ),
- Group("Workspaces",
- Row({ opt: b.workspaces.workspaces, title: "Number of Workspaces", note: "0 to make it dynamic" }),
- ),
- Group("Taskbar",
- Row({ opt: b.taskbar.iconSize, title: "Icon Size" }),
- Row({ opt: b.taskbar.monochrome, title: "Monochrome" }),
- Row({ opt: b.taskbar.exclusive, title: "Exclusive to workspaces" }),
- ),
- Group("Date",
- Row({ opt: b.date.format, title: "Date Format" }),
- ),
- Group("Media",
- Row({ opt: b.media.monochrome, title: "Monochrome" }),
- Row({ opt: b.media.preferred, title: "Preferred Player" }),
- Row({ opt: b.media.direction, title: "Slide Direction", type: "enum", enums: ["left", "right"] }),
- Row({ opt: b.media.format, title: "Format of the Label" }),
- Row({ opt: b.media.length, title: "Max Length of Label" }),
- ),
- Group("Battery",
- Row({ opt: b.battery.bar, title: "Style", type: "enum", enums: ["hidden", "regular", "whole"] }),
- Row({ opt: b.battery.blocks, title: "Number of Blocks" }),
- Row({ opt: b.battery.width, title: "Width of Bar" }),
- Row({ opt: b.battery.charging, title: "Charging Color", type: "color" }),
- ),
- Group("Powermenu",
- Row({ opt: b.powermenu.monochrome, title: "Monochrome" }),
- ),
- ),
- Page("General", icons.ui.settings,
- Group("Hyprland",
- Row({ opt: h.gapsWhenOnly, title: "Gaps When Only" }),
- ),
- Group("Launcher",
- Row({ opt: l.width, title: "Width" }),
- Row({ opt: l.apps.iconSize, title: "Icon Size" }),
- Row({ opt: l.apps.max, title: "Max Items" }),
- ),
- Group("Overview",
- Row({ opt: ov.scale, title: "Scale", max: 100 }),
- Row({ opt: ov.workspaces, title: "Workspaces", max: 11, note: "set this to 0 to make it dynamic" }),
- Row({ opt: ov.monochromeIcon, title: "Monochrome Icons" }),
- ),
- Group("Powermenu",
- Row({ opt: pm.layout, title: "Layout", type: "enum", enums: ["box", "line"] }),
- Row({ opt: pm.labels, title: "Show Labels" }),
- ),
- Group("Quicksettings",
- Row({ opt: qs.avatar.image, title: "Avatar", type: "img" }),
- Row({ opt: qs.avatar.size, title: "Avatar Size" }),
- Row({ opt: qs.media.monochromeIcon, title: "Media Monochrome Icons" }),
- Row({ opt: qs.media.coverSize, title: "Media Cover Art Size" }),
- ),
- Group("On Screen Indicator",
- Row({ opt: osd.progress.vertical, title: "Vertical" }),
- Row({ opt: osd.progress.pack.h, title: "Horizontal Alignment", type: "enum", enums: ["start", "center", "end"] }),
- Row({ opt: osd.progress.pack.v, title: "Vertical Alignment", type: "enum", enums: ["start", "center", "end"] }),
- ),
- ),
-] as const
diff --git a/.config/ags/widget/settings/settingsdialog.scss b/.config/ags/widget/settings/settingsdialog.scss
deleted file mode 100644
index b8c9820..0000000
--- a/.config/ags/widget/settings/settingsdialog.scss
+++ /dev/null
@@ -1,144 +0,0 @@
-window.settings-dialog {
- background-color: $bg;
- color: $fg;
-
- .header {
- .pager {
- @include spacing(.5);
- }
-
- padding: $padding;
-
- button {
- @include button;
- font-weight: bold;
- padding: $padding*.5 $padding;
-
- box {
- @include spacing($spacing: .3em);
- }
- }
-
- button.close {
- padding: $padding * .5;
- }
-
- button.reset {
- @include button($flat: true);
- padding: $padding*.5;
- }
- }
-
- .page {
- @include scrollable($top: true);
-
- .page-content {
- padding: $padding*2;
- padding-top: 0;
- }
- }
-
- .group {
- .group-title {
- color: $primary-bg;
- margin-bottom: $spacing*.5;
- }
-
- .group-reset {
- @include button($flat: true);
- margin: $spacing * .5;
- padding: $padding * .5;
-
- &:disabled {
- color: transparent;
- }
- }
-
- &:not(:first-child) {
- margin-top: $spacing;
- }
- }
-
- .row {
- background-color: $widget-bg;
- padding: $padding;
- border: $border;
- border-top: none;
-
- &:first-child {
- border-radius: $radius $radius 0 0;
- border: $border;
- }
-
- &:last-child {
- border-radius: 0 0 $radius $radius;
- }
-
- &:first-child:last-child {
- border-radius: $radius;
- border: $border;
- }
-
- button.reset {
- margin-left: $spacing;
- }
-
- label.id,
- label.note {
- color: transparentize($fg, .4)
- }
-
- entry,
- button {
- @include button;
- padding: $padding;
- }
-
- switch {
- @include switch;
- }
-
- spinbutton {
- @include unset;
-
- entry {
- border-radius: $radius 0 0 $radius;
- }
-
- button {
- border-radius: 0;
- }
-
- button:last-child {
- border-radius: 0 $radius $radius 0;
- }
- }
-
- .enum-setter {
- label {
- background-color: $widget-bg;
- border: $border;
- padding: 0 $padding;
- border-radius: $radius 0 0 $radius;
- }
-
- button {
- border-radius: 0;
- }
-
- button:last-child {
- border-radius: 0 $radius $radius 0;
- }
- }
-
- &.wallpaper {
- button {
- margin-top: $spacing * .5;
- }
-
- .preview {
- border-radius: $radius;
- }
- }
- }
-}
diff --git a/.config/betterlockscreen/betterlockscreenrc b/.config/betterlockscreen/betterlockscreenrc
deleted file mode 100644
index 4cdfbe8..0000000
--- a/.config/betterlockscreen/betterlockscreenrc
+++ /dev/null
@@ -1,37 +0,0 @@
-# ~/.config/betterlockscreenrc
-
-# default options
-display_on=0
-span_image=false
-lock_timeout=300
-fx_list=(dim blur dimblur pixel dimpixel color)
-dim_level=40
-blur_level=1
-pixel_scale=10,1000
-solid_color=333333
-wallpaper_cmd="feh --bg-fill"
-quiet=false
-# i3lockcolor_bin="i3lock-color" # Manually set command for i3lock-color
-
-# default theme
-loginbox=00000066
-loginshadow=00000000
-locktext="Type password to unlock..."
-font="sans-serif"
-ringcolor=ffffffff
-insidecolor=00000000
-separatorcolor=00000000
-ringvercolor=ffffffff
-insidevercolor=00000000
-ringwrongcolor=ffffffff
-insidewrongcolor=d23c3dff
-timecolor=ffffffff
-time_format="%H:%M:%S"
-greetercolor=ffffffff
-layoutcolor=ffffffff
-keyhlcolor=d23c3dff
-bshlcolor=d23c3dff
-verifcolor=ffffffff
-wrongcolor=d23c3dff
-modifcolor=d23c3dff
-bgcolor=000000ff
diff --git a/.config/bspwm/bspwmrc b/.config/bspwm/bspwmrc
deleted file mode 100755
index d30d6db..0000000
--- a/.config/bspwm/bspwmrc
+++ /dev/null
@@ -1,275 +0,0 @@
-#! /bin/sh
-
-################################################################################
-# ██████╗ ███████╗██████╗ ██╗ ██╗███╗ ███╗ #
-# ██╔══██╗██╔════╝██╔══██╗██║ ██║████╗ ████║ #
-# ██████╔╝███████╗██████╔╝██║ █╗ ██║██╔████╔██║ #
-# ██╔══██╗╚════██║██╔═══╝ ██║███╗██║██║╚██╔╝██║ #
-# ██████╔╝███████║██║ ╚███╔███╔╝██║ ╚═╝ ██║ #
-# ╚═════╝ ╚══════╝╚═╝ ╚══╝╚══╝ ╚═╝ ╚═╝ #
-################################## By: srdusr ##################################
-
-# ##############################################################################
-# # ENV VARS #
-# ##############################################################################
-
-## Environments
-export PATH="${PATH}:${HOME}/.config/bspwm/bin"
-
-# Get the name of the primary monitor
-mainmonitor=$(xrandr --query | awk '/ primary/{print $1}')
-
-## Monitors
-# If no primary monitor is identified, use the first connected monitor
-if [ "$mainmonitor" = "" ]; then
- mainmonitor=$(xrandr --query | awk '/ connected/ {print $1; exit}')
-fi
-
-# Set up workspaces on the primary monitor
-bspc monitor "$mainmonitor" -d 󰲡 󰲣 󰲥 󰲧 󰲩 #1 2 3 4 5
-
-# Check the number of connected monitors
-connected_monitors=$(xrandr --query | grep -c " connected")
-
-if [ "$connected_monitors" -gt 1 ]; then
- # Get the name of the secondary monitor (exclude the primary monitor)
- secondmonitor=$(xrandr --query | awk '/ connected/ && $1 != "'"$mainmonitor"'" {print $1; exit}')
-
- # Set up workspaces on the secondary monitor
- bspc monitor "$secondmonitor" -d 󰲫 󰲭 󰲯 󰲱 󰿭 #6 7 8 9 10
- # Check if the secondary monitor is connected and configure the layout
- if [ "$secondmonitor" != "" ]; then
- xrandr --output "$mainmonitor" --primary --auto --output "$secondmonitor" --auto --right-of "$mainmonitor"
- fi
-fi
-
-#INTERNAL_MONITOR="LVDS-1"
-#EXTERNAL_MONITOR="HDMI-1"
-## on first load setup default workspaces
-#if [[ "$1" = 0 ]]; then
-# if [[ $(xrandr -q | grep "${EXTERNAL_MONITOR} connected") ]]; then
-# bspc monitor "$EXTERNAL_MONITOR" -d 1 2 3 4 5
-# bspc monitor "$INTERNAL_MONITOR" -d 6 7 8 9 10
-# bspc wm -O "$EXTERNAL_MONITOR" "$INTERNAL_MONITOR"
-# else
-# bspc monitor "$INTERNAL_MONITOR" -d 1 2 3 4 5 6 7 8 9 10
-# fi
-#fi
-
-# ##############################################################################
-# # FUNCTIONS #
-# ##############################################################################
-
-config() { bspc config "$@" & }
-rule() { bspc rule -a "$@" & }
-run_once() {
- if [ ! "$(pgrep -f "$1")" ]; then
- "$@" &
- fi
-}
-
-# ##############################################################################
-# # WINDOW RULES #
-# ##############################################################################
-
-## Rules
-bspc rule -r *:* # remove all rules first
-rule '*' --one-shot state=below private=border_width:10
-#rule '*:Tiled' --one-shot state=tiled rectangle=50x50+0+50
-#rule '*' --one-shot state=floating rectangle=1028x374+0+50
-#rule \* rectangle=680x700+340+40
-rule '*:*:Picture-in-Picture' state=floating sticky=on layer=above
-rule '*:*:Picture in picture' state=floating sticky=on layer=above
-rule firefox:Toolkit focus=on state=floating sticky=on layer=above rectangle=400x280+955+475 #320x190+1030+480 #522x316-10+280
-rule "https://www.youtube.com - Enhancer for YouTube™ — Mozilla Firefox" state=floating sticky=on layer=above
-rule Wezterm state=floating
-rule Zathura state=tiled
-rule Pavucontrol state=floating rectangle=490x260+862+37
-rule Blueman-manager state=floating rectangle=536x420+818+37 #490x260-9+37
-rule scratchpad sticky=on state=floating # SCRATCHPAD
-rule heads-up-display sticky=on state=floating rectangle=360x160+990+35 # Heads Up Display (scratchpad)
-rule Onboard sticky=on state=floating rectangle=700x205+480-89 # Virtual keyboard
-rule Plank layer=above border=off
-rule Protonvpn state=floating
-rule qBittorrent desktop='^2'
-rule discord desktop='^4'
-rule firefox -o desktop=^1
-rule stalonetray state=floating manage=off
-#bspc rule -a Spotify:spotify desktop='^󰲥' state=tiled
-#bspc rule -a '*:spotify' desktop='^3' state=tiled
-
-# ##############################################################################
-# # AUTOSTART APPS #
-# ##############################################################################
-
-# Clear cache
-#rm "$HOME"/.cache/dunst.log
-#rm "$HOME"/.cache/fake_battery_capacity
-#rm "$HOME"/.cache/eww-calendar.lock
-#rm "$HOME"/.cache/eww-escreen.lock
-#rm "$HOME"/.cache/eww-control-center.lock
-#rm -r "$HOME"/.cache/dunst/
-
-# Autostart applications
-#"$HOME"/.config/bspwm/scripts/bspwm_setup_monitors &
-pgrep -x sxhkd > /dev/null || sxhkd &
-pgrep -x plank > /dev/null || plank &
-pgrep -x jgmenu > /dev/null || bspc rule -a jgmenu desktop='^H' state=floating hidden=on && jgmenu --hide-on-startup &
-picom --config "$HOME"/.config/picom/picom.conf &
-rm "$HOME"/.jgmenu-lockfile
-"$HOME"/.config/polybar/launch.sh &
-run_once unclutter & # Remove mouse when idle
-run_once "$HOME"/.scripts/lockscreen-wallpaper &
-run_once xss-lock -- betterlockscreen -l &
-nitrogen --force-setter=xinerama --restore &
-run_once redshift &
-run_once low-bat-notifier &
-pkill persistentQuickUtilities.sh; "$HOME"/.config/bspwm/scripts/persistentQuickUtilities.sh &
-#xfce4-panel --disable-wm-check &
-
-# Start polkit agent
-#[ "$(pidof xfce-polkit)" != "" ] || /usr/lib/xfce-polkit/xfce-polkit &
-run_once /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &
-
-# Volume and brightness indicator (xob)
-source "$HOME"/.virtualenvs/bin/activate # Activate virtual environment
-run_once "$HOME"/.config/xob/launch.sh &
-deactivate # Deactivate virtual environment
-
-# Eww
-pkill eww
-eww daemon
-
-xset m 0 0 # Disable mouse drift
-
-pgrep -x plank.sh > /dev/null || plank.sh &
-
-#wmname LG3D # Fixes Java applications
-# Solve java apps issues (e.g. JetBrains IDEs like PyCharm, CLion, etc). #
-#export _JAVA_AWT_WM_NONREPARENTING=1
-
-#export QT_QPA_PLATFORMTHEME="qt5ct" # Use qt5ct to set Qt theme
-
-# Start MPD and mpDris2
-#exec mpd &
-#exec mpDris2 &
-
-# Systray
-#run_once signal-desktop --start-in-tray & #--use-tray-icon
-#run_once onboard --not-show-in=DESKTOPS &
-if ! pgrep -x "stalonetray" > /dev/null; then
- stalonetray &
-fi
-
-declare -a restart=(clipit blueman-applet caffeine)
-for i in "${restart[@]}"; do
- pgrep -x "$i" | xargs kill
- sleep 0.5
- eval "$i" &
-done
-
-while ! pgrep -x "clipit" > /dev/null || ! pgrep -x "blueman-applet" > /dev/null || ! pgrep -x "caffeine" > /dev/null; do
- #sleep 0.5
- systray &
-done
-xdo hide -N stalonetray
-touch "/tmp/syshide.lock"
-
-# ##############################################################################
-# # CONFIGURATION #
-# ##############################################################################
-
-## Config
-PANEL_HEIGHT=24
-config top_padding "$PANEL_HEIGHT"
-config honor_size_hints true
-config automatic_scheme alternate
-config initial_polarity second_child
-config pointer_modifier mod4
-config click_to_focus none
-config pointer_action1 move
-config pointer_action2 resize_side
-config pointer_action3 resize_corner
-config focus_follows_pointer true
-config remove_disabled_monitors true
-config remove_unplugged_monitors true
-config merge_overlapping_monitors true
-config border_width 4
-config border_radius 10
-config window_gap 10
-config split_ratio 0.52
-config borderless_monocle true
-config gapless_monocle true
-config swallow_first_click false
-config normal_border_color "#000000"
-config focused_border_color "#000000"
-config active_border_color "#000000"
-config presel_feedback_color "#BF616A"
-
-# ##############################################################################
-# # MISCELLANEOUS #
-# ##############################################################################
-
-## Fullscreen
-bspc subscribe node_state | while read -r _ _ _ _ state flag; do
- if [[ "$state" != fullscreen ]]; then continue; fi
- if [[ "$flag" == on ]]; then
- xdo lower -N Plank
- #"$(which eww)" -c "$HOME"/.config/eww close-all
- else
- xdo raise -N Plank
- #"$(which eww)" -c "$HOME"/.config/eww open bar
- fi
-done &
-
-## Title-bar
-rm -rf /tmp/title-bar_debug.log
-rm -rf /tmp/title-bar.lock
-
-processes=("title-bar" "update-title" "lemonbar")
-
-for process in "${processes[@]}"; do
- if pidof -q "$process"; then
- pkill -x "$process" > /dev/null; sleep 0.1
- fi
-done
-
-# Check if title-bar is already running
-if ! pgrep -x "title-bar" >/dev/null; then
- # Create a lock file
- lockfile="/tmp/title-bar.lock"
-
- # Check if the lock file exists
- if [ ! -e "$lockfile" ]; then
- # Create the lock file
- touch "$lockfile"
-
- # Function to handle BSPWM events
- handle_bspwm_events() {
- while read; do
- if ! pgrep -x "title-bar" >/dev/null; then
- bash "$HOME/.scripts/title-bar" &
- fi
- done
- }
-
- # Start bspc subscribe in the background and pass events to the handler function
- bspc subscribe | handle_bspwm_events &
-
- # Remove the lock file when the script exits
- trap 'rm -f "$lockfile"' EXIT
- else
- echo "title-bar is already running."
- fi
-fi
-
-start_dunst() {
- # stop dunst if it has been started by any application that called notify-send
- killall -q dunst
- # Wait until the processes have been shut down
- while pgrep -u "$UID" -x dunst >/dev/null; do sleep .05; done
- while ! pgrep -u "$UID" -x dunst >/dev/null; do sleep .05; done
-}
-start_dunst &
-
-config external_rules_command ~/.config/bspwm/scripts/external_rules.sh &
diff --git a/.config/bspwm/scripts/bspdragtofloat b/.config/bspwm/scripts/bspdragtofloat
deleted file mode 100755
index e2f88a2..0000000
--- a/.config/bspwm/scripts/bspdragtofloat
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/env bash
-
-: "${BSPWM_DIR:="${XDG_CONFIG_HOME:-$HOME/.config}/bspwm"}"
-
-status_file="$BSPWM_DIR/tmp/drag_to_float"
-
-[[ "$1" = stop ]] && {
- [[ -e "$status_file" ]] \
- && rm -r -- "$status_file"
- exit
-}
-
-[[ -e "$status_file" ]] \
- && exit
-
-< <(bspc query -T -n pointed.window | jq -r '"\(.id) \(.client.state)"') read -r node node_state
-
-[[ -z "$node" ]] \
- && exit
-
-case "$node_state" in
- floating)
- ;;
- tiled|pseudo_tiled)
- node_tiled_rect=($(bspc query -T -n "$node" | jq -r '.client.tiledRectangle[]'))
- bspc node "$node" -t floating
- xdo move -x "${node_tiled_rect[0]}" -y "${node_tiled_rect[1]}" "$node"
- xdo resize -w "${node_tiled_rect[2]}" -h "${node_tiled_rect[3]}" "$node" ;;
- *) # fullscreen
- exit ;;
-esac
-
-eval "$(xdotool getmouselocation --shell)"
-x="$X" y="$Y"
-touch -- "$status_file"
-while [[ -e "$status_file" ]]; do
- eval "$(xdotool getmouselocation --shell)"
- (( X != x || Y != y )) && {
- bspc node "$node" -v "$((X - x))" "$((Y - y))"
- x="$X" y="$Y"
- }
- sleep .01
-done
-
-[[ -e "$status_file" ]] \
- && rm -r -- "$status_file"
diff --git a/.config/bspwm/scripts/bspswallow b/.config/bspwm/scripts/bspswallow
deleted file mode 100755
index dea343f..0000000
--- a/.config/bspwm/scripts/bspswallow
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-NODE_CURRENT=$(bspc query -N -n focused)
-$@ &
-PID_COMMAND=$!
-WATCH=$(bspc subscribe -c 1 node_add)
-NODE_NEW=${WATCH%% *}
-bspc node -s $NODE_CURRENT
-bspc node $NODE_CURRENT --flag hidden=on
-wait $PID_COMMAND
-bspc node $NODE_CURRENT --flag hidden=off
-bspc node $NODE_CURRENT --focus
diff --git a/.config/bspwm/scripts/bspwindows b/.config/bspwm/scripts/bspwindows
deleted file mode 100755
index 26deeab..0000000
--- a/.config/bspwm/scripts/bspwindows
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-# bspwindows
-# get targets for drawing borders/whatever on in bspwm
-
-target="${1:-active}"
-
-case "$target" in
- active)
- bspc query -N -n .local.descendant_of.window.leaf.!fullscreen
- ;;
- inactive)
- bspc query -N -n .local.!descendant_of.window.leaf.!fullscreen
- ;;
-esac
diff --git a/.config/bspwm/scripts/bspwm-monitor-setup b/.config/bspwm/scripts/bspwm-monitor-setup
deleted file mode 100755
index 6e38bb7..0000000
--- a/.config/bspwm/scripts/bspwm-monitor-setup
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env bash
-
-INTERNAL_MONITOR="eDP"
-EXTERNAL_MONITOR="HDMI-A-0"
-
-monitor_add() {
- # Move first 5 desktops to external monitor
- for desktop in $(bspc query -D --names -m "$INTERNAL_MONITOR" | sed 5q); do
- bspc desktop "$desktop" --to-monitor "$EXTERNAL_MONITOR"
- done
- # Remove default desktop created by bspwm
- bspc desktop Desktop --remove
- # reorder monitors
- bspc wm -O "$EXTERNAL_MONITOR" "$INTERNAL_MONITOR"
-}
-
-monitor_remove() {
- # Add default temp desktop because a minimum of one desktop is required per monitor
- bspc monitor "$EXTERNAL_MONITOR" -a Desktop
-
- # Move all desktops except the last default desktop to internal monitor
- for desktop in $(bspc query -D -m "$EXTERNAL_MONITOR"); do
- bspc desktop "$desktop" --to-monitor "$INTERNAL_MONITOR"
- done
-
- # delete default desktops
- bspc desktop Desktop --remove
- # reorder desktops
- bspc monitor "$INTERNAL_MONITOR" -o 1 2 3 4 5 6 7 8 9 10
-}
-
-if [[ $(xrandr -q | grep "${EXTERNAL_MONITOR} connected") ]]; then
- # set xrandr rules for docked setup
- xrandr --output "$INTERNAL_MONITOR" --mode 1920x1080 --pos 0x0 --rotate normal --output "$EXTERNAL_MONITOR" --primary --mode 1920x1080 --pos 1920x780 --rotate normal
- if [[ $(bspc query -D -m "${EXTERNAL_MONITOR}" | wc -l) -ne 5 ]]; then
- monitor_add
- fi
- bspc wm -O "$EXTERNAL_MONITOR" "$INTERNAL_MONITOR"
-else
- # set xrandr rules for mobile setup
- xrandr --output "$INTERNAL_MONITOR" --primary --mode 1920x1080 --pos 0x0 --rotate normal --output "$EXTERNAL_MONITOR" --off
- if [[ $(bspc query -D -m "${INTERNAL_MONITOR}" | wc -l) -ne 10 ]]; then
- monitor_remove
- fi
-fi
-
-# Set wallpaper
-~/.local/bin/setbg.sh &
-
-# Kill and relaunch polybar
-kill -9 $(pgrep -f 'polybar') >/dev/null 2>&1
-polybar-msg cmd quit >/dev/null 2>&1
-while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done
-if [[ $(xrandr -q | grep "${EXTERNAL_MONITOR} connected") ]]; then
- polybar --reload primary -c ~/.config/polybar/config.ini </dev/null >/var/tmp/polybar-primary.log 2>&1 200>&- &
- polybar --reload secondary -c ~/.config/polybar/config.ini </dev/null >/var/tmp/polybar-secondary.log 2>&1 200>&- &
-else
- polybar --reload primary -c ~/.config/polybar/config.ini </dev/null >/var/tmp/polybar-primary.log 2>&1 200>&- &
-fi
diff --git a/.config/bspwm/scripts/bspwm-toggle-visibility.sh b/.config/bspwm/scripts/bspwm-toggle-visibility.sh
deleted file mode 100755
index 45a4c53..0000000
--- a/.config/bspwm/scripts/bspwm-toggle-visibility.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/bash
-
-# Created By: srdusr
-# Created On: Mon 18 Sep 2023 18:37:21 CAT
-# Project: Bspwm script to toggle visibility of initial window and bring focus back to it
-
-# Get the ID of the currently focused desktop
-current_desktop_id=$(bspc query -D -d focused --names)
-
-# Get the ID of the first hidden window in the current desktop
-hidden_window_id=$(bspc query -N -d "$current_desktop_id" -n .hidden | head -n 1)
-
-# Check if there's a hidden window in the current desktop
-if [[ -n "$hidden_window_id" ]]; then
- # There's a hidden window, so unhide it
- bspc node "$hidden_window_id" -g hidden=off
- # Bring focus back to the previously hidden window
- bspc node -f "$hidden_window_id"
-else
- # There's no hidden window in the current desktop, hide the first available window
- first_window_id=$(bspc query -N -n focused.window)
- bspc node "$first_window_id" -g hidden=on
-fi
diff --git a/.config/bspwm/scripts/close-window b/.config/bspwm/scripts/close-window
deleted file mode 100755
index 8f7f36b..0000000
--- a/.config/bspwm/scripts/close-window
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-#
-# close or kill a bspwm window
-
-# show wallpaper if last tile
-bspc query -N -n .focused.tiled.window &> /dev/null \
- && ! bspc query -N -n .!focused.local.tiled.window &> /dev/null \
- && show-wallpaper -d
-
-# close focused window
-[ "$1" = "kill" ] && bspc node -k || bspc node -c
diff --git a/.config/bspwm/scripts/drag-float b/.config/bspwm/scripts/drag-float
deleted file mode 100755
index 788e978..0000000
--- a/.config/bspwm/scripts/drag-float
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/env bash
-
-: "${BUTTON:=1}"
-
-node="$(bspc query -N -n pointed)"
-
-die() {
- jobs -p | xargs -r -n1 -I{} kill {}
- exit
-}
-
-trap 'die' USR1
-
-{ bspc subscribe node_focus | while read -r _ _ _ wid; do
- (( wid != node )) && break; done; kill -USR1 "$$" ;} &
-{ while xinput list \
- | sed -nE 's,.*id=([0-9]+).*slave\s+pointer.*,\1,p' \
- | xargs -r -n1 -I{} xinput query-state {} 2> /dev/null \
- | grep -qF "button[${BUTTON}]=down"; do sleep .3; done; kill -USR1 "$$" ;} &
-
-if bspc node "$node.tiled" -f; then
- node_tiled_rect=($(bspc query -T -n "$node" | jq -r '.client.tiledRectangle[]'))
- bspc node "$node" -t floating
- xdo move -x "${node_tiled_rect[0]}" -y "${node_tiled_rect[1]}" "$node"
- xdo resize -w "${node_tiled_rect[2]}" -h "${node_tiled_rect[3]}" "$node"
-elif bspc node "$node.floating" -f; then
- :
-else
- die
-fi
-
-eval "$(xdotool getmouselocation --shell)"
-x="$X" y="$Y"
-while :; do
- eval "$(xdotool getmouselocation --shell)"
- (( X != x || Y != y )) && {
- bspc node "$node" -v "$((X - x))" "$((Y - y))"
- x="$X" y="$Y"
- }
-done
-
-wait
diff --git a/.config/bspwm/scripts/external_rules.sh b/.config/bspwm/scripts/external_rules.sh
deleted file mode 100755
index 7b07ae8..0000000
--- a/.config/bspwm/scripts/external_rules.sh
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/bin/env bash
-#
-# external_rules_command
-#
-# Absolute path to the command used to retrieve rule consequences.
-# The command will receive the following arguments: window ID, class
-# name, instance name, and intermediate consequences. The output of
-# that command must have the following format: key1=value1
-# key2=value2 ... (the valid key/value pairs are given in the
-# description of the rule command).
-#
-#
-# Rule
-# General Syntax
-# rule COMMANDS
-#
-# Commands
-# -a, --add (<class_name>|*)[:(<instance_name>|*)] [-o|--one-shot]
-# [monitor=MONITOR_SEL|desktop=DESKTOP_SEL|node=NODE_SEL]
-# [state=STATE] [layer=LAYER] [split_dir=DIR] [split_ratio=RATIO]
-# [(hidden|sticky|private|locked|marked|center|follow|manage|focus|border)=(on|off)]
-# [rectangle=WxH+X+Y]
-# Create a new rule.
-#
-# -r, --remove
-# ^<n>|head|tail|(<class_name>|*)[:(<instance_name>|*)]...
-# Remove the given rules.
-#
-# -l, --list
-# List the rules.
-
-# Programs to specific desktops
-wid=$1
-class=$2
-instance=$3
-consequences=$4
-
-main() {
- case "$class" in
- firefox)
- if [ "$instance" = "Toolkit" ]; then
- echo "state=floating sticky=on"
- fi
- ;;
- Spotify)
- echo desktop=^5 follow=on focus=on
- ;;
- "")
- sleep 0.5
-
- wm_class=("$(xprop -id "$wid" | grep "WM_CLASS" | grep -Po '"\K[^,"]+')")
-
- class=${wm_class[-1]}
-
- [[ ${#wm_class[@]} == "2" ]] && instance=${wm_class[0]}
-
- [[ -n "$class" ]] && main
- ;;
- esac
-}
-
-main
-
-# Allow floating windows over fullscreen
-wid="$1"
-class="$2"
-instance="$3"
-eval "$4"
-
-[[ "$state" = floating ]] &&
- echo 'layer=above'
diff --git a/.config/bspwm/scripts/hide-window b/.config/bspwm/scripts/hide-window
deleted file mode 100755
index c350a0e..0000000
--- a/.config/bspwm/scripts/hide-window
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/bash
-
-CMD=${1:-help}
-shift
-
-help() {
- echo "Available commands:"
- echo " * unhide - select and unhide window"
-}
-
-unhide() {
- action=${1:-list}
- case $action in
- "list")
- selection=$(for id in "$(bspc query -N -n .hidden)"; do
- title=$(xtitle "$id")
- [[ -z "$title" ]] && title="<unnamed>"
- echo "$id" "$title"
- done | rofi -dmenu -i -p "Hidden windows" | cut -f1 -d' ')
-
- [[ -z "$selection" ]] && exit 1
-
- bspc node "$selection" -g hidden=off
- ;;
- esac
- }
-
- case $CMD in
- "help")
- help
- ;;
- "unhide")
- unhide "$1"
- ;;
- *)
- help
- ;;
- esac
diff --git a/.config/dunst/assets/notification/fallback.png b/.config/dunst/assets/notification/fallback.png
deleted file mode 100644
index 204aeda..0000000
--- a/.config/dunst/assets/notification/fallback.png
+++ /dev/null
Binary files differ
diff --git a/.config/dunst/assets/notification/music.png b/.config/dunst/assets/notification/music.png
deleted file mode 100644
index ae91be3..0000000
--- a/.config/dunst/assets/notification/music.png
+++ /dev/null
Binary files differ
diff --git a/.config/dunst/assets/notification/scrot.png b/.config/dunst/assets/notification/scrot.png
deleted file mode 100644
index 1e12f38..0000000
--- a/.config/dunst/assets/notification/scrot.png
+++ /dev/null
Binary files differ
diff --git a/.config/dunst/assets/ui/volume-high.svg b/.config/dunst/assets/ui/volume-high.svg
deleted file mode 100644
index 43152c9..0000000
--- a/.config/dunst/assets/ui/volume-high.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="#eceff4" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-volume-2"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><path d="M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07"></path></svg> \ No newline at end of file
diff --git a/.config/dunst/assets/ui/volume-low.svg b/.config/dunst/assets/ui/volume-low.svg
deleted file mode 100644
index 09b3650..0000000
--- a/.config/dunst/assets/ui/volume-low.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="#eceff4" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-volume"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon></svg> \ No newline at end of file
diff --git a/.config/dunst/assets/ui/volume-medium.svg b/.config/dunst/assets/ui/volume-medium.svg
deleted file mode 100644
index 6b3c1fa..0000000
--- a/.config/dunst/assets/ui/volume-medium.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="#eceff4" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-volume-1"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><path d="M15.54 8.46a5 5 0 0 1 0 7.07"></path></svg> \ No newline at end of file
diff --git a/.config/dunst/assets/ui/volume-muted.svg b/.config/dunst/assets/ui/volume-muted.svg
deleted file mode 100644
index 50434d4..0000000
--- a/.config/dunst/assets/ui/volume-muted.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="#BF616A" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-volume-x"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><line x1="23" y1="9" x2="17" y2="15"></line><line x1="17" y1="9" x2="23" y2="15"></line></svg> \ No newline at end of file
diff --git a/.config/dunst/dunstrc b/.config/dunst/dunstrc
deleted file mode 100644
index 8989a2d..0000000
--- a/.config/dunst/dunstrc
+++ /dev/null
@@ -1,456 +0,0 @@
-# See dunst(5) for all configuration options
-
-[global]
- ### Display ###
-
- # Which monitor should the notifications be displayed on.
- monitor = 0
-
- # Display notification on focused monitor. Possible modes are:
- # mouse: follow mouse pointer
- # keyboard: follow window with keyboard focus
- # none: don't follow anything
- #
- # "keyboard" needs a window manager that exports the
- # _NET_ACTIVE_WINDOW property.
- # This should be the case for almost all modern window managers.
- #
- # If this option is set to mouse or keyboard, the monitor option
- # will be ignored.
- follow = none
-
- ### Geometry ###
-
- # dynamic width from 0 to 300
- width = (200, 300)
- # constant width of 300
- # width = 300
-
- # The maximum height of a single notification, excluding the frame.
- height = 300
-
- # Position the notification in the top right corner
- origin = bottom-right
-
- # Offset from the origin
- offset = 6x30
- # offset = 10x35 # i3 gaps = 20x20
- # (H_Right_Gap/2) x (25+V_Bottom_Gap/2)
-
- # Scale factor. It is auto-detected if value is 0.
- scale = 0
-
- # Maximum number of notification (0 means no limit)
- notification_limit = 0
-
- ### Progress bar ###
-
- # Turn on the progess bar. It appears when a progress hint is passed with
- # for example dunstify -h int:value:12
- progress_bar = true
-
- # Set the progress bar height. This includes the frame, so make sure
- # it's at least twice as big as the frame width.
- progress_bar_height = 10
-
- # Set the frame width of the progress bar
- progress_bar_frame_width = 1
-
- # Set the minimum width for the progress bar
- progress_bar_min_width = 150
-
- # Set the maximum width for the progress bar
- progress_bar_max_width = 300
-
- # Show how many messages are currently hidden (because of
- # notification_limit).
- indicate_hidden = yes
-
- # The transparency of the window. Range: [0; 100].
- # This option will only work if a compositing window manager is
- # present (e.g. xcompmgr, compiz, etc.). (X11 only)
- transparency = 0
-
- # Draw a line of "separator_height" pixel height between two
- # notifications.
- # Set to 0 to disable.
- separator_height = 2
-
- # Padding between text and separator.
- padding = 11
-
- # Horizontal padding.
- horizontal_padding = 11
-
- # Padding between text and icon.
- text_icon_padding = 0
-
- # Defines width in pixels of frame around the notification window.
- # Set to 0 to disable.
- frame_width = 2
-
- # Define a color for the separator.
- # possible values are:
- # * auto: dunst tries to find a color fitting to the background;
- # * foreground: use the same color as the foreground;
- # * frame: use the same color as the frame;
- # * anything else will be interpreted as a X color.
- separator_color = "#1a1b26"
-
- # Sort messages by urgency.
- sort = yes
-
- # Don't remove messages, if the user is idle (no mouse or keyboard input)
- # for longer than idle_threshold seconds.
- # Set to 0 to disable.
- # A client can set the 'transient' hint to bypass this. See the rules
- # section for how to disable this if necessary
- idle_threshold = 120
-
- ### Text ###
-
- font = JetBrainsMono Nerd Font Medium 9
-
- # The spacing between lines. If the height is smaller than the
- # font height, it will get raised to the font height.
- line_height = 5
-
- # Possible values are:
- # full: Allow a small subset of html markup in notifications:
- # <b>bold</b>
- # <i>italic</i>
- # <s>strikethrough</s>
- # <u>underline</u>
- #
- # For a complete reference see
- # <https://docs.gtk.org/Pango/pango_markup.html>.
- #
- # strip: This setting is provided for compatibility with some broken
- # clients that send markup even though it's not enabled on the
- # server. Dunst will try to strip the markup but the parsing is
- # simplistic so using this option outside of matching rules for
- # specific applications *IS GREATLY DISCOURAGED*.
- #
- # no: Disable markup parsing, incoming notifications will be treated as
- # plain text. Dunst will not advertise that it has the body-markup
- # capability if this is set as a global setting.
- #
- # It's important to note that markup inside the format option will be parsed
- # regardless of what this is set to.
- markup = full
-
- # The format of the message. Possible variables are:
- # %a appname
- # %s summary
- # %b body
- # %i iconname (including its path)
- # %I iconname (without its path)
- # %p progress value if set ([ 0%] to [100%]) or nothing
- # %n progress value if set without any extra characters
- # %% Literal %
- # Markup is allowed
- format = "<b>%s</b>\n%b"
-
- # Alignment of message text.
- # Possible values are "left", "center" and "right".
- alignment = center
-
- # Vertical alignment of message text and icon.
- # Possible values are "top", "center" and "bottom".
- vertical_alignment = center
-
- # Show age of message if message is older than show_age_threshold
- # seconds.
- # Set to -1 to disable.
- show_age_threshold = 60
-
- # Specify where to make an ellipsis in long lines.
- # Possible values are "start", "middle" and "end".
- ellipsize = middle
-
- # Ignore newlines '\n' in notifications.
- ignore_newline = no
-
- # Stack together notifications with the same content
- stack_duplicates = true
-
- # Hide the count of stacked notifications with the same content
- hide_duplicate_count = true
-
- # Display indicators for URLs (U) and actions (A).
- show_indicators = yes
-
- ### Icons ###
-
- # Align icons left/right/off
- icon_position = left
-
- # Scale small icons up to this size, set to 0 to disable. Helpful
- # for e.g. small files or high-dpi screens. In case of conflict,
- # max_icon_size takes precedence over this.
- min_icon_size = 0
-
- # Scale larger icons down to this size, set to 0 to disable
- max_icon_size = 32
-
- # Paths to default icons.
- #icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
- #icon_path = /usr/share/icons/Qogir/16/status:/usr/share/icons/Qogir/16/devices/:/usr/share/icons/Qogir/16/apps/:/usr/share/pixmaps/
- icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
-
- ### History ###
-
- # Should a notification popped up from history be sticky or timeout
- # as if it would normally do.
- sticky_history = yes
-
- #history_file = ~/.cache/dunst/history
-
- # Maximum amount of notifications kept in history
- rhistory_length = 100
-
- ### Misc/Advanced ###
-
- # dmenu path.
- dmenu = /usr/bin/dmenu -p dunst:
-
- # Browser for opening urls in context menu.
- browser = /usr/bin/brave
-
- # Always run rule-defined scripts, even if the notification is suppressed
- always_run_script = true
-
- # Define the title of the windows spawned by dunst
- title = Dunst
-
- # Define the class of the windows spawned by dunst
- class = Dunst
-
- # Define the corner radius of the notification window
- # in pixel size. If the radius is 0, you have no rounded
- # corners.
- # The radius will be automatically lowered if it exceeds half of the
- # notification height to avoid clipping text and/or icons.
- corner_radius = 10
-
- # Ignore the dbus closeNotification message.
- # Useful to enforce the timeout set by dunst configuration. Without this
- # parameter, an application may close the notification sent before the
- # user defined timeout.
- ignore_dbusclose = false
-
- ### Wayland ###
- # These settings are Wayland-specific. They have no effect when using X11
-
- # Uncomment this if you want to let notications appear under fullscreen
- # applications (default: overlay)
- # layer = top
-
- # Set this to true to use X11 output on Wayland.
- force_xwayland = false
-
- ### Legacy
-
- # Use the Xinerama extension instead of RandR for multi-monitor support.
- # This setting is provided for compatibility with older nVidia drivers that
- # do not support RandR and using it on systems that support RandR is highly
- # discouraged.
- #
- # By enabling this setting dunst will not be able to detect when a monitor
- # is connected or disconnected which might break follow mode if the screen
- # layout changes.
- force_xinerama = false
-
- ### mouse
-
- # Defines list of actions for each mouse event
- # Possible values are:
- # * none: Don't do anything.
- # * do_action: Invoke the action determined by the action_name rule. If there is no
- # such action, open the context menu.
- # * open_url: If the notification has exactly one url, open it. If there are multiple
- # ones, open the context menu.
- # * close_current: Close current notification.
- # * close_all: Close all notifications.
- # * context: Open context menu for the notification.
- # * context_all: Open context menu for all notifications.
- # These values can be strung together for each mouse event, and
- # will be executed in sequence.
- mouse_left_click = close_current
- mouse_middle_click = do_action, close_current
- mouse_right_click = close_all
-
-# Experimental features that may or may not work correctly. Do not expect them
-# to have a consistent behaviour across releases.
-[experimental]
- # Calculate the dpi to use on a per-monitor basis.
- # If this setting is enabled the Xft.dpi value will be ignored and instead
- # dunst will attempt to calculate an appropriate dpi value for each monitor
- # using the resolution and physical size. This might be useful in setups
- # where there are multiple screens with very different dpi values.
- per_monitor_dpi = false
-
-# Every section that isn't one of the above is interpreted as a rules to
-# override settings for certain messages.
-#
-# Messages can be matched by
-# appname (discouraged, see desktop_entry)
-# body
-# category
-# desktop_entry
-# icon
-# match_transient
-# msg_urgency
-# stack_tag
-# summary
-#
-# and you can override the
-# background
-# foreground
-# format
-# frame_color
-# fullscreen
-# new_icon
-# set_stack_tag
-# set_transient
-# set_category
-# timeout
-# urgency
-# skip_display
-# history_ignore
-# action_name
-# word_wrap
-# ellipsize
-# alignment
-#
-# Shell-like globbing will get expanded.
-#
-# Instead of the appname filter, it's recommended to use the desktop_entry filter.
-# GLib based applications export their desktop-entry name. In comparison to the appname,
-# the desktop-entry won't get localized.
-#
-# SCRIPTING
-# You can specify a script that gets run when the rule matches by
-# setting the "script" option.
-# The script will be called as follows:
-# script appname summary body icon urgency
-# where urgency can be "LOW", "NORMAL" or "CRITICAL".
-#
-# NOTE: It might be helpful to run dunst -print in a terminal in order
-# to find fitting options for rules.
-
-# Disable the transient hint so that idle_threshold cannot be bypassed from the
-# client
-#[transient_disable]
-# match_transient = yes
-# set_transient = no
-#
-# Make the handling of transient notifications more strict by making them not
-# be placed in history.
-#[transient_history_ignore]
-# match_transient = yes
-# history_ignore = yes
-
-# fullscreen values
-# show: show the notifications, regardless if there is a fullscreen window opened
-# delay: displays the new notification, if there is no fullscreen window active
-# If the notification is already drawn, it won't get undrawn.
-# pushback: same as delay, but when switching into fullscreen, the notification will get
-# withdrawn from screen again and will get delayed like a new notification
-#[fullscreen_delay_everything]
-# fullscreen = delay
-[fullscreen_show_critical]
- msg_urgency = critical
- fullscreen = show
-[fullscreen_show_normal]
- msg_urgency = normal
- fullscreen = show
-
-
-#[espeak]
-# summary = "*"
-# script = dunst_espeak.sh
-
-#[script-test]
-# summary = "*script*"
-# script = dunst_test.sh
-
-#[ignore]
-# # This notification will not be displayed
-# summary = "foobar"
-# skip_display = true
-
-#[history-ignore]
-# # This notification will not be saved in history
-# summary = "foobar"
-# history_ignore = yes
-
-#[skip-display]
-# # This notification will not be displayed, but will be included in the history
-# summary = "foobar"
-# skip_display = yes
-
-#[signed_on]
-# appname = Pidgin
-# summary = "*signed on*"
-# urgency = low
-#
-#[signed_off]
-# appname = Pidgin
-# summary = *signed off*
-# urgency = low
-#
-#[says]
-# appname = Pidgin
-# summary = *says*
-# urgency = critical
-#
-#[twitter]
-# appname = Pidgin
-# summary = *twitter.com*
-# urgency = normal
-#
-
-[openEwwPopup]
- script = ~/.config/dunst/scripts/openEwwPopup.sh
-
-[songArtLogger]
- script = ~/.config/dunst/scripts/songArtLogger.sh
-
-[stack-volumes]
- appname = "some_volume_notifiers"
- set_stack_tag = "volume"
-
-[flameshot-urgency]
- appname = flameshot
- urgency = low
-
-[whatsapp-alignment]
- appname = whatsapp-nativefier-d40211
- alignment = left
-
-[discord-alignment]
- appname = discord
- alignment = left
-
-[signal-alignment]
- appname = Signal
- alignment = left
-
-[urgency_low]
- background = "#16161e"
- foreground = "#c0caf5"
- frame_color = "#1f2335"
- timeout = 3
-
-[urgency_normal]
- background = "#16161e"
- foreground = "#c0caf5"
- frame_color = "#3d59a1"
- timeout = 15
-
-[urgency_critical]
- background = "#191D24"
- foreground = "#c0caf5"
- frame_color = "#db4b4b"
- timeout = 60
diff --git a/.config/dunst/scripts/openEwwPopup.sh b/.config/dunst/scripts/openEwwPopup.sh
deleted file mode 100755
index d22e981..0000000
--- a/.config/dunst/scripts/openEwwPopup.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/bash
-
-DND_LOCK_FILE="$HOME/.cache/dnd-lock.lock"
-EWW_BIN="$HOME/.local/bin/eww"
-
-finish() {
- ${EWW_BIN} update noti=false; sleep 0.075
- ${EWW_BIN} close notification-popup
-}
-
-# Run eww daemon if not running
-if [[ ! `pidof eww` ]]; then
- ${EWW_BIN} daemon
- sleep 1
-else
- if [[ ! -f "$DND_LOCK_FILE" ]]; then
- KILLED=false
- for pid in $(pidof -x openEwwPopup.sh); do
- if [ $pid != $$ ]; then
- kill -9 $pid
- KILLED=true
- fi
- done >/dev/nullx
-
- if ! $KILLED; then
- sleep 0.5
- ${EWW_BIN} update noti=true
- ${EWW_BIN} open notification-popup
- canberra-gtk-play -i message
- fi
-
- sleep 5
- finish
- unset KILLED
- fi
-fi
diff --git a/.config/dunst/scripts/songArtLogger.sh b/.config/dunst/scripts/songArtLogger.sh
deleted file mode 100755
index f73beb4..0000000
--- a/.config/dunst/scripts/songArtLogger.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-
-TMP_DIR="$HOME/.cache/dunst"
-TMP_COVER_PATH="$TMP_DIR/$DUNST_SUMMARY.png"
-TMP_TEMP_PATH="$TMP_DIR/temp.png"
-
-if [ ! -d "$TMP_DIR" ]; then
- mkdir -p "$TMP_DIR"
-fi
-
-ART_FROM_SPOTIFY="$(playerctl -p %any,spotify metadata mpris:artUrl | sed -e 's/open.spotify.com/i.scdn.co/g')"
-
-if [[ $(playerctl -p spotify,%any,firefox,chromium,brave,mpd metadata mpris:artUrl) ]]; then
- curl -s "$ART_FROM_SPOTIFY" --output "$TMP_COVER_PATH"
-fi
-
-cp "$TMP_TEMP_PATH" "$TMP_COVER_PATH" \ No newline at end of file
diff --git a/.config/eww/eww.scss b/.config/eww/eww.scss
deleted file mode 100644
index 9405a6a..0000000
--- a/.config/eww/eww.scss
+++ /dev/null
@@ -1,11 +0,0 @@
-@import "./src/scss/variables";
-@import "./src/scss/overrides";
-@import "./src/scss/modules";
-
-@import "./src/scss/bar/index.scss";
-@import "./src/scss/control-center/index.scss";
-@import "./src/scss/exitscreen/index.scss";
-@import "./src/scss/info-center/index.scss";
-@import "./src/scss/lockscreen/index.scss";
-@import "./src/scss/notification-center/index.scss";
-@import "./src/scss/notification-popup/index.scss";
diff --git a/.config/eww/eww.yuck b/.config/eww/eww.yuck
deleted file mode 100644
index 191b30c..0000000
--- a/.config/eww/eww.yuck
+++ /dev/null
@@ -1,23 +0,0 @@
-(include "./src/yuck/_variables.yuck")
-(include "./src/yuck/_modules.yuck")
-
-(include "./src/yuck/bar/_widgets.yuck")
-(include "./src/yuck/bar/_windows.yuck")
-
-(include "./src/yuck/control-center/_widgets.yuck")
-(include "./src/yuck/control-center/_windows.yuck")
-
-(include "./src/yuck/exitscreen/_widgets.yuck")
-(include "./src/yuck/exitscreen/_windows.yuck")
-
-(include "./src/yuck/info-center/_widgets.yuck")
-(include "./src/yuck/info-center/_windows.yuck")
-
-(include "./src/yuck/lockscreen/_widgets.yuck")
-(include "./src/yuck/lockscreen/_windows.yuck")
-
-(include "./src/yuck/notification-center/_widgets.yuck")
-(include "./src/yuck/notification-center/_windows.yuck")
-
-(include "./src/yuck/notification-popup/_widgets.yuck")
-(include "./src/yuck/notification-popup/_windows.yuck")
diff --git a/.config/hypr/autostart b/.config/hypr/autostart
deleted file mode 100755
index 2805e42..0000000
--- a/.config/hypr/autostart
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/bash
-
-# Policy Authentication Agent
-/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &
-
-eval "$(/usr/bin/gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh)"
-export "$(gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh)"
-
-# Setup Environment
-systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP &
-dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP --all &
-#dbus-update-activation-environment DISPLAY XAUTHORITY WAYLAND_DISPLAY &
-
-# variables
-scripts=~/.scripts
-
-# gsettings
-#gsettings set org.gnome.desktop.interface gtk-theme 'Tokyonight-Dark-BL-LB'
-#gsettings set org.gnome.desktop.interface font-name 'CaskaydiaCove Nerd Font 9'
-#gsettings set org.gnome.desktop.interface icon-theme 'Tokyonight-Moon'
-#gsettings set org.gnome.desktop.interface cursor-theme 'Sweet-cursors'
-
-# For nemo
-gsettings set org.cinnamon.desktop.default-applications.terminal exec wezterm
-
-# music daemon
-mpd &
-
-# other
-hyprctl setcursor Sweet-cursors 24
-wl-paste --watch cliphist store &
-notify-send -a aurora "hello $(whoami)" &
-sleep 2
-mpd-mpris &
diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf
deleted file mode 100644
index 620dc55..0000000
--- a/.config/hypr/hyprland.conf
+++ /dev/null
@@ -1,175 +0,0 @@
-# Sourcing external config files
-source=~/.config/hypr/user/monitors.conf
-source=~/.config/hypr/user/exec.conf
-source=~/.config/hypr/user/env.conf
-source=~/.config/hypr/user/binds.conf
-source=~/.config/hypr/user/window_rules.conf
-
-
-# Defaults
-$term = wezterm
-$browser = firefox
-#$gmail = firefox --new-instance -P app "https://mail.google.com/" --class appProfile
-$editor = nvim
-#$explorer = nemo
-#$music = g4music
-$notepad = code --profile notepad --unity-launch ~/Templates
-$launcher = wofi --show drun -n
-$launcher_alt = wofi --show run -n
-#$discord = discord
-#env = GTK_THEME,Breeze-Dark
-
-
-general {
- gaps_in = 5
- gaps_out = 5
- border_size = 2
- col.active_border = rgba(cba6f7ff) rgba(89b4faff) rgba(94e2d5ff) 10deg
- col.inactive_border = 0xff313244
- # whether to apply the sensitivity to raw input (e.g. used by games where you aim using your mouse)
- apply_sens_to_raw = 0
- layout = "master";
- resize_on_border = yes
- extend_border_grab_area = 20
-}
-
-
-input {
- kb_layout = custom-us
- #sensitivity = 0.75 # for mouse cursor
- sensitivity = 0
- follow_mouse = 0
- scroll_method = 2fg
-
- touchpad {
- natural_scroll = false
- disable_while_typing = true
- tap-to-click = true
- }
-}
-
-
-decoration {
- rounding = 10
- active_opacity = 0.95
- inactive_opacity = 0.9
- fullscreen_opacity = 0.95
-
- dim_inactive = false
- dim_strength = 0.05
-
- blur {
- enabled = true
- #enabled = false
- size = 3
- passes = 1
-
- vibrancy = 0.1696
- }
-
- drop_shadow = true
- shadow_range = 4
- shadow_render_power = 3
- col.shadow = rgba(1a1a1aee)
- #blur = true
- #blur_size = 5
- #blur_passes = 4
- #blur_new_optimizations = true
- #blur_xray = true
- #blur_ignore_opacity = true
-
- #drop_shadow = true
- #shadow_ignore_window = true
- #shadow_range = 20
- #shadow_render_power = 3
- #col.shadow = 0x55161925
- col.shadow_inactive = 0x22161925
- # Your blur "amount" is blur_size * blur_passes, but high blur_size (over around 5-ish) will produce artifacts.
- # if you want heavy blur, you need to up the blur_passes.
- # the more passes, the more you can up the blur_size without noticing artifacts.
-
- # Blurring layerSurfaces
- # blurls = gtk-layer-shell
- # blurls = waybar
- # blurls = lockscreen
- blurls = rofi
- blurls = wofi
- blurls = firefox
-}
-
-
-animations {
- enabled = true
- # bezier = overshot, 0.05, 0.9, 0.1, 1.1
- bezier = overshot, 0.13, 0.99, 0.29, 1.1
- animation = windows, 1, 4, overshot, slide
- animation = border, 1, 10, default
- animation = fade, 1, 10, default
- animation = workspaces, 1, 6, overshot, slidevert
-}
-
-
-dwindle {
- pseudotile = true # enable pseudotiling on dwindle
- force_split = 0
- #col.group_border = 0xff89dceb
- #col.group_border_active = 0xfff9e2af
- preserve_split = true
-}
-
-
-master {
- new_on_top = true
- no_gaps_when_only = false
-}
-
-
-gestures {
- workspace_swipe = true
- workspace_swipe_invert = false
- workspace_swipe_fingers = 3
-}
-
-
-misc {
- disable_hyprland_logo = true
-
- focus_on_activate = true
-
- enable_swallow = true
- #swallow_regex = ^(scratchpad)$
-}
-
-
-binds {
- allow_workspace_cycles = true
-}
-
-
-custom {
-
-}
-
-
-layerrule = blur, bar0
-layerrule = noanim, bar0
-layerrule = ignorealpha 0.2, bar0
-layerrule = blur, dock0
-layerrule = noanim, dock0
-layerrule = ignorealpha 0.2, dock0
-layerrule = blur, indicator0
-layerrule = ignorealpha 0.2, indicator0
-layerrule = blur, toolbox0
-layerrule = noanim, toolbox0
-layerrule = ignorealpha 0.2, toolbox0
-layerrule = blur, applauncher
-layerrule = ignorealpha 0.2, applauncher
-layerrule = blur, datemenu
-layerrule = ignorealpha 0.2, datemenu
-layerrule = blur, quicksettings
-layerrule = ignorealpha 0.2, quicksettings
-layerrule = blur, wlroots
-layerrule = ignorealpha 0.2, wlroots
-layerrule = blur, notifications0
-layerrule = ignorealpha 0.2, notifications0
-
diff --git a/.config/hypr/scripts/move-scratchpad.sh b/.config/hypr/scripts/move-scratchpad.sh
deleted file mode 100755
index a8d0731..0000000
--- a/.config/hypr/scripts/move-scratchpad.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/bash
-
-# Number of pixels to move down
-pixels_to_move=10
-
-# Get the PID of each scratchpad window and move it down
-for pid in "$(hyprctl -j clients | jq -r '.[] | select(.class == "scratchpad") | .pid')"; do
- hyprctl dispatch movewindowpixel 0 "$pixels_to_move",pid:"$pid"
-done
diff --git a/.config/hypr/user/binds.conf b/.config/hypr/user/binds.conf
deleted file mode 100644
index a337a0e..0000000
--- a/.config/hypr/user/binds.conf
+++ /dev/null
@@ -1,167 +0,0 @@
-# Window Manager keybindings
-
-# Scratchpad
-bind = SUPER, semicolon, exec, ~/.scripts/scratchpad && bash ~/.config/hypr/scripts/move-scratchpad.sh
-bind = SUPER, X, exec, ~/.scripts/scratchpad && bash ~/.config/hypr/scripts/move-scratchpad.sh
-#bind = SUPER, semicolon, exec, ~/.scripts/scratchpad
-#bind = SUPER, X, exec, ~/.scripts/scratchpad
-
-# HUD
-bind = SUPER, E, exec, ~/.scripts/heads-up-display
-
-# Package manager Terminal
-bind = SUPER, Q, exec, ~/.scripts/pac
-
-# Mouse binds
-bindm = SUPER, mouse:272, movewindow
-bindm = SUPER, mouse:273, resizewindow
-bind = SUPER, mouse_down, workspace, e-1
-bind = SUPER, mouse_up, workspace, e+1
-
-# Screenshot binds
-bind = , Print, exec,~/.scripts/screenshot_full
-bind = ALT, Print, exec,~/.scripts/screenshot
-
-# Application binds
-$term=wezterm
-bind = SUPER, T, exec, $term -e tmux new-session -A -s term
-bind = SUPER, Enter, exec, $term -e tmux new-session -A -s term
-bind = SUPER, W, exec, $browser
-#bind = SUPER, G, exec, $notepad
-
-# ags
-bind = SUPER_SHIFT, R, exec, ags -q; ags; notify-send "ags reloaded"
-bind=SUPER, Space, exec, ags -t launcher
-bind=,XF86PowerOff, exec, ags -t powermenu
-bind=SUPER, escape, exec, ags -t powermenu
-bind=SUPER, Tab, exec, ags -t overview
-#bind = SUPER, Space, exec, ags -r "toggleLauncher()"
-
-# Clipboard
-bind = SUPER, V, exec, pkill wofi || cliphist list | wofi --dmenu -p clippick -l top_right -x -15 -y 10 -n | cliphist decode | wl-copy
-
-
-# Hyprland keys
-bind=SUPER_SHIFT,Escape,exec,hyprctl reload; notify-send "Config Reloaded"
-bind = SUPER, D, killactive,
-#bind = SUPER_SHIFT, S, movetoworkspace,special
-#bind = SUPER, S, togglespecialworkspace,
-
-
-# Other dispatchers
-bind = ALT, Tab, cyclenext
-bind = SUPER, C, cyclenext
-bind = SUPER, F, fullscreen
-#bind = SUPER, T, exec, hyprctl dispatch centerwindow none
-bind = SUPER, M, fullscreen, 1
-bind = SUPER_SHIFT, M, fakefullscreen
-
-
-bind = SUPER, P, pseudo,
-bind = SUPER, S, togglefloating,
-bind = SUPER_SHIFT, G, togglegroup,
-bind = SUPER, tab, changegroupactive,
-bind = SUPER_SHIFT, I, togglesplit, # dwindle
-
-
-# Move window with SUPER + Shift + arrow keys
-# [↑]
-# [←] [↓] [→]
-bind = SUPER_SHIFT, left, movewindow, l
-bind = SUPER_SHIFT, right, movewindow, r
-bind = SUPER_SHIFT, up, movewindow, u
-bind = SUPER_SHIFT, down, movewindow, d
-bind = SUPER_SHIFT, H, movewindow, l
-bind = SUPER_SHIFT, L, movewindow, r
-bind = SUPER_SHIFT, K, movewindow, u
-bind = SUPER_SHIFT, J, movewindow, d
-
-# Move window focus with SUPER + arrow keys
-# [↑]
-# [←] [↓] [→]
-bind = SUPER, left, movefocus, l
-bind = SUPER, right, movefocus, r
-bind = SUPER, up, movefocus, u
-bind = SUPER, down, movefocus, d
-bind = SUPER, H, movefocus, l
-bind = SUPER, L, movefocus, r
-bind = SUPER, K, movefocus, u
-bind = SUPER, J, movefocus, d
-
-# Move To a workspaces
-bind = SUPER, 1, workspace, 1
-bind = SUPER, 2, workspace, 2
-bind = SUPER, 3, workspace, 3
-bind = SUPER, 4, workspace, 4
-bind = SUPER, 5, workspace, 5
-bind = SUPER, 6, workspace, 6
-bind = SUPER, 7, workspace, 7
-bind = SUPER, 8, workspace, 8
-bind = SUPER, 9, workspace, 9
-
-# Move windows between workspaces
-bind = SUPER_SHIFT, 1, movetoworkspace, 1
-bind = SUPER_SHIFT, 2, movetoworkspace, 2
-bind = SUPER_SHIFT, 3, movetoworkspace, 3
-bind = SUPER_SHIFT, 4, movetoworkspace, 4
-bind = SUPER_SHIFT, 5, movetoworkspace, 5
-bind = SUPER_SHIFT, 6, movetoworkspace, 6
-bind = SUPER_SHIFT, 7, movetoworkspace, 7
-bind = SUPER_SHIFT, 8, movetoworkspace, 8
-bind = SUPER_SHIFT, 9, movetoworkspace, 9
-
-
-# Use this to get thw XF86 bind (FN + Fx combination) for your keyboard
-# xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'
-
-# Volume Control
-#binde = , XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +1%
-#binde = , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -1%
-bind = , XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle
-bind = , XF86AudioMicMute, exec, pactl set-source-mute @DEFAULT_SOURCE@ toggle
-bind = ALT, down, exec, pactl set-sink-volume @DEFAULT_SINK@ -5%
-bind = ALT, up, exec, pactl set-sink-volume @DEFAULT_SINK@ +5%
-
-# Media Control
-bind = , XF86AudioMedia, exec, playerctl play-pause
-bind = , XF86AudioPlay, exec, playerctl play-pause
-bind = , XF86AudioStop, exec, playerctl stop
-bind = , XF86AudioPrev, exec, playerctl previous
-bind = , XF86AudioNext, exec, playerctl next
-
-# Use arrow keys as multimedia keys
-bind = ALT_SHIFT, left, exec, playerctl previous
-bind = ALT_SHIFT, up, exec, playerctl play-pause
-bind = ALT_SHIFT, right, exec, playerctl next
-
-# Brightness Control
-binde = , XF86MonBrightnessUp, exec, light -A 1
-binde = , XF86MonBrightnessDown, exec, light -U 1
-
-bind = ALT, left, exec, brightnessctl set 10%- # Screen brightness down FN+F7
-bind = ALT, right, exec, brightnessctl set 10%+ # Screen brightness up FN+F8
-
-# Screensaver key
-bind = , XF86ScreenSaver, exec,~/.scripts/lock
-
-bind = SUPER_SHIFT, Y, exec, spotify
-bind = SUPER_SHIFT, D, exec, discord
-bind = SUPER , W, exec, firefox
-bind = SUPER_SHIFT, B, exec, rofi-rbw
-
-# Others
-#bind = , XF86Mail, exec,$gmail
-#bind = , XF86HomePage, exec, $explorer ~/
-#bind = , XF86Calculator, exec, qalculate-gtk
-#bind = , XF86Search, exec, wofi
-
-$mainMod = SUPER
-bind = $mainMod, tilde, exec, ~/.scripts/translate.sh
-bind = $mainMod CONTROL, k, exec, ~/.scripts/killmenu
-
-
-
-# trigger when the switch is turning on
-# bindl = , switch:on:Lid Switch, exec, hyprctl keyword monitor ", 1920x1080@60, auto, 1"
-# trigger when the switch is turning off
-bindl = , switch:off:Lid Switch, exec, playerctl --all-players stop; ~/.scripts/lock; systemctl suspend
diff --git a/.config/hypr/user/env.conf b/.config/hypr/user/env.conf
deleted file mode 100644
index 93f7694..0000000
--- a/.config/hypr/user/env.conf
+++ /dev/null
@@ -1,23 +0,0 @@
-#Environment Variables for the Hyprland session
-
-# XDG
-env = XDG_CURRENT_DESKTOP,Hyprland
-env = XDG_SESSION_TYPE,wayland
-env = XDG_SESSION_DESKTOP,Hyprland
-
-# QT
-env = QT_AUTO_SCREEN_SCALE_FACTOR,1
-env = QT_QPA_PLATFORM=wayland;xcb # Not yet working for onlyoffice-editor
-env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
-env = QT_QPA_PLATFORMTHEME,qt6ct
-
-# GTK
-#env = GDK_BACKEND=wayland
-
-# Toolkit
-#env = SDL_VIDEODRIVER,wayland
-env = _JAVA_AWT_WM_NONEREPARENTING,1
-env = CLUTTER_BACKEND,wayland
-env = GDK_BACKEND,wayland,x11
-env = MOZ_ENABLE_WAYLAND,1
-
diff --git a/.config/hypr/user/exec.conf b/.config/hypr/user/exec.conf
deleted file mode 100644
index 22846d9..0000000
--- a/.config/hypr/user/exec.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-exec-once=$HOME/.config/hypr/autostart
-exec-once = swww kill; swww init --format xrgb
-exec = ags
-exec =$HOME/.scripts/move-qemu.sh
diff --git a/.config/hypr/user/monitors.conf b/.config/hypr/user/monitors.conf
deleted file mode 100644
index 7464786..0000000
--- a/.config/hypr/user/monitors.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-monitor=auto,preferred,auto, 1, bitdepth,10
-#monitor=, 1920x1080@60, auto, 1
-#monitor=, 1366x768@60, auto, 1
-#monitor=LVDS-1, 1366x768@60, auto, 1, bitdepth,10
diff --git a/.config/hypr/user/window_rules.conf b/.config/hypr/user/window_rules.conf
deleted file mode 100644
index 3964de2..0000000
--- a/.config/hypr/user/window_rules.conf
+++ /dev/null
@@ -1,70 +0,0 @@
-# {{@@ header() @@}}
-# vim:fileencoding=utf-8:ft=conf:foldmethod=marker
-
-# Workspaces
-windowrulev2 = workspace 1 silent, class:firefox
-windowrulev2 = workspace 4 silent, class:discord
-windowrulev2 = workspace 5 silent, class:Spotify
-
-# Scratchpad
-$scratchpad = class:^(scratchpad)$
-windowrulev2 = opacity 1 0.9,class:^(scratchpad)$
-windowrulev2 = float,$scratchpad
-#windowrule = float,^(scratchpad)$
-#windowrule = move 15 40, ^(scratchpad)$
-#windowrule = move center,^(scratchpad)$
-#$scratchpadsize = size 98% 93%
-#windowrulev2 = tile,$scratchpad
-#windowrulev2 = pin,$scratchpad
-#windowrulev2=windowdance,$scratchpad
-#windowrulev2 = move 100%-20,$scratchpad
-#windowrulev2 = $scratchpadsize,$scratchpad
-
-# HUD
-windowrule = float, ^(heads-up-display)$
-windowrule = pin, ^(heads-up-display)$
-windowrule = size 325 160, ^(heads-up-display)$
-windowrule = move 1020 50, ^(heads-up-display)$
-
-# Package manager Terminal
-windowrule = float, ^(pac)$
-windowrule = pin, ^(pac)$
-windowrule = size 325 160, ^(pac)$
-windowrule = move 50 50, ^(pac)$
-
-# Picture-in-Picture
-windowrulev2 = idleinhibit fullscreen, title:^Picture-in-Picture$
-windowrulev2 = float, title:^Picture-in-Picture$
-windowrulev2 = pin, title:^Picture-in-Picture$
-windowrulev2 = move 920 480, title:^Picture-in-Picture$
-windowrulev2 = size 425 260, title:^Picture-in-Picture$
-
-# Firefox
-windowrulev2 = float, class:^(firefox)$, title:^(Firefox — Sharing Indicator)$
-windowrulev2 = opacity 1 1,class:^(firefox)$
-
-# Applications
-windowrule = float,^(rlr)$
-windowrule = float,^(pavucontrol)$
-windowrule = float,^(blueman-manager)$
-windowrule = float,^(nm-connection-editor)$
-windowrule = float,^(mediainfo-gui)$
-windowrulev2 = float, class:^(nemo)$, title:^(.*Properties)$
-windowrulev2 = float, class:^(Nemo-preview-start)$
-windowrulev2 = move 100%-433 53, class:^(wofi)$, title:^(clippick)$
-windowrulev2 = animation popin, class:^(wlogout)$, title:^(wlogout)$
-windowrulev2 = float, class:^(wlogout)$, title:^(wlogout)$
-windowrulev2 = animation slide, class:^(wofi)$
-#windowrulev2 = float, class:^(steam)$
-windowrule = float,^(com.github.neithern.g4music)$
-windowrule = size 670 635,^(com.github.neithern.g4music)$
-windowrule = move center,^(com.github.neithern.g4music)$
-windowrulev2 = opacity 0.0 override,class:^(xwaylandvideobridge)$
-windowrulev2 = noanim,class:^(xwaylandvideobridge)$
-windowrulev2 = noinitialfocus,class:^(xwaylandvideobridge)$
-windowrulev2 = maxsize 1 1,class:^(xwaylandvideobridge)$
-windowrulev2 = noblur,class:^(xwaylandvideobridge)$
-
-# Blur
-windowrule = noblur,^(firefox)$ # disables blur for firefox
-windowrule = noblur,^(scratchpad)$ # disables blur for firefox
diff --git a/.config/inputrc b/.config/inputrc
deleted file mode 100644
index adfeec4..0000000
--- a/.config/inputrc
+++ /dev/null
@@ -1,86 +0,0 @@
-$include /etc/inputrc
-
-"\f": clear-screen
-
-set bell-style none
-set meta-flag on
-set input-meta on
-set convert-meta off
-set output-meta on
-set show-all-if-ambiguous on # set show-all-if-unmodified on
-
-# Color files by types
-# Note that this may cause completion text blink in some terminals (e.g. xterm).
-set colored-stats On
-# Append char to indicate type
-set visible-stats On
-# Mark symlinked directories
-set mark-symlinked-directories On
-# Color the common prefix
-set colored-completion-prefix On
-# Color the common prefix in menu-complete
-set menu-complete-display-prefix On
-
-# set editing-mode vi
-set show-mode-in-prompt on
-set keyseq-timeout 0 # Reduce the delay between pressing escape and the cursor change
-set vi-cmd-mode-string "\1\e[2 q\2"
-set vi-ins-mode-string "\1\e[6 q\2"
-
-$if mode=vi
- set keymap vi-command
- # these are for vi-command mode
- "\e[A": history-search-backward
- "\e[B": history-search-forward
- j: history-search-forward
- k: history-search-backward
- set keymap vi-insert
- # these are for vi-insert mode
- "\e[A": history-search-backward
- "\e[B": history-search-forward
- "jk" # escape
-$endif
-
-$if mode=emacs
-
- "\C-P": history-search-backward
- "\C-N": history-search-forward
-
- # for linux console and RH/Debian xterm
- "\e[1~": beginning-of-line
- "\e[4~": end-of-line
- "\e[5~": beginning-of-history
- "\e[6~": end-of-history
- "\e[7~": beginning-of-line
- "\e[3~": delete-char
- "\e[2~": quoted-insert
- "\e[5C": forward-word
- "\e[5D": backward-word
- "\e\e[C": forward-word
- "\e\e[D": backward-word
- "\e[1;5C": forward-word
- "\e[1;5D": backward-word
-
- # for rxvt
- "\e[8~": end-of-line
-
- # for non RH/Debian xterm, can't hurt for RH/DEbian xterm
- "\eOH": beginning-of-line
- "\eOF": end-of-line
-
- # for freebsd console
- "\e[H": beginning-of-line
- "\e[F": end-of-line
-
-$endif
-
-#set editing-mode emacs
-set editing-mode vi
-
-# # switch between vi or emacs
-# set keymap emacs
-# "\e[": vi-editing-mode
-# set keymap vi-insert
-# "\e[": emacs-editing-mode
-# set keymap vi-command
-# "\e[": emacs-editing-mode
diff --git a/.config/jgmenu/jgmenurc b/.config/jgmenu/jgmenurc
deleted file mode 100644
index d35eee6..0000000
--- a/.config/jgmenu/jgmenurc
+++ /dev/null
@@ -1,32 +0,0 @@
-stay_alive = 1
-tint2_look = 0
-position_mode = pointer
-terminal_exec = wezterm
-terminal_args = -x
-sub_spacing = 5
-menu_width = 200
-menu_padding_top = 5
-menu_padding_right = 2
-menu_padding_bottom = 5
-menu_padding_left = 2
-menu_radius = 7
-menu_border = 0
-menu_halign = left
-sub_hover_action = 1
-item_margin_y = 5
-item_height = 30
-item_padding_x = 8
-item_radius = 6
-item_border = 0
-sep_height = 5
-font = Roboto Medium 15px
-icon_theme = Papirus
-icon_size = 24
-color_menu_bg = #171B20 80
-color_menu_border = #c0caf5
-color_norm_bg = #171B20 0
-color_norm_fg = #b6beca 100
-color_sel_bg = #74bee9 50
-color_sel_fg = #b6beca 100
-color_sep_fg = b6beca 80
-csv_cmd = cat ~/.config/jgmenu/menu.csv
diff --git a/.config/jgmenu/menu.csv b/.config/jgmenu/menu.csv
deleted file mode 100644
index dbece5a..0000000
--- a/.config/jgmenu/menu.csv
+++ /dev/null
@@ -1,32 +0,0 @@
-Terminal,scratchpad,utilities-terminal
-Web-browser,firefox,web-browser
-Neovim,kitty -e nvim,nvim
-Ranger,wezterm -e ranger,stock_folder
-^sep()
-
-Extras,^checkout(extras),add
-^sep()
-
-Critical,^checkout(critical),gtk-dialog-warning
-^sep()
-
-Lock,betterlockscreen --lock,system-lock-screen
-Logout,pkill -KILL -u "$USER" &,system-log-out
-
-Exit,^checkout(exit),exit
-
-^tag(exit)
-Suspend,systemctl suspend,system-suspend
-Reboot,reboot,system-reboot
-Poweroff,poweroff,system-shutdown
-
-^tag(extras)
-Change wallpaper,nitrogen,nitrogen
-Randomize Wallpaper,random-wall
-Control-center,~/.config/eww/scripts/openControlCenter.sh
-Reload eww,pkill -f eww && eww daemon
-
-^tag(critical)
-Restart BSPWM,control_box -bspres
-Restart SXHKD,control_box -kbres,input-keyboard
-Restart Pipewire,control_box -soundres,audio-speakers
diff --git a/.config/kitty/kitty.conf b/.config/kitty/kitty.conf
deleted file mode 100644
index cbf9f70..0000000
--- a/.config/kitty/kitty.conf
+++ /dev/null
@@ -1,827 +0,0 @@
-
-# vim:fileencoding=utf-8:ft=conf:foldmethod=marker
-
-#: Fonts {{{
-
-#: kitty has very powerful font management. You can configure
-#: individual font faces and even specify special fonts for particular
-#: characters.
-
-font_family JetBrains Mono Medium
-bold_font auto
-italic_font auto
-bold_italic_font auto
-
-#: You can specify different fonts for the bold/italic/bold-italic
-#: variants. By default they are derived automatically, by the OSes
-#: font system. Setting them manually is useful for font families that
-#: have many weight variants like Book, Medium, Thick, etc. For
-#: example:
-
-#: font_family Operator Mono Book
-#: bold_font Operator Mono Medium
-#: italic_font Operator Mono Book Italic
-#: bold_italic_font Operator Mono Medium Italic
-
-font_size 9.0
-
-#: Font size (in pts)
-
-# adjust_line_height 0
-# adjust_column_width 0
-
-#: Change the size of each character cell kitty renders. You can use
-#: either numbers, which are interpreted as pixels or percentages
-#: (number followed by %), which are interpreted as percentages of the
-#: unmodified values. You can use negative pixels or percentages less
-#: than 100% to reduce sizes (but this might cause rendering
-#: artifacts).
-
-# symbol_map U+E0A0-U+E0A2,U+E0B0-U+E0B3 PowerlineSymbols
-
-#: Map the specified unicode codepoints to a particular font. Useful
-#: if you need special rendering for some symbols, such as for
-#: Powerline. Avoids the need for patched fonts. Each unicode code
-#: point is specified in the form U+<code point in hexadecimal>. You
-#: can specify multiple code points, separated by commas and ranges
-#: separated by hyphens. symbol_map itself can be specified multiple
-#: times. Syntax is::
-
-#: symbol_map codepoints Font Family Name
-
-# box_drawing_scale 0.001, 1, 1.5, 2
-
-#: Change the sizes of the lines used for the box drawing unicode
-#: characters These values are in pts. They will be scaled by the
-#: monitor DPI to arrive at a pixel value. There must be four values
-#: corresponding to thin, normal, thick, and very thick lines.
-
-#: }}}
-
-#: Cursor customization {{{
-
-# cursor magenta
-cursor white
-
-#: Default cursor color
-
-# cursor_shape block
-
-#: The cursor shape can be one of (block, beam, underline)
-
-cursor_blink_interval 0.5
-cursor_stop_blinking_after 15.0
-
-#: The interval (in seconds) at which to blink the cursor. Set to zero
-#: to disable blinking. Note that numbers smaller than repaint_delay
-#: will be limited to repaint_delay. Stop blinking cursor after the
-#: specified number of seconds of keyboard inactivity. Set to zero to
-#: never stop blinking.
-
-#: }}}
-
-#: Scrollback {{{
-
-scrollback_lines 20000
-
-#: Number of lines of history to keep in memory for scrolling back.
-#: Memory is allocated on demand.
-
-# scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER
-
-#: Program with which to view scrollback in a new window. The
-#: scrollback buffer is passed as STDIN to this program. If you change
-#: it, make sure the program you use can handle ANSI escape sequences
-#: for colors and text formatting. INPUT_LINE_NUMBER in the command
-#: line above will be replaced by an integer representing which line
-#: should be at the top of the screen.
-
-wheel_scroll_multiplier 5
-
-#: Modify the amount scrolled by the mouse wheel or touchpad. Use
-#: negative numbers to change scroll direction.
-
-#: }}}
-
-#: Mouse {{{
-
-url_color #0087BD
-url_style curly
-
-#: The color and style for highlighting URLs on mouse-over. url_style
-#: can be one of: none, single, double, curly
-
-open_url_modifiers kitty_mod
-
-#: The modifier keys to press when clicking with the mouse on URLs to
-#: open the URL
-
-open_url_with default
-
-#: The program with which to open URLs that are clicked on. The
-#: special value default means to use the operating system's default
-#: URL handler.
-
-copy_on_select yes
-
-#: Copy to clipboard on select. With this enabled, simply selecting
-#: text with the mouse will cause the text to be copied to clipboard.
-#: Useful on platforms such as macOS/Wayland that do not have the
-#: concept of primary selectons. Note that this is a security risk,
-#: as all programs, including websites open in your browser can read
-#: the contents of the clipboard.
-
-# rectangle_select_modifiers ctrl+alt
-
-#: The modifiers to use rectangular selection (i.e. to select text in
-#: a rectangular block with the mouse)
-
-# select_by_word_characters :@-./_~?&=%+#
-
-#: Characters considered part of a word when double clicking. In
-#: addition to these characters any character that is marked as an
-#: alpha-numeric character in the unicode database will be matched.
-
-click_interval 0.5
-
-#: The interval between successive clicks to detect double/triple
-#: clicks (in seconds)
-
-# mouse_hide_wait 3.0
-
-#: Hide mouse cursor after the specified number of seconds of the
-#: mouse not being used. Set to zero to disable mouse cursor hiding.
-
-# focus_follows_mouse no
-
-#: Set the active window to the window under the mouse when moving the
-#: mouse around
-
-#: }}}
-
-#: Performance tuning {{{
-
-repaint_delay 10
-
-#: Delay (in milliseconds) between screen updates. Decreasing it,
-#: increases frames-per-second (FPS) at the cost of more CPU usage.
-#: The default value yields ~100 FPS which is more than sufficient for
-#: most uses. Note that to actually achieve 100 FPS you have to either
-#: set sync_to_monitor to no or use a monitor with a high refresh
-#: rate.
-
-# input_delay 3
-
-#: Delay (in milliseconds) before input from the program running in
-#: the terminal is processed. Note that decreasing it will increase
-#: responsiveness, but also increase CPU usage and might cause flicker
-#: in full screen programs that redraw the entire screen on each loop,
-#: because kitty is so fast that partial screen updates will be drawn.
-
-# sync_to_monitor yes
-
-#: Sync screen updates to the refresh rate of the monitor. This
-#: prevents tearing (https://en.wikipedia.org/wiki/Screen_tearing)
-#: when scrolling. However, it limits the rendering speed to the
-#: refresh rate of your monitor. With a very high speed mouse/high
-#: keyboard repeat rate, you may notice some slight input latency. If
-#: so, set this to no.
-
-#: }}}
-
-#: Terminal bell {{{
-
-enable_audio_bell no
-
-#: Enable/disable the audio bell. Useful in environments that require
-#: silence.
-
-# visual_bell_duration 0.5
-
-#: Visual bell duration. Flash the screen when a bell occurs for the
-#: specified number of seconds. Set to zero to disable.
-
-window_alert_on_bell yes
-
-#: Request window attention on bell. Makes the dock icon bounce on
-#: macOS or the taskbar flash on linux.
-
-bell_on_tab yes
-
-#: Show a bell symbol on the tab if a bell occurs in one of the
-#: windows in the tab and the window is not the currently focused
-#: window
-
-#: }}}
-
-#: Window layout {{{
-
-# remember_window_size yes
-# initial_window_width 640
-# initial_window_height 400
-
-#: If enabled, the window size will be remembered so that new
-#: instances of kitty will have the same size as the previous
-#: instance. If disabled, the window will initially have size
-#: configured by initial_window_width/height, in pixels. You can use a
-#: suffix of "c" on the width/height values to have them interpreted
-#: as number of cells instead of pixels.
-
-enabled_layouts *
-
-#: The enabled window layouts. A comma separated list of layout names.
-#: The special value * means all layouts. The first listed layout will
-#: be used as the startup layout. For a list of available layouts, see
-#: the layouts.
-
-# window_resize_step_cells 2
-# window_resize_step_lines 2
-
-#: The step size (in units of cell width/cell height) to use when
-#: resizing windows. The cells value is used for horizontal resizing
-#: and the lines value for vertical resizing.
-
-window_border_width 1
-
-#: The width (in pts) of window borders. Will be rounded to the
-#: nearest number of pixels based on screen resolution. Note that
-#: borders are displayed only when more than one window is visible.
-#: They are meant to separate multiple windows.
-
-window_margin_width 0
-
-#: The window margin (in pts) (blank area outside the border)
-
-# single_window_margin_width -1000.0
-
-#: The window margin (in pts) to use when only a single window is
-#: visible. Negative values will cause the value of
-#: window_margin_width to be used instead.
-
-window_padding_width 2
-
-#: The window padding (in pts) (blank area between the text and the
-#: window border)
-
-active_border_color #282c34
-
-#: The color for the border of the active window
-
-inactive_border_color #22262d
-
-#: The color for the border of inactive windows
-
-# bell_border_color #ff5a00
-
-#: The color for the border of inactive windows in which a bell has
-#: occurred
-
-inactive_text_alpha .6
-
-#: Fade the text in inactive windows by the specified amount (a number
-#: between zero and one, with zero being fully faded).
-
-#: }}}
-
-#: Tab bar {{{
-
-# tab_bar_edge bottom
-
-#: Which edge to show the tab bar on, top or bottom
-
-tab_bar_margin_width 4
-
-#: The margin to the left and right of the tab bar (in pts)
-
-tab_bar_style fade
-
-#: The tab bar style, can be one of: fade or separator. In the fade
-#: style, each tab's edges fade into the background color, in the
-#: separator style, tabs are separated by a configurable separator.
-
-# tab_fade 0.25 0.5 0.75 1
-tab_fade 1 1 1
-
-#: Control how each tab fades into the background when using fade for
-#: the tab_bar_style. Each number is an alpha (between zero and one)
-#: that controls how much the corresponding cell fades into the
-#: background, with zero being no fade and one being full fade. You
-#: can change the number of cells used by adding/removing entries to
-#: this list.
-
-# tab_separator " "
-
-#: The separator between tabs in the tab bar when using separator as
-#: the tab_bar_style.
-
-active_tab_foreground #282c34
-active_tab_background #abb2bf
-active_tab_font_style bold
-inactive_tab_foreground #5c6370
-inactive_tab_background #22262d
-inactive_tab_font_style normal
-
-#: Tab bar colors and styles
-
-#: }}}
-
-#: Color scheme {{{
-
-foreground #d8dee9
-#background #1d1f21
-background #000000
-
-#: The foreground and background colors
-
-background_opacity 0.7
-dynamic_background_opacity yes
-# Increase background opacity ctrl+shift+a>m
-
-# Decrease background opacity ctrl+shift+a>l
-
-# Full background opacity ctrl+shift+a>1
-
-# Reset background opacity ctrl+shift+a>d
-
-#: The opacity of the background. A number between 0 and 1, where 1 is
-#: opaque and 0 is fully transparent. This will only work if
-#: supported by the OS (for instance, when using a compositor under
-#: X11). Note that it only sets the default background color's
-#: opacity. This is so that things like the status bar in vim,
-#: powerline prompts, etc. still look good. But it means that if you
-#: use a color theme with a background color in your editor, it will
-#: not be rendered as transparent. Instead you should change the
-#: default background color in your kitty config and not use a
-#: background color in the editor color scheme. Or use the escape
-#: codes to set the terminals default colors in a shell script to
-#: launch your editor. Be aware that using a value less than 1.0 is a
-#: (possibly significant) performance hit. If you want to dynamically
-#: change transparency of windows set dynamic_background_opacity to
-#: yes (this is off by default as it has a performance cost)
-
-dim_opacity 1.0
-
-#: How much to dim text that has the DIM/FAINT attribute set. One
-#: means no dimming and zero means fully dimmed (i.e. invisible).
-
-selection_foreground #000000
-selection_background #FFFACD
-
-#: The foreground and background for text selected with the mouse
-
-
-#: The 16 terminal colors. There are 8 basic colors, each color has a
-#: dull and bright version. You can also set the remaining colors from
-#: the 256 color table as color16 to color255.
-
-#: black
-color0 #313539
-color8 #676f78
-
-#: red
-color1 #b02626
-color9 #b55454
-
-#: green
-color2 #40a62f
-color10 #78a670
-
-#: yellow
-color3 #f2e635
-color11 #faf380
-
-#: blue
-color4 #314ad0
-color12 #707fd0
-
-#: magenta
-color5 #b30ad0
-color13 #c583d0
-
-#: cyan
-color6 #32d0fc
-color14 #8adaf1
-
-#: white
-color7 #acadb1
-color15 #e0e3e7
-
-
-#: }}}
-
-#: Advanced {{{
-
-# shell zsh
-
-#: The shell program to execute. The default value of . means to use
-#: whatever shell is set as the default shell for the current user.
-#: Note that on macOS if you change this, you might need to add
-#: --login to ensure that the shell starts in interactive mode and
-#: reads its startup rc files.
-
-editor .
-
-#: The console editor to use when editing the kitty config file or
-#: similar tasks. A value of . means to use the environment variable
-#: EDITOR. Note that this environment variable has to be set not just
-#: in your shell startup scripts but system-wide, otherwise kitty will
-#: not see it.
-
-# Confirm when closing where 0 disables it; -1 enables it
-confirm_os_window_close 0
-
-# close_on_child_death nvim
-
-#: Close the window when the child process (shell) exits. If no (the
-#: default), the terminal will remain open when the child exits as
-#: long as there are still processes outputting to the terminal (for
-#: example disowned or backgrounded processes). If yes, the window
-#: will close as soon as the child process exits. Note that setting it
-#: to yes means that any background processes still using the terminal
-#: can fail silently because their stdout/stderr/stdin no longer work.
-
-# allow_remote_control no
-
-#: Allow other programs to control kitty. If you turn this on other
-#: programs can control all aspects of kitty, including sending text
-#: to kitty windows, opening new windows, closing windows, reading the
-#: content of windows, etc. Note that this even works over ssh
-#: connections.
-
-# startup_session none
-
-#: Path to a session file to use for all kitty instances. Can be
-#: overridden by using the kitty --session command line option for
-#: individual instances. See sessions in the kitty documentation for
-#: details. Note that relative paths are interpreted with respect to
-#: the kitty config directory. Environment variables in the path are
-#: expanded.
-
-# clipboard_control write-clipboard write-primary
-clipboard_control write-primary write-clipboard no-append
-
-#: Allow programs running in kitty to read and write from the
-#: clipboard. You can control exactly which actions are allowed. The
-#: set of possible actions is: write-clipboard read-clipboard write-
-#: primary read-primary The default is to allow writing to the
-#: clipboard and primary selection. Note that enabling the read
-#: functionality is a security risk as it means that any program, even
-#: one running on a remote server via SSH can read your clipboard.
-
-#term xterm-kitty
-
-#: The value of the TERM environment variable to set. Changing this
-#: can break many terminal programs, only change it if you know what
-#: you are doing, not because you read some advice on Stack Overflow
-#: to change it.
-
-#: }}}
-
-#: OS specific tweaks {{{
-
-# macos_titlebar_color #22262d
-
-#: Change the color of the kitty window's titlebar on macOS. A value
-#: of system means to use the default system color, a value of
-#: background means to use the background color of the currently
-#: active window and finally you can use an arbitrary color, such as
-#: #12af59 or red. WARNING: This option works by using a hack, as
-#: there is no proper Cocoa API for it. It sets the background color
-#: of the entire window and makes the titlebar transparent. As such it
-#: is incompatible with background_opacity. If you want to use both,
-#: you are probably better off just hiding the titlebar with
-#: macos_hide_titlebar.
-
-# macos_hide_titlebar no
-
-#: Hide the kitty window's title bar on macOS.
-
-hide_window_decorations yes
-
-#: Hide the window decorations (title bar and window borders) on X11
-#: and Wayland. Whether this works and exactly what effect it has
-#: depends on the window manager, as it is the job of the window
-#: manager/compositor to draw window decorations.
-
-# macos_option_as_alt yes
-
-#: Use the option key as an alt key. With this set to no, kitty will
-#: use the macOS native Option+Key = unicode character behavior. This
-#: will break any Alt+key keyboard shortcuts in your terminal
-#: programs, but you can use the macOS unicode input technique.
-
-# macos_hide_from_tasks no
-
-#: Hide the kitty window from running tasks (Option+Tab) on macOS.
-
-# macos_quit_when_last_window_closed no
-
-#: Have kitty quit when all the top-level windows are closed. By
-#: default, kitty will stay running, even with no open windows, as is
-#: the expected behavior on macOS.
-
-linux_display_server x11
-
-#: Choose between Wayland and X11 backends. By default, an appropriate
-#: backend based on the system state is chosen automatically. Set it
-#: to x11 or wayland to force the choice.
-
-#: }}}
-
-#: Keyboard shortcuts {{{
-
-#: For a list of key names, see: GLFW keys
-#: <http://www.glfw.org/docs/latest/group__keys.html>. The name to use
-#: is the part after the GLFW_KEY_ prefix. For a list of modifier
-#: names, see: GLFW mods
-#: <http://www.glfw.org/docs/latest/group__mods.html>
-
-#: On Linux you can also use XKB key names to bind keys that are not
-#: supported by GLFW. See XKB keys
-#: <https://github.com/xkbcommon/libxkbcommon/blob/master/xkbcommon/xkbcommon-
-#: keysyms.h> for a list of key names. The name to use is the part
-#: after the XKB_KEY_ prefix. Note that you should only use an XKB key
-#: name for keys that are not present in the list of GLFW keys.
-
-#: You can use the special action no_op to unmap a keyboard shortcut
-#: that is assigned in the default configuration.
-
-#: You can combine multiple actions to be triggered by a single
-#: shortcut, using the syntax below::
-
-#: map key combine <separator> action1 <separator> action2 <separator> action3 ...
-
-#: For example::
-
-#: map kitty_mod+e combine : new_window : next_layout
-
-#: this will create a new window and switch to the next available
-#: layout
-
-#: You can use multi-key shortcuts using the syntax shown below::
-
-#: map key1>key2>key3 action
-
-#: For example::
-
-#: map ctrl+f>2 set_font_size 20
-
-# kitty_mod ctrl+shift
-
-#: The value of kitty_mod is used as the modifier for all default
-#: shortcuts, you can change it in your kitty.conf to change the
-#: modifiers for all the default shortcuts.
-
-# clear_all_shortcuts no
-
-#: You can have kitty remove all shortcut definition seen up to this
-#: point. Useful, for instance, to remove the default shortcuts.
-
-#: Clipboard {{{
-
-# map cmd+c copy_to_clipboard
-#map kitty_mod+c copy_to_clipboard
-# map cmd+v paste_from_clipboard
-#map kitty_mod+v paste_from_clipboard
-#map kitty_mod+s paste_from_selection
-map shift+insert paste_from_selection
-# map kitty_mod+o pass_selection_to_program
-map ctrl+c copy_to_clipboard
-map ctrl+v paste_from_clipboard
-
-#: You can also pass the contents of the current selection to any
-#: program using pass_selection_to_program. By default, the system's
-#: open program is used, but you can specify your own, for example::
-
-#: map kitty_mod+o pass_selection_to_program firefox
-
-#: You can pass the current selection to a terminal program running in
-#: a new kitty window, by using the @selection placeholder::
-
-#: map kitty_mod+y new_window less @selection
-
-#: }}}
-
-#: Scrolling {{{
-
-#map kitty_mod+up scroll_line_up
-#map ctrl+k scroll_line_up
-#map kitty_mod+k scroll_line_up
-#map kitty_mod+down scroll_line_down
-#map ctrl+j scroll_line_down
-#map kitty_mod+j scroll_line_down
-map kitty_mod+page_up scroll_page_up
-map kitty_mod+page_down scroll_page_down
-map kitty_mod+b scroll_page_up
-map kitty_mod+f scroll_page_down
-# map kitty_mod+home scroll_home
-# map kitty_mod+end scroll_end
-# map kitty_mod+h show_scrollback
-
-#: You can send the contents of the current screen + history buffer as
-#: stdin to an arbitrary program using the placeholders @text (which
-#: is the plain text) and @ansi (which includes text styling escape
-#: codes). For only the current screen, use @screen or @ansi_screen.
-#: For example, the following command opens the scrollback buffer in
-#: less in a new window::
-
-#: map kitty_mod+y new_window @ansi less +G -R
-
-#: }}}
-
-#: Window management {{{
-
-# map kitty_mod+enter new_window
-map kitty_mod+enter no_op
-map kitty_mod+enter new_window_with_cwd
-
-#: You can open a new window running an arbitrary program, for
-#: example::
-
-#: map kitty_mod+y new_window mutt
-
-#: You can open a new window with the current working directory set to
-#: the working directory of the current window using::
-
-#: map ctrl+alt+enter new_window_with_cwd
-
-# map cmd+n new_os_window
-# map kitty_mod+n new_os_window
-# map kitty_mod+w close_window
-# map kitty_mod+] next_window
-# map kitty_mod+[ previous_window
-map kitty_mod+j previous_window
-map kitty_mod+k next_window
-map kitty_mod+up move_window_forward
-map kitty_mod+down move_window_backward
-# map kitty_mod+f move_window_forward
-# map kitty_mod+b move_window_backward
-# map kitty_mod+` move_window_to_top
-# map kitty_mod+r start_resizing_window
-# map kitty_mod+1 first_window
-# map kitty_mod+2 second_window
-# map kitty_mod+3 third_window
-# map kitty_mod+4 fourth_window
-# map kitty_mod+5 fifth_window
-# map kitty_mod+6 sixth_window
-# map kitty_mod+7 seventh_window
-# map kitty_mod+8 eighth_window
-# map kitty_mod+9 ninth_window
-# map kitty_mod+0 tenth_window
-#: }}}
-
-#: Tab management {{{
-
-# map kitty_mod+right next_tab
-# map kitty_mod+left previous_tab
-map kitty_mod+] no_op
-map kitty_mod+] next_tab
-map kitty_mod+[ no_op
-map kitty_mod+[ previous_tab
-# map kitty_mod+t new_tab
-# map kitty_mod+q close_tab
-# map kitty_mod+. move_tab_forward
-# map kitty_mod+, move_tab_backward
-map kitty_mod+right no_op
-map kitty_mod+right move_tab_forward
-map kitty_mod+left no_op
-map kitty_mod+left move_tab_backward
-# map kitty_mod+alt+t set_tab_title
-map kitty_mod+t no_op
-map kitty_mod+t new_tab_with_cwd
-
-#: You can also create shortcuts to go to specific tabs, with 1 being
-#: the first tab::
-
-#: map ctrl+alt+1 goto_tab 1
-#: map ctrl+alt+2 goto_tab 2
-
-#: Just as with new_window above, you can also pass the name of
-#: arbitrary commands to run when using new_tab and use
-#: new_tab_with_cwd.
-#: }}}
-
-#: Layout management {{{
-
-# map kitty_mod+l next_layout
-
-#: You can also create shortcuts to switch to specific layouts::
-
-map kitty_mod+0 no_op
-map kitty_mod+0 goto_layout stack
-map kitty_mod+9 no_op
-map kitty_mod+9 goto_layout tall
-map kitty_mod+8 no_op
-map kitty_mod+8 goto_layout fat
-#: map ctrl+alt+t goto_layout tall
-#: map ctrl+alt+s goto_layout stack
-#: }}}
-
-#: Font sizes {{{
-
-#: You can change the font size for all top-level kitty windows at a
-#: time or only the current one.
-
-map kitty_mod+equal change_font_size all +2.0
-map kitty_mod+minus change_font_size all -2.0
-map kitty_mod+backspace change_font_size all 0
-
-#: To setup shortcuts for specific font sizes::
-
-#: map kitty_mod+f6 change_font_size all 10.0
-
-#: To setup shortcuts to change only the current window's font size::
-
-#: map kitty_mod+f6 change_font_size current 10.0
-#: }}}
-
-#: Select and act on visible text {{{
-
-#: Use the hints kitten to select text and either pass it to an
-#: external program or insert it into the terminal or copy it to the
-#: clipboard.
-
-# map kitty_mod+e kitten hints
-
-#: Open a currently visible URL using the keyboard. The program used
-#: to open the URL is specified in open_url_with.
-
-# map kitty_mod+p>f kitten hints --type path --program -
-
-#: Select a path/filename and insert it into the terminal. Useful, for
-#: instance to run git commands on a filename output from a previous
-#: git command.
-
-# map kitty_mod+p>shift+f kitten hints --type path
-
-#: Select a path/filename and open it with the default open program.
-
-# map kitty_mod+p>l kitten hints --type line --program -
-
-#: Select a line of text and insert it into the terminal. Use for the
-#: output of things like: ls -1
-
-# map kitty_mod+p>w kitten hints --type word --program -
-
-#: Select words and insert into terminal.
-
-# map kitty_mod+p>h kitten hints --type hash --program -
-
-#: Select something that looks like a hash and insert it into the
-#: terminal. Useful with git, which uses sha1 hashes to identify
-#: commits
-
-
-#: The hints kitten has many more modes of operation that you can map
-#: to different shortcuts. For a full description see kittens/hints.
-#: }}}
-
-#: Miscellaneous {{{
-
-
-# map kitty_mod+f11 toggle_fullscreen
-# map kitty_mod+u input_unicode_character
-# map kitty_mod+f2 edit_config_file
-# map kitty_mod+escape kitty_shell window
-
-#: Open the kitty shell in a new window/tab/overlay/os_window to
-#: control kitty using commands.
-
-# map kitty_mod+a>m set_background_opacity +0.1
-# map kitty_mod+a>l set_background_opacity -0.1
-# map kitty_mod+a>1 set_background_opacity 1
-# map kitty_mod+a>d set_background_opacity default
-#
-# map kitty_mod+a>m set_background_opacity +0.1
-# map kitty_mod+a>l set_background_opacity -0.1
-map kitty_mod+, set_background_opacity 1
-map kitty_mod+. set_background_opacity default
-
-#: You can tell kitty to send arbitrary (UTF-8) encoded text to the
-#: client program when pressing specified shortcut keys. For example::
-
-#: map ctrl+alt+a send_text all Special text
-
-#: This will send "Special text" when you press the ctrl+alt+a key
-#: combination. The text to be sent is a python string literal so you
-#: can use escapes like \x1b to send control codes or \u21fb to send
-#: unicode characters (or you can just input the unicode characters
-#: directly as UTF-8 text). The first argument to send_text is the
-#: keyboard modes in which to activate the shortcut. The possible
-#: values are normal or application or kitty or a comma separated
-#: combination of them. The special keyword all means all modes. The
-#: modes normal and application refer to the DECCKM cursor key mode
-#: for terminals, and kitty refers to the special kitty extended
-#: keyboard protocol.
-
-#: Another example, that outputs a word and then moves the cursor to
-#: the start of the line (same as pressing the Home key)::
-
-#: map ctrl+alt+a send_text normal Word\x1b[H
-#: map ctrl+alt+a send_text application Word\x1bOH
-
-#: }}}
-
-map ctrl+space send_text all \x10
-
-# }}}
diff --git a/.config/mimeapps.list b/.config/mimeapps.list
deleted file mode 100644
index 85d088c..0000000
--- a/.config/mimeapps.list
+++ /dev/null
@@ -1,14 +0,0 @@
-[Default Applications]
-application/pdf=zathura.desktop;
-application/tex=zathura.desktop;
-image/png=phototonic.desktop
-image/jpeg=phototonic.desktop;
-video/mp4=mpv.desktop;
-video/mkv=mpv.desktop;
-inode/directory=pcmanfm.desktop
-
-[Added Associations]
-image/png=phototonic.desktop;
-
-[Removed Associations]
-
diff --git a/.config/picom/picom.conf b/.config/picom/picom.conf
deleted file mode 100644
index d189670..0000000
--- a/.config/picom/picom.conf
+++ /dev/null
@@ -1,494 +0,0 @@
-#################################
-# Animations #
-#################################
-# requires https://github.com/jonaburg/picom
-# (These are also the default values)
-transition-length = 300
-transition-pow-x = 0.1
-transition-pow-y = 0.1
-transition-pow-w = 0.1
-transition-pow-h = 0.1
-size-transition = true
-
-
-#################################
-# Corners #
-#################################
-# requires: https://github.com/sdhand/compton or https://github.com/jonaburg/picom
-corner-radius = 10.0;
-rounded-corners-exclude = [
-#"window_type = 'normal'",
-# "class_g = 'Bspwm' && class_i = 'presel_feedback'",
-# "class_g = 'URxvt'",
-# "class_g = 'alacritty'",
-# "class_g = 'Org.gnome.Nautilus'",
-# "class_g = 'Nemo'",
-# "class_g = 'firefox'",
-# "class_g = 'Rofi'",
-# "class_g = 'Spotify'",
-# "class_g = 'discord'",
-# "class_g = 'Code'",
-# "class_g = 'TelegramDesktop'",
-# "class_g = 'YouTube Music'",
- "class_g = 'Polybar'"
-# "class_g = 'qutebrowser'",
-# "class_g = 'Zathura'",
-# "class_g = 'Pavucontrol'"
-
-];
-round-borders = 1;
-#round-borders-exclude = [
-# "class_g = 'TelegramDesktop'",
-#];
-
-
-
-#################################
-# Shadows #
-#################################
-
-
-# Enabled client-side shadows on windows. Note desktop windows
-# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow,
-# unless explicitly requested using the wintypes option.
-#
-shadow = false;
-#shadow = true;
-
-# The blur radius for shadows, in pixels. (defaults to 12)
-# shadow-radius = 12
-shadow-radius = 20;
-
-# The opacity of shadows. (0.0 - 1.0, defaults to 0.75)
-# shadow-opacity = .75
-
-# The left offset for shadows, in pixels. (defaults to -15)
-# shadow-offset-x = -15
-shadow-offset-x = -5;
-
-# The top offset for shadows, in pixels. (defaults to -15)
-# shadow-offset-y = -15
-shadow-offset-y = -5;
-
-# Avoid drawing shadows on dock/panel windows. This option is deprecated,
-# you should use the *wintypes* option in your config file instead.
-#
-# no-dock-shadow = false
-
-# Don't draw shadows on drag-and-drop windows. This option is deprecated,
-# you should use the *wintypes* option in your config file instead.
-#
-# no-dnd-shadow = false
-
-# Red color value of shadow (0.0 - 1.0, defaults to 0).
-# shadow-red = 0
-
-# Green color value of shadow (0.0 - 1.0, defaults to 0).
-# shadow-green = 0
-
-# Blue color value of shadow (0.0 - 1.0, defaults to 0).
-# shadow-blue = 0
-
-# Do not paint shadows on shaped windows. Note shaped windows
-# here means windows setting its shape through X Shape extension.
-# Those using ARGB background is beyond our control.
-# Deprecated, use
-# shadow-exclude = 'bounding_shaped'
-# or
-# shadow-exclude = 'bounding_shaped && !rounded_corners'
-# instead.
-#
-# shadow-ignore-shaped = ''
-
-# Specify a list of conditions of windows that should have no shadow.
-#
-# examples:
-# shadow-exclude = "n:e:Notification";
-#
-# shadow-exclude = []
-shadow-exclude = [
- "name = 'Notification'",
- "class_g = 'Conky'",
- #"class_g ?= 'Notify-osd'",
- "class_g = 'Cairo-clock'",
- "class_g = 'Polybar'",
- "class_g = 'Nwg-menu'",
- # "class_g = 'Rofi'"
- "_GTK_FRAME_EXTENTS@:c"
- ];
-
-# Specify a X geometry that describes the region in which shadow should not
-# be painted in, such as a dock window region. Use
-# shadow-exclude-reg = "x10+0+0"
-# for example, if the 10 pixels on the bottom of the screen should not have shadows painted on.
-#
-# shadow-exclude-reg = ""
-
-# Crop shadow of a window fully on a particular Xinerama screen to the screen.
-# xinerama-shadow-crop = false
-
-
-#################################
-# Fading #
-#################################
-
-
-# Fade windows in/out when opening/closing and when opacity changes,
-# unless no-fading-openclose is used.
-# fading = false
-fading = true
-
-# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028)
-# fade-in-step = 0.028
-fade-in-step = 0.08;
-
-# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
-# fade-out-step = 0.03
-fade-out-step = 0.08;
-
-# The time between steps in fade step, in milliseconds. (> 0, defaults to 10)
-# fade-delta = 10
-
-# Specify a list of conditions of windows that should not be faded.
-# fade-exclude = []
-
-# Do not fade on window open/close.
-# no-fading-openclose = false
-
-# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc.
-# no-fading-destroyed-argb = false
-
-
-#################################
-# Transparency / Opacity #
-#################################
-
-# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
-# inactive-opacity = 1
-inactive-opacity = 1;
-
-# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
-# frame-opacity = 1.0
-frame-opacity = 1;
-
-# Default opacity for dropdown menus and popup menus. (0.0 - 1.0, defaults to 1.0)
-# menu-opacity = 1.0
-
-# Let inactive opacity set by -i override the '_NET_WM_OPACITY' values of windows.
-# inactive-opacity-override = true
-inactive-opacity-override = false;
-
-# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0)
-active-opacity = 1.0;
-
-# Dim inactive windows. (0.0 - 1.0, defaults to 0.0)
-inactive-dim = 0.2
-
-# Specify a list of conditions of windows that should always be considered focused.
-# focus-exclude = []
-focus-exclude = ["class_g = 'Plank'", "class_g = 'Nwg-menu'", "class_g = 'st'", "class_g = 'kitty'", "class_g = 'wezterm'", "class_g = 'Alacritty'", "class_g = 'firefox'"];
-
-# Use fixed inactive dim value, instead of adjusting according to window opacity.
-# inactive-dim-fixed = 1.0
-
-# Specify a list of opacity rules, in the format `PERCENT:PATTERN`,
-# like `50:name *= "Firefox"`. picom-trans is recommended over this.
-# Note we don't make any guarantee about possible conflicts with other
-# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows.
-# example:
-# opacity-rule = [ "80:class_g = 'URxvt'" ];
-opacity-rule = ["80:class_g = 'betterlockscreen'", "80:class_g = 'URxvt'", "100:class_g = 'firefox'", "100:class_g = 'Zathura'", "80:class_g = 'Spotify'", "80:class_g *?= 'Rofi'", "100:class_g = 'kitty' && focused", "100:class_g = 'kitty' && !focused", "100:class_g = 'Alacritty' && focused", "100:class_g = 'Alacritty' && !focused", "100:class_g = 'wezterm' && focused", "100:class_g = 'wezterm' && !focused"];
-#
-#opacity-rule = ["85:class_g ?= 'Alacritty' && focused"];
-
-#blur-background-exclude = ["class_g = 'scratchpad'"];
-
-#################################
-# Background-Blurring #
-#################################
-
-
-# Parameters for background blurring, see the *BLUR* section for more information.
-blur-method = "dual_kawase";
-#blur-method = "gaussian";
-blur-strength = 6;
-# blur-size = 12
-#
-# blur-deviation = false
-
-# Blur background of semi-transparent / ARGB windows.
-# Bad in performance, with driver-dependent behavior.
-# The name of the switch may change without prior notifications.
-#
-blur-background = false;
-
-# Blur background of windows when the window frame is not opaque.
-# Implies:
-# blur-background
-# Bad in performance, with driver-dependent behavior. The name may change.
-#
-# blur-background-frame = false
-
-
-# Use fixed blur strength rather than adjusting according to window opacity.
-#blur-background-fixed = false
-
-
-# Specify the blur convolution kernel, with the following format:
-# example:
-# blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";
-#
-# blur-kern = ''
-#blur-kern = "3x3box";
-blur-kern = "7x7box";
-
-# Exclude conditions for background blur.
-# blur-background-exclude = []
-blur-background-exclude = [
- "window_type = 'dock'",
- "window_type = 'desktop'",
- "_GTK_FRAME_EXTENTS@:c",
- "class_g = 'kitty'",
- "class_g = 'Alacritty'",
- "class_g = 'wezterm'",
-# "class_g = 'Polybar'",
- "class_g = 'URxvt'",
- "class_g = 'scratchpad'",
- "class_g = 'heads-up-display'",
- "class_g = 'Firefox'",
- "class_g = 'firefox'",
- "class_g = 'discord'",
- "class_g = 'Rofi'",
- "class_g = 'Zathura'",
- "class_g = 'Notification'",
-];
-
-#################################
-# General Settings #
-#################################
-
-# Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers.
-# daemon = false
-
-# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
-# `xrender` is the default one.
-#
-#experimental-backends = true;
-#backend = 'glx'
-backend = "glx";
-#backend = "xrender";
-
-# Enable/disable VSync.
-# vsync = false
-vsync = true
-
-# Enable remote control via D-Bus. See the *D-BUS API* section below for more details.
-# dbus = false
-
-# Try to detect WM windows (a non-override-redirect window with no
-# child that has 'WM_STATE') and mark them as active.
-#
-# mark-wmwin-focused = false
-mark-wmwin-focused = true;
-
-# Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused.
-mark-ovredir-focused = false;
-#mark-ovredir-focused = true;
-
-# Try to detect windows with rounded corners and don't consider them
-# shaped windows. The accuracy is not very high, unfortunately.
-#
-# detect-rounded-corners = false
-detect-rounded-corners = true;
-
-# Detect '_NET_WM_OPACITY' on client windows, useful for window managers
-# not passing '_NET_WM_OPACITY' of client windows to frame windows.
-#
-# detect-client-opacity = false
-detect-client-opacity = true;
-
-# Specify refresh rate of the screen. If not specified or 0, picom will
-# try detecting this with X RandR extension.
-#
-# refresh-rate = 60
-refresh-rate = 0
-
-# Limit picom to repaint at most once every 1 / 'refresh_rate' second to
-# boost performance. This should not be used with
-# vsync drm/opengl/opengl-oml
-# as they essentially does sw-opti's job already,
-# unless you wish to specify a lower refresh rate than the actual value.
-#
-# sw-opti =
-
-# Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window,
-# rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy,
-# provided that the WM supports it.
-#
-# use-ewmh-active-win = false
-
-# Unredirect all windows if a full-screen opaque window is detected,
-# to maximize performance for full-screen windows. Known to cause flickering
-# when redirecting/unredirecting windows.
-#
-# unredir-if-possible = false
-
-# Delay before unredirecting the window, in milliseconds. Defaults to 0.
-# unredir-if-possible-delay = 0
-
-# Conditions of windows that shouldn't be considered full-screen for unredirecting screen.
-# unredir-if-possible-exclude = []
-
-# Use 'WM_TRANSIENT_FOR' to group windows, and consider windows
-# in the same group focused at the same time.
-#
-# detect-transient = false
-detect-transient = true
-
-# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same
-# group focused at the same time. 'WM_TRANSIENT_FOR' has higher priority if
-# detect-transient is enabled, too.
-#
-# detect-client-leader = false
-detect-client-leader = true
-
-# Resize damaged region by a specific number of pixels.
-# A positive value enlarges it while a negative one shrinks it.
-# If the value is positive, those additional pixels will not be actually painted
-# to screen, only used in blur calculation, and such. (Due to technical limitations,
-# with use-damage, those pixels will still be incorrectly painted to screen.)
-# Primarily used to fix the line corruption issues of blur,
-# in which case you should use the blur radius value here
-# (e.g. with a 3x3 kernel, you should use `--resize-damage 1`,
-# with a 5x5 one you use `--resize-damage 2`, and so on).
-# May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly.
-#
-# resize-damage = 1
-
-# Specify a list of conditions of windows that should be painted with inverted color.
-# Resource-hogging, and is not well tested.
-#
-# invert-color-include = []
-
-# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer.
-# Might cause incorrect opacity when rendering transparent content (but never
-# practically happened) and may not work with blur-background.
-# My tests show a 15% performance boost. Recommended.
-#
-# glx-no-stencil = false
-
-# GLX backend: Avoid rebinding pixmap on window damage.
-# Probably could improve performance on rapid window content changes,
-# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.).
-# Recommended if it works.
-#
-# glx-no-rebind-pixmap = false
-
-# Disable the use of damage information.
-# This cause the whole screen to be redrawn everytime, instead of the part of the screen
-# has actually changed. Potentially degrades the performance, but might fix some artifacts.
-# The opposing option is use-damage
-#
-# no-use-damage = false
-use-damage = true
-
-# Use X Sync fence to sync clients' draw calls, to make sure all draw
-# calls are finished before picom starts drawing. Needed on nvidia-drivers
-# with GLX backend for some users.
-#
-# xrender-sync-fence = false
-
-# GLX backend: Use specified GLSL fragment shader for rendering window contents.
-# See `compton-default-fshader-win.glsl` and `compton-fake-transparency-fshader-win.glsl`
-# in the source tree for examples.
-#
-# glx-fshader-win = ''
-
-# Force all windows to be painted with blending. Useful if you
-# have a glx-fshader-win that could turn opaque pixels transparent.
-#
-# force-win-blend = false
-
-# Do not use EWMH to detect fullscreen windows.
-# Reverts to checking if a window is fullscreen based only on its size and coordinates.
-#
-# no-ewmh-fullscreen = false
-
-# Dimming bright windows so their brightness doesn't exceed this set value.
-# Brightness of a window is estimated by averaging all pixels in the window,
-# so this could comes with a performance hit.
-# Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0)
-#
-# max-brightness = 1.0
-
-# Make transparent windows clip other windows like non-transparent windows do,
-# instead of blending on top of them.
-#
-# transparent-clipping = false
-
-# Set the log level. Possible values are:
-# "trace", "debug", "info", "warn", "error"
-# in increasing level of importance. Case doesn't matter.
-# If using the "TRACE" log level, it's better to log into a file
-# using *--log-file*, since it can generate a huge stream of logs.
-#
-# log-level = "debug"
-log-level = "warn";
-
-# Set the log file.
-# If *--log-file* is never specified, logs will be written to stderr.
-# Otherwise, logs will to written to the given file, though some of the early
-# logs might still be written to the stderr.
-# When setting this option from the config file, it is recommended to use an absolute path.
-#
-# log-file = '/path/to/your/log/file'
-
-# Show all X errors (for debugging)
-# show-all-xerrors = false
-
-# Write process ID to a file.
-# write-pid-path = '/path/to/your/log/file'
-
-# Window type settings
-#
-# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
-# "unknown", "desktop", "dock", "toolbar", "menu", "utility",
-# "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
-# "tooltip", "notification", "combo", and "dnd".
-#
-# Following per window-type options are available: ::
-#
-# fade, shadow:::
-# Controls window-type-specific shadow and fade settings.
-#
-# opacity:::
-# Controls default opacity of the window type.
-#
-# focus:::
-# Controls whether the window of this type is to be always considered focused.
-# (By default, all window types except "normal" and "dialog" has this on.)
-#
-# full-shadow:::
-# Controls whether shadow is drawn under the parts of the window that you
-# normally won't be able to see. Useful when the window has parts of it
-# transparent, and you want shadows in those areas.
-#
-# redir-ignore:::
-# Controls whether this type of windows should cause screen to become
-# redirected again after been unredirected. If you have unredir-if-possible
-# set, and doesn't want certain window to cause unnecessary screen redirection,
-# you can set this to `true`.
-#
-wintypes:
-{
- #normal = { full-shadow = true; };
- #menu = { full-shadow = true; };
- tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
- dock = { shadow = false; };
- dnd = { shadow = false; };
- popup_menu = { full-shadow = false opacity = 0.8; };
- #utility = { full-shadow = true; };
- #toolbar = { full-shadow = true; };
- notification = { opacity = 0.75; }
-};
-
diff --git a/.config/plank/dock/launchers/Alacritty.dockitem b/.config/plank/dock/launchers/Alacritty.dockitem
deleted file mode 100644
index b3091c5..0000000
--- a/.config/plank/dock/launchers/Alacritty.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/Alacritty.desktop
diff --git a/.config/plank/dock/launchers/com.obsproject.Studio.dockitem b/.config/plank/dock/launchers/com.obsproject.Studio.dockitem
deleted file mode 100644
index 7626308..0000000
--- a/.config/plank/dock/launchers/com.obsproject.Studio.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/com.obsproject.Studio.desktop
diff --git a/.config/plank/dock/launchers/discord.dockitem b/.config/plank/dock/launchers/discord.dockitem
deleted file mode 100644
index c6736ba..0000000
--- a/.config/plank/dock/launchers/discord.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/discord.desktop
diff --git a/.config/plank/dock/launchers/firefox.dockitem b/.config/plank/dock/launchers/firefox.dockitem
deleted file mode 100644
index 0dbfff7..0000000
--- a/.config/plank/dock/launchers/firefox.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/firefox.desktop
diff --git a/.config/plank/dock/launchers/gimp.dockitem b/.config/plank/dock/launchers/gimp.dockitem
deleted file mode 100644
index c9f9438..0000000
--- a/.config/plank/dock/launchers/gimp.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/gimp.desktop
diff --git a/.config/plank/dock/launchers/google-chrome.dockitem b/.config/plank/dock/launchers/google-chrome.dockitem
deleted file mode 100644
index cd04294..0000000
--- a/.config/plank/dock/launchers/google-chrome.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/google-chrome.desktop
diff --git a/.config/plank/dock/launchers/obsidian.dockitem b/.config/plank/dock/launchers/obsidian.dockitem
deleted file mode 100644
index 0170dbd..0000000
--- a/.config/plank/dock/launchers/obsidian.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/obsidian.desktop
diff --git a/.config/plank/dock/launchers/org.gnome.Nautilus.dockitem b/.config/plank/dock/launchers/org.gnome.Nautilus.dockitem
deleted file mode 100644
index ae5f8d9..0000000
--- a/.config/plank/dock/launchers/org.gnome.Nautilus.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/org.gnome.Nautilus.desktop
diff --git a/.config/plank/dock/launchers/spotify.dockitem b/.config/plank/dock/launchers/spotify.dockitem
deleted file mode 100644
index 8ae95b4..0000000
--- a/.config/plank/dock/launchers/spotify.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/spotify.desktop
diff --git a/.config/plank/dock/launchers/steam.dockitem b/.config/plank/dock/launchers/steam.dockitem
deleted file mode 100644
index 143d3b4..0000000
--- a/.config/plank/dock/launchers/steam.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/steam.desktop
diff --git a/.config/plank/dock/launchers/trash.dockitem b/.config/plank/dock/launchers/trash.dockitem
deleted file mode 100644
index 567a63e..0000000
--- a/.config/plank/dock/launchers/trash.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=docklet://trash
diff --git a/.config/plank/dock/launchers/virtualbox.dockitem b/.config/plank/dock/launchers/virtualbox.dockitem
deleted file mode 100644
index fa95934..0000000
--- a/.config/plank/dock/launchers/virtualbox.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/virtualbox.desktop
diff --git a/.config/plank/dock/launchers/vlc.dockitem b/.config/plank/dock/launchers/vlc.dockitem
deleted file mode 100644
index c20771a..0000000
--- a/.config/plank/dock/launchers/vlc.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/vlc.desktop
diff --git a/.config/plank/dock1/launchers/code-oss.dockitem b/.config/plank/dock1/launchers/code-oss.dockitem
deleted file mode 100644
index 3d8af2b..0000000
--- a/.config/plank/dock1/launchers/code-oss.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/code-oss.desktop
diff --git a/.config/plank/dock1/launchers/com.obsproject.Studio.dockitem b/.config/plank/dock1/launchers/com.obsproject.Studio.dockitem
deleted file mode 100644
index 39554a1..0000000
--- a/.config/plank/dock1/launchers/com.obsproject.Studio.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///home/srdusr/.local/share/applications/com.obsproject.Studio.desktop
diff --git a/.config/plank/dock1/launchers/discord.dockitem b/.config/plank/dock1/launchers/discord.dockitem
deleted file mode 100644
index c6736ba..0000000
--- a/.config/plank/dock1/launchers/discord.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/discord.desktop
diff --git a/.config/plank/dock1/launchers/firefox.dockitem b/.config/plank/dock1/launchers/firefox.dockitem
deleted file mode 100644
index 0dbfff7..0000000
--- a/.config/plank/dock1/launchers/firefox.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/firefox.desktop
diff --git a/.config/plank/dock1/launchers/obsidian.dockitem b/.config/plank/dock1/launchers/obsidian.dockitem
deleted file mode 100644
index 0170dbd..0000000
--- a/.config/plank/dock1/launchers/obsidian.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/obsidian.desktop
diff --git a/.config/plank/dock1/launchers/org.qbittorrent.qBittorrent.dockitem b/.config/plank/dock1/launchers/org.qbittorrent.qBittorrent.dockitem
deleted file mode 100644
index 7475952..0000000
--- a/.config/plank/dock1/launchers/org.qbittorrent.qBittorrent.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/org.qbittorrent.qBittorrent.desktop
diff --git a/.config/plank/dock1/launchers/pcmanfm.dockitem b/.config/plank/dock1/launchers/pcmanfm.dockitem
deleted file mode 100644
index bc3af9d..0000000
--- a/.config/plank/dock1/launchers/pcmanfm.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/pcmanfm.desktop
diff --git a/.config/plank/dock1/launchers/phototonic.dockitem b/.config/plank/dock1/launchers/phototonic.dockitem
deleted file mode 100644
index e391893..0000000
--- a/.config/plank/dock1/launchers/phototonic.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///home/srdusr/.local/share/applications/phototonic.desktop
diff --git a/.config/plank/dock1/launchers/steam.dockitem b/.config/plank/dock1/launchers/steam.dockitem
deleted file mode 100644
index 143d3b4..0000000
--- a/.config/plank/dock1/launchers/steam.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/steam.desktop
diff --git a/.config/plank/dock1/launchers/trash.dockitem b/.config/plank/dock1/launchers/trash.dockitem
deleted file mode 100644
index 567a63e..0000000
--- a/.config/plank/dock1/launchers/trash.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=docklet://trash
diff --git a/.config/plank/dock1/launchers/vlc.dockitem b/.config/plank/dock1/launchers/vlc.dockitem
deleted file mode 100644
index c20771a..0000000
--- a/.config/plank/dock1/launchers/vlc.dockitem
+++ /dev/null
@@ -1,2 +0,0 @@
-[PlankDockItemPreferences]
-Launcher=file:///usr/share/applications/vlc.desktop
diff --git a/.config/polybar/config.ini b/.config/polybar/config.ini
deleted file mode 100644
index afb14a8..0000000
--- a/.config/polybar/config.ini
+++ /dev/null
@@ -1,671 +0,0 @@
-;==========================================================
-;
-;
-; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗
-; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗
-; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝
-; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗
-; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║
-; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝
-;
-;
-; To learn more about how to configure Polybar
-; go to https://github.com/polybar/polybar
-;
-; The README contains a lot of information
-;
-;==========================================================
-
-[settings]
-screenchange-reload = true
-pseudo-transparency = true
-;throttle-output = 5
-;throttle-output-for = 10
-;compositing-background = source
-;compositing-foreground = over
-;compositing-overline = over
-;compositing-underline = over
-;compositing-border = over
-
-[colors]
-foreground = #fafafa
-foreground-alt = #aaCECCC9
-;background = #aa000000
-background = #dd000000
-background-alt = #aaCECCC9
-disabled = #707880
-alert = #ff8989
-blue = #61afef
-dark_blue = #42A5F5
-light_blue = #ADD8E6
-nord = #81a1c1
-purple = #c882e7
-orange = #E57C46
-gray = #676E95
-red = #EC7875
-pink = #EC407A
-yellow = #FDD835
-amber = #FBC02D
-indigo = #6C77BB
-green = #61C766
-lime = #B9C244
-
-[fonts]
-font0 = "SF Pro Mono:style=Display Bold:size=10;2"
-font1 = "Material Design Icons:style=Bold:size=11.5;2"
-font2 = "Material Design Icons:style=Bold:size=13.5;2"
-font3 = "SF Pro:style=Medium:size=10.5;2"
-font4 = "SF Pro:style=Regular:size=13;2"
-font5 = "UbuntuMono Nerd font:size=11;2"
-font6 = "Feather:style=Regular:size=15;4"
-font7 = "Font Awesome 6 Pro Solid:style=Solid:size=14;4"
-font8 = "JetBrainsMono Nerd Font:size=9;2"
-font9 = "Fira Nerd font:size=11;2"
-font10 = "RobotoMono Nerd Font:weight=bold:size=9;2"
-font11 = "RobotoMono Nerd Font:size=10;3"
-font12 = "RobotoMono Nerd Font:size=11;3"
-
-[common]
-line-size = 1pt
-enable-ipc = true
-wm-restack = bspwm
-dpi = 96
-font-0 = ${fonts.font0}
-font-1 = ${fonts.font1}
-font-2 = ${fonts.font2}
-font-3 = ${fonts.font3}
-font-4 = ${fonts.font4}
-font-5 = ${fonts.font5}
-font-6 = ${fonts.font6}
-font-7 = ${fonts.font7}
-font-8 = ${fonts.font8}
-font-9 = ${fonts.font9}
-font-10 = ${fonts.font10}
-font-11 = ${fonts.font11}
-font-12 = ${fonts.font12}
-background = ${colors.background}
-foreground = ${colors.foreground}
-
-[bar/main-0]
-monitor = ${env:MONITOR:}
-width = 99%
-offset-x = 0.5%
-offset-y = 0.5%
-height = 20pt
-radius = 10.0
-fixed-center = true
-inherit = common
-;modules-left = space space menu space space space bspwm space space
-modules-left = space space menu space space space bspwm space space big_space space space cpu space sep space memory space sep space temperature space sep space battery
-modules-center = space space date space space
-;modules-center = space space cpu space sep space memory space sep space temperature space sep space battery big_space date big_space wireless-network space sep space netspeed space sep space vpn space space
-;modules-right = space space mic space sep space volume space sep space backlight space sep space inbox space sep space systray space space sep control space space
-modules-right = space space wireless-network space sep space netspeed space sep space vpn space space big_space space space mic space sep space volume space sep space backlight space sep space inbox space sep space systray space space sep control space space
-
-[bar/main-1]
-monitor = ${env:MONITOR:}
-;width = 260px
-width = 180px
-offset-x = 0%:+10px
-offset-y = 0.5%
-height = 20pt
-radius = 10.0
-fixed-center = true
-inherit = common
-modules-left = space space menu space space space bspwm space space
-
-[bar/main-2]
-monitor = ${env:MONITOR:}
-;width = 230px
-;offset-x = 33.3333%:-130px
-width = 295px
-offset-x = 33.3333%:-195px
-offset-y = 0.5%
-height = 20pt
-radius = 10.0
-fixed-center = true
-inherit = common
-modules-center = space space cpu space sep space memory space sep space temperature space sep space battery space space
-
-[bar/main-3]
-monitor = ${env:MONITOR:}
-;width = 220px
-;width = 150px
-width = 170px
-;offset-x = 50%:-110px
-;offset-x = 50%:-110px
-offset-x = 50%:-85px
-offset-y = 0.5%
-height = 20pt
-radius = 10.0
-fixed-center = true
-inherit = common
-font-0 = "RobotoMono Nerd Font:weight=bold:size=9;2"
-font-1 = "RobotoMono Nerd Font:size=10;3"
-font-2 = "RobotoMono Nerd Font:size=11;3"
-;modules-center = space space day space sep space date space sep space time space space
-modules-center = space space date space space
-
-[bar/main-4]
-monitor = ${env:MONITOR:}
-;width = 230px
-;offset-x = 66.6667%:-100px
-width = 295px
-offset-x = 66.6667%:-100px
-offset-y = 0.5%
-height = 20pt
-radius = 10.0
-fixed-center = true
-;padding-right = 4
-inherit = common
-;modules-center = space space space sep space vpn space space
-modules-center = space space wireless-network space sep space netspeed space sep space vpn space space
-;modules-center = space space wireless-network netspeed space sep space space space
-
-[bar/main-5]
-monitor = ${env:MONITOR:}
-;width = 260px
-width = 180px
-offset-x = 100%:-190px
-offset-y = 0.5%
-height = 20pt
-radius = 10.0
-fixed-center = true
-padding-left = 2
-;padding-right = 2
-inherit = common
-modules-right = space space mic space sep space volume space sep space backlight space sep space inbox space sep space systray space space sep control space space
-
-
-;; Modules
-
-[module/bspwm]
-type = internal/bspwm
-format = <label-state>
-format-padding = 2
-format-foreground = ${colors.foreground}
-index-sort = true
-enable-click = true
-reverse-scroll = false
-label-focused = ●
-label-focused-padding = 1
-label-occupied = "%name%"
-label-occupied-foreground = ${colors.foreground}
-label-occupied-padding = 1
-;label-empty = ○
-label-empty="%name%"
-label-empty-foreground = ${colors.disabled}
-label-empty-padding = 1
-format-font = 5
-
-[module/xwindow]
-type = internal/xwindow
-format = <label>
-format-background = ${colors.background}
-format-foreground = ${colors.foreground}
-format-padding = 2
-label = %title%
-label-maxlen = 40
-label-empty = ~/
-label-empty-foreground = ${colors.disabled}
-
-[module/volume]
-type = internal/pulseaudio
-;format-volume = <label-volume> <bar-volume>
-;label-volume = 
-;label-volume-foreground = ${colors.foreground}
-;label-muted =  muted
-;bar-volume-width = 10
-;bar-volume-foreground-0 = #55aa55
-;bar-volume-foreground-1 = #55aa55
-;bar-volume-foreground-2 = #55aa55
-;bar-volume-foreground-3 = #55aa55
-;bar-volume-foreground-4 = #55aa55
-;bar-volume-foreground-5 = #f5a70a
-;bar-volume-foreground-6 = #ff5555
-;bar-volume-gradient = false
-;bar-volume-indicator = │
-;bar-volume-indicator-font = 2
-;bar-volume-indicator-foreground = #ff
-;bar-volume-fill = ─
-;bar-volume-fill-font = 2
-;bar-volume-empty = ─
-;bar-volume-empty-font = 2
-;bar-volume-empty-foreground =
-
-;format-volume = <ramp-volume> <label-volume
-format-volume = <ramp-volume>
-format-volume-font = 9
-format-volume-padding = 0
-label-volume = %percentage:2%%
-label-volume-padding = 1
-;label-muted-foreground = ${colors.foreground}
-;format-volume-foreground = ${colors.purple}
-format-muted-foreground = ${colors.red}
-format-muted-underline = ${colors.red}
-ramp-volume-foreground = ${colors.foreground}
-;label-muted = "muted"
-label-muted = "  "
-label-muted-foreground = ${colors.disabled}
-ramp-volume-0 = "  "
-ramp-volume-1 = "  "
-ramp-volume-2 = "  "
-ramp-volume-3 = "  "
-ramp-volume-4 = " "
-ramp-volume-5 = " "
-ramp-volume-6 = " "
-click-right = "pavucontrol"
-scroll-interval = 10
-
-[module/inbox]
-type = custom/text
-content-foreground = ${colors.foreground}
-;content-padding = 1
-;content-font = 3
-content = "󰮒"
-;content = " "
-;󰧬󰮒󰻨
-click-left = ~/.config/eww/scripts/openNotificationCenter.sh
-;click-left = notification-center
-
-[module/day]
-type = internal/date
-interval = 1
-date = %a
-label = %date%
-label-foreground = ${colors.foreground}
-
-;[module/day]
-;type = internal/date
-;interval = 1
-;date = %A
-;label = %date:8%
-;label-foreground = ${colors.foreground}
-;
-;[module/date]
-;type = internal/date
-;interval = 1
-;;date = %d-%m-%Y
-;date = %d %b %Y
-;label = %date%
-;label-foreground = ${colors.foreground}
-;format = %{A1:$HOME/.config/eww/scripts/popup calendar &:}<label>%{A}
-
-[module/date]
-type = internal/date
-interval = 1
-label = %date% %time%
-;label-padding = 2.5
-label-background =
-date = %a %d %b %Y
-time = %H:%M:%S
-format-font = 11
-
-
-[module/calendar]
-type = custom/text
-content = 󰸗
-;content-font = 1
-content-padding = 1
-content-foreground = ${colors.primary}
-enable-click = true
-click-left = ~/.config/eww/scripts/popup calendar &
-
-[module/time]
-type = internal/date
-interval = 1
-date = %H:%M:%S
-label = %date%
-label-foreground = ${colors.foreground}
-
-[module/memory]
-type=internal/memory
-interval=5
-format=<label>
-format-font=8
-format-prefix="󰨅"
-;󰘚󰥜󰥠󰨅
-format-foreground=${colors.foreground}
-format-prefix-foreground=${colors.foreground}
-label-font=2
-label-foreground=${colors.foreground}
-label="%{A1:alacritty -e htop &:} %gb_used%%{A}"
-
-[module/cpu]
-type=internal/cpu
-interval=5
-format-prefix-font=4
-format-prefix="󰍛 "
-format-padding=0
-;format-prefix-foreground=${colors.green}
-format-prefix-foreground=${colors.foreground}
-format-foreground=${colors.foreground}
-label="%percentage%%"
-label-foreground=${colors.foreground}
-label-font=2
-
-;[module/temperature]
-;type=internal/temperature
-;; Seconds to sleep between updates
-;; Default: 1
-;interval=10
-;; Thermal zone to use
-;; To list all the zone types, run
-;; $ for i in /sys/class/thermal/thermal_zone*; do echo "$i: $(<$i/type)"; done
-;; Default: 0
-;thermal-zone=0
-;; Full path of temperature sysfs path
-;; Use `sensors` to find preferred temperature source, then run
-;; $ for i in /sys/class/hwmon/hwmon*/temp*_input; do echo "$(<$(dirname $i)/name): $(cat ${i%_*}_label 2>/dev/null || echo $(basename ${i%_*})) $(readlink -f $i)"; done
-;; to find path to desired file
-;; Default reverts to thermal zone setting
-;;hwmon-path=/sys/devices/platform/dell_smm_hwmon/hwmon/hwmon2/temp1_input
-;hwmon-path=/sys/devices/platform/dell_smm_hwmon/hwmon/hwmon1/temp1_input
-;; Base temperature for where to start the ramp (in degrees celsius)
-;; Default: 0
-;base-temperature=20
-;warn-temperature=60
-;; Threshold temperature to display warning label (in degrees celsius)
-;; Default: 80
-;format-prefix="  "
-;format-warn-prefix="  "
-;format-warn-foreground=${colors.red}
-;format-foreground=${colors.foreground}
-;format-font=4
-;format-warn-font=4
-;label-warn-font=2
-;label-foreground=${colors.foreground}
-;format = "<label>"
-;label-font=2
-
-[module/temperature]
-type = custom/script
-interval = 5
-format = <label>
-format-prefix = "  "
-format-prefix-foreground = ${colors.foreground}
-exec = ~/.config/polybar/scripts/temperature.sh
-
-
-[module/battery]
-type = custom/script
-exec = $HOME/.scripts/battery.sh
-format-font = 1
-format-prefix = ""
-interval = 10
-;click-right = xfce4-power-manager-settings
-
-[module/backlight]
-type = internal/backlight
-; Use the following command to list available cards:
-; $ ls -1 /sys/class/backlight/
-; Default: first usable card in /sys/class/backlight (new in version 3.7.0)
-card = intel_backlight
-; Use the `/sys/class/backlight/.../actual-brightness` file
-; rather than the regular `brightness` file.
-; New in version 3.6.0
-; Changed in version: 3.7.0: Defaults to true also on amdgpu backlights
-; Default: true
-;use-actual-brightness = true
-; Interval in seconds after which after which the current brightness is read
-; (even if no update is detected).
-; Use this as a fallback if brightness updates are not registering in polybar
-; (which happens if the use-actual-brightness is false).
-; There is no guarantee on the precisio of this timing.
-; Set to 0 to turn off
-; New in version 3.7.0
-; Default: 0 (5 if use-actual-brightness is false)
-;poll-interval = 0
-; Enable changing the backlight with the scroll wheel
-; NOTE: This may require additional configuration on some systems. Polybar will
-; write to `/sys/class/backlight/${self.card}/brightness` which requires polybar
-; to have write access to that file.
-; DO NOT RUN POLYBAR AS ROOT.
-; The recommended way is to add the user to the
-; `video` group and give that group write-privileges for the `brightness` file.
-; See the ArchWiki for more information:
-; https://wiki.archlinux.org/index.php/Backlight#ACPI
-; Default: false
-enable-scroll = true
-; Interval for changing the brightness (in percentage points).
-; New in version 3.7.0
-; Default: 5
-scroll-interval = 10
-; Available tags:
-; <label> (default)
-; <ramp>
-; <bar>
-format = <ramp>
-format-foreground = {colors.foreground}
-; Available tokens:
-; %percentage% (default)
-label = %percentage:2%%
-label-font=7
-;; Only applies if <ramp> is used
-ramp-0 = 󰃞
-ramp-1 = 󰃝
-ramp-2 = 󰃟
-ramp-3 = 󰃠
-;; Only applies if <bar> is used
-;bar-width = 10
-;bar-indicator = |
-;bar-fill = ─
-;bar-empty = ─
-
-[module/bluetooth]
-type = custom/text
-content = ""
-format = <label>
-content-foreground = ${colors.foreground}
-; click-middle = bspc rule -a '*' -o state=floating rectangle=400x120+775+48 && kitty -e sudo polybarblue.sh
- click-left = blueman-manager
-
-[module/control]
-type = custom/script
-exec = echo 􀜊
-format = <label>
-format-padding = 1
-label-padding =
-content-background =
-format-foreground = ${colors.foreground}
-click-left = ~/.config/eww/scripts/openControlCenter.sh
-;click-left = control-center
-;click-left = $HOME/.scripts/toggle-control &
-
-[module/wireless-network]
-type = internal/network
-interface = wlan0
-interval = 3.0
-unknown-as-up = true
-format-connected-background = ${colors.background}
-format-connected-foreground = ${colors.foreground}
-format-connected-padding = 1
-format-connected = %{A1:$HOME/.scripts/rofi-network-manager.sh:}<ramp-signal> <label-connected>%{A}
-label-connected = "%essid:03:5%/%local_ip%"
-#label-connected = "ESSID/127.0.0.1"
-format-disconnected-background = ${colors.background}
-format-disconnected-foreground = ${colors.foreground}
-format-disconnected-padding = 1
-format-disconnected = %{A1:$HOME/.scripts//rofi-network-manager.sh:}<label-disconnected>%{A}
-;label-disconnected ="Network Disconnected 󱍢 ......"
-;label-disconnected =" 󰤮 Network Disconnected ......... 󱍢 .......... "
-label-disconnected ="󰤮 Net Disconnected"
-ramp-signal-0 = "󰤯"
-ramp-signal-1 = "󰤟"
-ramp-signal-2 = "󰤢"
-ramp-signal-3 = "󰤥"
-ramp-signal-4 = "󰤨"
-ramp-signal-foreground = ${colors.white}
-enable-click = true
-click-left = $HOME/.scripts/rofi-network-manager.sh &
-
-[module/wifi]
-type = custom/script
-tail = true
-interval = 1
-format = <label>
-format-prefix = " "
-wifi = wifi
-wifi-alt = iwgetid -r
-exec = iwgetid -r
-click-left = kitty nmtui
-click-right = nm-connection-editor
-label-disconnected = %{A1:nm-connection-editor:}%essid%%{A}
-
-[module/wlan-signal]
-type = custom/script
-label = %output%
-exec = awk 'NR==3 {print $4 "00 dBm"}' /proc/net/wireless
-format-prefix = "ﴽ "
-format-prefix-foreground = ${colors.yellow}
-format-background = ${colors.background}
-format-foreground = ${colors.foreground}
-interval = 1
-
-[module/netspeed]
-type = internal/network
-;interface = ${system.sys_network_interface}
-interface-type = wireless
-interval = 3.0
-accumulate-stats = true
-;unknown-as-up = true
-format-connected = <label-connected>
-format-disconnected = <label-disconnected>
-;label-disconnected = ""
-label-disconnected = " 0 KB/s "
-format-disconnected-prefix = "󰯎"
-format-connected-prefix = "󰯎"
-speed-unit = ""
-label-connected = "%netspeed:5%B/s "
-
-[module/upspeed]
-type = internal/network
-interface-type = wireless
-interval = 1
-format-connected = <label-connected>
-format-disconnected = <label-disconnected>
-label-disconnected = ""
-format-disconnected-prefix = ""
-format-connected-prefix = " "
-label-connected = " %upspeed:8%"
-
-[module/downspeed]
-type = internal/network
-interface-type = wireless
-interval = 1
-format-connected = <label-connected>
-format-disconnected = <label-disconnected>
-label-disconnected = ""
-format-disconnected-prefix = ""
-format-connected-prefix = ""
-label-connected = " %downspeed:8%"
-
-[module/vpn]
-type = custom/script
-#exec = protonvpn status
-exec = ~/.config/polybar/scripts/vpn.sh
-;tail = true
-interval = 1
-label-font = 6
-format-prefix = " "
-format = <label>
-click-left = sudo protonvpn c -f
-click-right = sudo protonvpn disconnect
-;
-
-[module/gpu-nvidia]
-type = custom/script
-exec = $HOME/.config/polybar/scripts/gpu-nvidia.sh
-interval = 2
-format-font = 2
-format-foreground = #69F0AE
-
-[module/gpu-intel]
-type = custom/script
-#exec = $HOME/.config/polybar/scripts/gpu-intel.sh
-interval = 2
-
-[module/spotify]
-type = custom/script
-tail = true
-interval = 1
-format-prefix = " "
-format = <label>
-exec = ~/.config/polybar/scripts/get_spotify_status.sh
-
-[module/menu]
-type = custom/text
-content = 󱎂
-;󰣇󰈷󰨝󰵆􀇸􀘸􀟒􀣺􀦲
-content-font = 3
-content-padding = 1
-content-foreground = ${colors.foreground}
-enable-click = true
-click-left = ~/.config/jgmenu/scripts/startmenu.sh
-click-right = $HOME/.scripts/menu_full.sh
-
-[module/power]
-type = custom/text
-content = 󰐥
-;content = 襤
-content-foreground = ${colors.red}
-content-padding = 1
-label-margin = 3
-click-left = ~/.scripts/sysmenu.sh
-
-[module/systray]
-type=custom/ipc
-hook-0=echo " "
-hook-1=echo " "
-click-left=systray
-initial=2
-format-font=2
-format-foreground=${colors.blue}
-;format-foreground=${colors.foreground}
-
-[module/weather]
-type = custom/script
-exec = "sh ~/.config/polybar/weather.sh"
-interval = 700
-
-[module/tray]
-type = internal/tray
-format-margin = 8px
-tray-spacing = 8px
-
-[module/updates]
-type = custom/script
-tail = true
-interval = 1
-format-prefix = " "
-format = <label>
-exec = checkupdates | wc -l
-click-left = kitty yay -Syu --noconfirm
-
-[module/mic]
-type = custom/script
-interval = 0.5
-exec = $HOME/.config/polybar/scripts/microphone.sh
-format = <label>
-format-font = 9
-click-left = pamixer --source 1 -t
-scroll-up = pamixer --source 1 -i 5
-scroll-down = pamixer --source 1 -d 5
-
-
-;; decor
-
-[module/sep]
-type = custom/text
-content = "|"
-content-foreground = ${colors.disabled}
-
-[module/space]
-type = custom/text
-content = " "
-
-[module/big_space]
-type = custom/text
-content = " "
-
-; vim:ft=dosini
diff --git a/.config/polybar/launch.sh b/.config/polybar/launch.sh
deleted file mode 100755
index 5468c8e..0000000
--- a/.config/polybar/launch.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env sh
-
-# Terminate already running bar instances
-killall -q polybar
-
-# Wait until the processes have been shut down
-while pgrep -u "$UID" -x polybar >/dev/null; do sleep 1; done
-
-
-# Launch bar
-#polybar main-0 &
-polybar main-1 &
-polybar main-2 &
-polybar main-3 &
-polybar main-4 &
-polybar main-5 &
-
-# Define bars per monitors
-#declare -A ARRANGEMENTS=(["$mainmonitor"]="main-0" ["$secondmonitor"]="main-0")
-declare -A ARRANGEMENTS=(["$mainmonitor"]="main-1,main-2,main-3,main-4,main-5" ["$secondmonitor"]="main-1,main-2,main-3,main-4,main-5")
-
-# Each key
-for MONITOR in "${!ARRANGEMENTS[@]}"; do
- # split at `,` into array
- while IFS=',' read -ra BARLIST; do
- # for each bar (seperated by `,`) at current key
- for BAR in "${BARLIST[@]}"; do
- MONITOR="$MONITOR" polybar --reload "$BAR" &
- done
- done <<< "${ARRANGEMENTS[$MONITOR]}"
-done
diff --git a/.config/polybar/scripts/bluetooth.sh b/.config/polybar/scripts/bluetooth.sh
deleted file mode 100755
index 061604b..0000000
--- a/.config/polybar/scripts/bluetooth.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-if [ $(bluetoothctl show | grep "Powered: yes" | wc -c) -eq 0 ]
-then
- echo ""
-else
- if [ $(echo info | bluetoothctl | grep 'Device' | wc -c) -eq 0 ]
- then
- echo ""
- fi
- echo ""
-fi
-
diff --git a/.config/polybar/scripts/check-network.sh b/.config/polybar/scripts/check-network.sh
deleted file mode 100755
index dabe74c..0000000
--- a/.config/polybar/scripts/check-network.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env bash
-
-count=0
-disconnected="睊"
-wireless_connected="直"
-ethernet_connected="泌"
-
-ID="$(ip link | awk '/state UP/ {print $2}')"
-
-while true; do
- if (ping -c 1 archlinux.org || ping -c 1 google.com || ping -c 1 bitbucket.org || ping -c 1 github.com || ping -c 1 sourceforge.net) &>/dev/null; then
- if [[ $ID == e* ]]; then
- echo "$ethernet_connected" ; sleep 25
- else
- echo "$wireless_connected" ; sleep 25
- fi
- else
- echo "$disconnected" ; sleep 0.5
- fi
-done
-
diff --git a/.config/polybar/scripts/check_updates.sh b/.config/polybar/scripts/check_updates.sh
deleted file mode 100755
index 52e51a9..0000000
--- a/.config/polybar/scripts/check_updates.sh
+++ /dev/null
@@ -1,118 +0,0 @@
-
-#!/usr/bin/bash
-#
-# checkupdates: Safely print a list of pending updates.
-#
-# Copyright (c) 2013 Kyle Keen <keenerd@gmail.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-
-declare -r myname='checkupdates'
-declare -r myver='1.0.0'
-
-plain() {
- (( QUIET )) && return
- local mesg=$1; shift
- printf "${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&1
-}
-
-msg() {
- (( QUIET )) && return
- local mesg=$1; shift
- printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&1
-}
-
-msg2() {
- (( QUIET )) && return
- local mesg=$1; shift
- printf "${BLUE} ->${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&1
-}
-
-ask() {
- local mesg=$1; shift
- printf "${BLUE}::${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}" "$@" >&1
-}
-
-warning() {
- local mesg=$1; shift
- printf "${YELLOW}==> $(gettext "WARNING:")${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
-}
-
-error() {
- local mesg=$1; shift
- printf "${RED}==> $(gettext "ERROR:")${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
-}
-
-# check if messages are to be printed using color
-unset ALL_OFF BOLD BLUE GREEN RED YELLOW
-if [[ -t 2 && ! $USE_COLOR = "n" ]]; then
- # prefer terminal safe colored and bold text when tput is supported
- if tput setaf 0 &>/dev/null; then
- ALL_OFF="$(tput sgr0)"
- BOLD="$(tput bold)"
- BLUE="${BOLD}$(tput setaf 4)"
- GREEN="${BOLD}$(tput setaf 2)"
- RED="${BOLD}$(tput setaf 1)"
- YELLOW="${BOLD}$(tput setaf 3)"
- else
- ALL_OFF="\e[1;0m"
- BOLD="\e[1;1m"
- BLUE="${BOLD}\e[1;34m"
- GREEN="${BOLD}\e[1;32m"
- RED="${BOLD}\e[1;31m"
- YELLOW="${BOLD}\e[1;33m"
- fi
-fi
-readonly ALL_OFF BOLD BLUE GREEN RED YELLOW
-
-
-if (( $# > 0 )); then
- echo "${myname} v${myver}"
- echo
- echo "Safely print a list of pending updates"
- echo
- echo "Usage: ${myname}"
- echo
- echo 'Note: Export the "CHECKUPDATES_DB" variable to change the path of the temporary database.'
- exit 0
-fi
-
-if ! type -P fakeroot >/dev/null; then
- error 'Cannot find the fakeroot binary.'
- exit 1
-fi
-
-if [[ -z $CHECKUPDATES_DB ]]; then
- CHECKUPDATES_DB="${TMPDIR:-/tmp}/checkup-db-${USER}/"
-fi
-
-trap 'rm -f $CHECKUPDATES_DB/db.lck' INT TERM EXIT
-
-DBPath="$(pacman-conf DBPath)"
-if [[ -z "$DBPath" ]] || [[ ! -d "$DBPath" ]]; then
- DBPath="/var/lib/pacman/"
-fi
-
-mkdir -p "$CHECKUPDATES_DB"
-ln -s "${DBPath}/local" "$CHECKUPDATES_DB" &> /dev/null
-if ! fakeroot -- pacman -Sy --dbpath "$CHECKUPDATES_DB" --logfile /dev/null &> /dev/null; then
- error 'Cannot fetch updates'
- exit 1
-fi
-pacman -Qu --dbpath "$CHECKUPDATES_DB" 2> /dev/null | grep -v '\[.*\]'
-
-exit 0
-
-# vim: set noet:
diff --git a/.config/polybar/scripts/cmus.sh b/.config/polybar/scripts/cmus.sh
deleted file mode 100755
index 2f42c63..0000000
--- a/.config/polybar/scripts/cmus.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/bash
-
-prepend_zero () {
- seq -f "%02g" $1 $1
-}
-
-artist=$(echo -n $(cmus-remote -C status | grep "tag artist" | cut -c 12-))
-
-if [[ $artist = *[!\ ]* ]]; then
- song=$(echo -n $(cmus-remote -C status | grep title | cut -c 11-))
- position=$(cmus-remote -C status | grep position | cut -c 10-)
- minutes1=$(prepend_zero $(($position / 60)))
- seconds1=$(prepend_zero $(($position % 60)))
- duration=$(cmus-remote -C status | grep duration | cut -c 10-)
- minutes2=$(prepend_zero $(($duration / 60)))
- seconds2=$(prepend_zero $(($duration % 60)))
- echo -n "$artist - $song "
-else
- echo
-fi
-
-#prepend_zero () {
-# seq -f "%02g" $1 $1
-#}
-#
-#artist=$(echo -n $(cmus-remote -C status | grep "tag artist" | cut -c 12-))
-#
-#if [[ $artist = *[!\ ]* ]]; then
-# song=$(echo -n $(cmus-remote -C status | grep title | cut -c 11-))
-# position=$(cmus-remote -C status | grep position | cut -c 10-)
-# minutes1=$(prepend_zero $(($position / 60)))
-# seconds1=$(prepend_zero $(($position % 60)))
-# duration=$(cmus-remote -C status | grep duration | cut -c 10-)
-# minutes2=$(prepend_zero $(($duration / 60)))
-# seconds2=$(prepend_zero $(($duration % 60)))
-# echo -n "$artist - $song [$minutes1:$seconds1/$minutes2:$seconds2]"
-#else
-# echo
-#fi
diff --git a/.config/polybar/scripts/get_spotify_status.sh b/.config/polybar/scripts/get_spotify_status.sh
deleted file mode 100755
index f04400d..0000000
--- a/.config/polybar/scripts/get_spotify_status.sh
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/bash
-
-# The name of polybar bar which houses the main spotify module and the control modules.
-PARENT_BAR="now-playing"
-PARENT_BAR_PID=$(pgrep -a "polybar" | grep "$PARENT_BAR" | cut -d" " -f1)
-
-# Set the source audio player here.
-# Players supporting the MPRIS spec are supported.
-# Examples: spotify, vlc, chrome, mpv and others.
-# Use `playerctld` to always detect the latest player.
-# See more here: https://github.com/altdesktop/playerctl/#selecting-players-to-control
-#PLAYER="spotify"
-PLAYER="playerctld"
-
-# Format of the information displayed
-# Eg. {{ artist }} - {{ album }} - {{ title }}
-# See more attributes here: https://github.com/altdesktop/playerctl/#printing-properties-and-metadata
-FORMAT="{{ title }} - {{ artist }}"
-
-# Sends $2 as message to all polybar PIDs that are part of $1
-update_hooks() {
- while IFS= read -r id
- do
- polybar-msg -p "$id" hook spotify-play-pause $2 1>/dev/null 2>&1
- done < <(echo "$1")
-}
-
-PLAYERCTL_STATUS=$(playerctl --player=$PLAYER status 2>/dev/null)
-EXIT_CODE=$?
-
-if [ $EXIT_CODE -eq 0 ]; then
- STATUS=$PLAYERCTL_STATUS
-else
- STATUS="No player is running"
-fi
-
-if [ "$1" == "--status" ]; then
- echo "$STATUS"
-else
- if [ "$STATUS" = "Stopped" ]; then
- echo "No music is playing"
- elif [ "$STATUS" = "Paused" ]; then
- update_hooks "$PARENT_BAR_PID" 2
- playerctl --player=$PLAYER metadata --format "$FORMAT"
- elif [ "$STATUS" = "No player is running" ]; then
- echo ""
- else
- update_hooks "$PARENT_BAR_PID" 1
- playerctl --player=$PLAYER metadata --format "$FORMAT"
- fi
-fi
-
diff --git a/.config/polybar/scripts/menu.sh b/.config/polybar/scripts/menu.sh
deleted file mode 100755
index cd95ee0..0000000
--- a/.config/polybar/scripts/menu.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-
-# Specify the path to the Rofi configuration file
-config_file="$HOME/.config/rofi/styles/appmenu.rasi"
-
-rofi -no-lazy-grab -show drun -display-drun "Applications " -drun-display-format "{name}" -sep -config "$config_file"
diff --git a/.config/polybar/scripts/menu.shsave b/.config/polybar/scripts/menu.shsave
deleted file mode 100755
index ea5bf8e..0000000
--- a/.config/polybar/scripts/menu.shsave
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/bash
-
-# Custom Rofi Script
-
-BORDER="#1F1F1F"
-SEPARATOR="#1F1F1F"
-FOREGROUND="#A9ABB0"
-BACKGROUND="#1F1F1F"
-BACKGROUND_ALT="#252525"
-HIGHLIGHT_BACKGROUND="#FF6F00"
-HIGHLIGHT_FOREGROUND="#FFFFFF"
-
-BLACK="#000000"
-WHITE="#ffffff"
-RED="#e53935"
-GREEN="#43a047"
-YELLOW="#fdd835"
-BLUE="#1e88e5"
-MAGENTA="#00897b"
-CYAN="#00acc1"
-PINK="#d81b60"
-PURPLE="#8e24aa"
-INDIGO="#3949ab"
-TEAL="#00897b"
-LIME="#c0ca33"
-AMBER="#ffb300"
-ORANGE="#fb8c00"
-BROWN="#6d4c41"
-GREY="#757575"
-BLUE_GREY="#546e7a"
-DEEP_PURPLE="#5e35b1"
-DEEP_ORANGE="#f4511e"
-LIGHT_BLUE="#039be5"
-LIGHT_GREEN="#7cb342"
-
-# Launch Rofi
-rofi -no-lazy-grab -show drun -display-drun "Applications " -drun-display-format "{name}" -hide-scrollbar false \
--hide-sidebar-mode true \
--bw 0 \
--lines 15 \
--line-padding 10 \
--padding 0 \
--width 20 \
--xoffset 7 -yoffset 28 \
--location 1 \
--columns 1 \
--show-icons -icon-theme "Papirus" \
--color-enabled true \
--color-window "$BACKGROUND,$BORDER,$SEPARATOR" \
--color-normal "$BACKGROUND_ALT,$FOREGROUND,$BACKGROUND_ALT,$HIGHLIGHT_BACKGROUND,$HIGHLIGHT_FOREGROUND" \
--color-active "$BACKGROUND,$MAGENTA,$BACKGROUND_ALT,$HIGHLIGHT_BACKGROUND,$HIGHLIGHT_FOREGROUND" \
--color-urgent "$BACKGROUND,$YELLOW,$BACKGROUND_ALT,$HIGHLIGHT_BACKGROUND,$HIGHLIGHT_FOREGROUND"
-#rofi -no-lazy-grab -show drun -display-drun "Applications " -drun-display-format "{name}" -hide-scrollbar true -sidebar-mode false -bw 0 -lines 6 -line-padding 10 -padding 20 -width 30 -xoffset 7 -yoffset 25 -location 1 -columns 2 -show-icons -icon-theme "Papirus"
-
-# More Options
-# -fullscreen \
-
-# Theming help
-# color window = background, border, separator
-# color normal = background, foreground, background-alt, highlight-background, highlight-foreground
-# color active = background, foreground, background-alt, highlight-background, highlight-foreground
-# color urgent = background, foreground, background-alt, highlight-background, highlight-foreground
-
diff --git a/.config/polybar/scripts/menu_full.sh b/.config/polybar/scripts/menu_full.sh
deleted file mode 100755
index 9f898a4..0000000
--- a/.config/polybar/scripts/menu_full.sh
+++ /dev/null
@@ -1,65 +0,0 @@
-
-#!/bin/bash
-
-# Custom Rofi Script
-
-BORDER="#1F1F1F"
-SEPARATOR="#1F1F1F"
-FOREGROUND="#A9ABB0"
-BACKGROUND="#1F1F1F"
-BACKGROUND_ALT="#252525"
-HIGHLIGHT_BACKGROUND="#FF6F00"
-HIGHLIGHT_FOREGROUND="#FFFFFF"
-
-BLACK="#000000"
-WHITE="#ffffff"
-RED="#e53935"
-GREEN="#43a047"
-YELLOW="#fdd835"
-BLUE="#1e88e5"
-MAGENTA="#00897b"
-CYAN="#00acc1"
-PINK="#d81b60"
-PURPLE="#8e24aa"
-INDIGO="#3949ab"
-TEAL="#00897b"
-LIME="#c0ca33"
-AMBER="#ffb300"
-ORANGE="#fb8c00"
-BROWN="#6d4c41"
-GREY="#757575"
-BLUE_GREY="#546e7a"
-DEEP_PURPLE="#5e35b1"
-DEEP_ORANGE="#f4511e"
-LIGHT_BLUE="#039be5"
-LIGHT_GREEN="#7cb342"
-
-# Launch Rofi
-rofi -no-lazy-grab -show drun \
--display-drun "Applications " -drun-display-format "{name}" \
--hide-scrollbar true \
--bw 0 \
--lines 10 \
--line-padding 15 \
--padding 60 \
--width 30 \
--xoffset 10 -yoffset 40 \
--location 1 \
--fullscreen \
--columns 4 \
--show-icons -icon-theme "Papirus" \
--font "Fantasque Sans Mono 10" \
--color-enabled true \
--color-window "$BACKGROUND,$BORDER,$SEPARATOR" \
--color-normal "$BACKGROUND_ALT,$FOREGROUND,$BACKGROUND_ALT,$HIGHLIGHT_BACKGROUND,$HIGHLIGHT_FOREGROUND" \
--color-active "$BACKGROUND,$MAGENTA,$BACKGROUND_ALT,$HIGHLIGHT_BACKGROUND,$HIGHLIGHT_FOREGROUND" \
--color-urgent "$BACKGROUND,$YELLOW,$BACKGROUND_ALT,$HIGHLIGHT_BACKGROUND,$HIGHLIGHT_FOREGROUND"
-
-# More Options
-# -fullscreen \
-
-# Theming help
-# color window = background, border, separator
-# color normal = background, foreground, background-alt, highlight-background, highlight-foreground
-# color active = background, foreground, background-alt, highlight-background, highlight-foreground
-# color urgent = background, foreground, background-alt, highlight-background, highlight-foreground
diff --git a/.config/polybar/scripts/now-playing.sh b/.config/polybar/scripts/now-playing.sh
deleted file mode 100755
index 8fa6000..0000000
--- a/.config/polybar/scripts/now-playing.sh
+++ /dev/null
@@ -1,217 +0,0 @@
-#!/usr/bin/env python3
-import dbus
-import signal
-import time
-from unicodedata import east_asian_width
-
-# Config options
-
-# (int) : Length of media info string. If length of string exceedes this value, the text will scroll. Default value is 20
-message_display_len = 20
-
-# (int) : Font index of polybar. this value should be 1 more than the font value specified in polybar config.
-font_index = 1
-
-# (float) : Update speed of the text in seconds.
-update_delay = 0.3
-
-# (list) : list of chars containing previous, play, pause, next glyphs for media controls in respective order
-control_chars = ['','','','']
-
-# (dict) : dict of char icons to display as prefix.
-# If player name is available as key, then use the corressponding icon,
-# else default key value.
-# example:
-display_player_prefix = {
- "spotify": ' ',
- "firefox": ' ',
- "default": ' '
-}
-
-# (list) : list of metadata fields based on mpris sepecification.
-# For more details/ field names, refer [mpris sepecification](https://www.freedesktop.org/wiki/Specifications/mpris-spec/metadata/)
-metadata_fields = ["xesam:title", "xesam:artist"]
-
-# (char) : separator for metadata fields
-metadata_separator = "-"
-
-# (bool) : Hide text when no player is available? True disables the output for no players.
-hide_output = False
-
-# Defult initialization
-current_player = None
-player_names = None
-players = None
-message = None
-display_text = ""
-display_prefix = " "
-display_suffix = ""
-last_player_name = None
-
-session_bus = dbus.SessionBus()
-
-def get_name(player_name ):
- if player_name not in player_names:
- return
- name = ".".join(player_name.split(".")[3:])
- return name
-
-def get_name_by_index(index):
- if index >= len(player_names):
- return
- return get_name(player_names[index])
-
-def get_status(player):
- status = ""
- try:
- status = player.Get('org.mpris.MediaPlayer2.Player', 'PlaybackStatus', dbus_interface='org.freedesktop.DBus.Properties')
- except Exception as e:
- pass
- return status
-
-def get_metadata(player):
- metadata = {}
- try:
- metadata = player.Get('org.mpris.MediaPlayer2.Player', 'Metadata', dbus_interface='org.freedesktop.DBus.Properties')
- except Exception as e:
- pass
- return metadata
-
-def update_prefix_suffix(player_name="", status=""):
- global display_prefix, display_suffix, status_paused
-
- player_option = ""
- if player_name != "":
- player_option = "-p " + player_name
-
- prev_button = "%%{A:playerctl %s previous :}%c%%{A}" %(player_option,control_chars[0])
- play_button = "%%{A:playerctl %s play :}%c%%{A}" %(player_option,control_chars[1])
- pause_button = "%%{A:playerctl %s pause :}%c%%{A}" %(player_option,control_chars[2])
- next_button = "%%{A:playerctl %s next :}%c%%{A}" %(player_option,control_chars[3])
-
- suffix = "| " + prev_button
- if status == "Playing":
- suffix += " "+pause_button
- status_paused = False
- else:
- suffix += " "+play_button
- status_paused = True
- suffix += " "+next_button
- # print(suffix)
- display_suffix = suffix
-
- for key in display_player_prefix.keys():
- if key in player_name:
- display_prefix = display_player_prefix[key]
- break
- else:
- display_prefix = display_player_prefix["default"]
-
-def update_players():
- global player_names, players, session_bus, current_player, last_player_name
- player_names = [service for service in session_bus.list_names() if service.startswith('org.mpris.MediaPlayer2.')]
- players = [session_bus.get_object(service, '/org/mpris/MediaPlayer2') for service in player_names]
- if last_player_name != get_name(current_player):
- for index, player in enumerate(player_names):
- if get_name(player) == last_player_name:
- current_player = index
-
-def handle_event(*args):
- global current_player, players, last_player_name
- update_players()
- if len(players) == 0:
- return
- current_player += 1
- current_player %= len(players)
- last_player_name = getname_by_index(current_player)
-# print("SIGUSR1: updated values - current_player = %d players len = %d"%(current_player,len(players)))
-
-def update_message():
- global players, current_player,player_names, message, display_text, message_display_len, display_suffix, last_player_name
- if len(players) == 0:
- tmp_message = "No player available"
- update_prefix_suffix()
- else:
- name = get_name_by_index(current_player)
- status = get_status(players[current_player])
- metadata_obj = get_metadata(players[current_player])
- metadata_string_list = []
- for field in metadata_fields:
- result = metadata_obj.get(field)
- if type(result) == dbus.Array:
- result = result[0]
- if not result:
- result = "No "+field.split(":")[1]
- metadata_string_list.append(str(result))
- metadata_string = (" "+metadata_separator+" ").join(metadata_string_list)
- if visual_len(metadata_string) > message_display_len:
- metadata_string = " " + metadata_string + " |"
- update_prefix_suffix(name,status)
- tmp_message = ""
- if metadata_string:
- tmp_message += str(metadata_string)
- last_player_name = name
- if message != tmp_message:
- message = tmp_message
- display_text = message
-
-def scroll():
- global display_text, message_display_len, status_paused
- if not status_paused:
- if len(display_text) > message_display_len:
- display_text = display_text[1:] + display_text[0]
- elif len(display_text) < message_display_len:
- display_text += " "*(message_display_len - len(display_text))
-
-def visual_len(text):
- visual_length = 0
- for ch in text:
- width = east_asian_width(ch)
- if width == 'W' or width == 'F':
- visual_length += 1
- visual_length += 1
- return visual_length
-
-def make_visual_len(text, visual_desired_length):
- visual_length = 0
- altered_text = ''
- for char in text:
- if visual_length < visual_desired_length:
- width = east_asian_width(char)
- if width == 'W' or width == 'F':
- visual_length += 2
- else:
- visual_length += 1
- altered_text += char
- else:
- break
- if visual_length == visual_desired_length + 1:
- altered_text = altered_text[:-1] + ' '
- elif visual_length < visual_desired_length:
- altered_text += ' ' * (visual_desired_length - visual_length)
- return altered_text
-
-def print_text():
- global display_text, message_display_len, players, player_names, display_prefix, display_suffix
- if hide_output and len(players)==0:
- print("", flush = True)
- return
- scroll()
- print(display_prefix + " " +
- "%%{T%d}" % (font_index) +
- make_visual_len(display_text, message_display_len) +
- "%{T-}" + display_suffix, flush=True)
-
-def main():
- global current_player, players
- update_players()
- current_player = 0
- while True:
- time.sleep(update_delay)
- update_players()
- update_message()
- print_text()
-
-if __name__ == '__main__':
- signal.signal(signal.SIGUSR1, handle_event)
- main()
diff --git a/.config/polybar/scripts/polybar_wrapper b/.config/polybar/scripts/polybar_wrapper
deleted file mode 100755
index 901bb28..0000000
--- a/.config/polybar/scripts/polybar_wrapper
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/bin/bash
-
-DIR=$(dirname $(realpath $0))
-
-WINDOW_ID_CONKY=/tmp/conky_window_id
-WINDOW_ID_TOP=/tmp/polybar_top_window_id
-WINDOW_ID_EXPANDED=/tmp/polybar_expanded_window_id
-
-conky_launch() {
- # Hacky X11 magic to make Conky appear above polybar
- killall conky
- # xdotool search can't find Conky's window but fortunately Conky outputs it
- conky -c ~/.config/conky/config 2> /tmp/conky_out
- # Extract the hex window id from Conky's output
- HEX=$(awk '/drawing to created window/ {print $NF}' /tmp/conky_out | tr -d '()' | awk -Fx '{print $2}')
- WIN_ID=$(( 16#$HEX )) # convert to decimal
- xdotool windowunmap $WIN_ID
- echo $WIN_ID > $WINDOW_ID_CONKY
-}
-
-polybar_launch() {
- killall polybar
-
- polybar top &
- xdotool search --sync --pid $! > $WINDOW_ID_TOP
-
- polybar expanded &
- xdotool search --sync --pid $! > $WINDOW_ID_EXPANDED
-
- bar_collapse
-}
-
-launch() {
- # Temporarily disable conky until I update the config
- # conky_launch
- # sleep 0.2
- polybar_launch
-}
-
-bar_expand() {
- xdotool windowmap $(cat $WINDOW_ID_EXPANDED)
- xdotool windowunmap $(cat $WINDOW_ID_TOP)
-}
-
-bar_collapse() {
- xdotool windowunmap $(cat $WINDOW_ID_EXPANDED)
- xdotool windowmap $(cat $WINDOW_ID_TOP)
-}
-
-rofi_open() {
- options_close
- bar_expand &
- rofi -modi run -show run
- bar_collapse
-}
-
-drun_open() {
- bar_expand &
- rofi -theme drun -modi drun -show drun -drun-categories Custom
- bar_collapse
-}
-
-search_open() {
- options_close
- bar_expand &
- rofi -theme window -modi window -show window
- bar_collapse
-}
-
-options_open() {
- bar_expand
- $DIR/rofi_option_menu
- bar_collapse
- # echo "open" > /tmp/polybar_side_panel_state
- # ID_CONKY=$(cat $WINDOW_ID_CONKY)
- # xdotool windowmap $ID_CONKY
- # xdotool windowraise $ID_CONKY
- # ~/.config/i3/scripts/music_player show_applet
-}
-
-case "$1" in
- rofi)
- rofi_open;;
- search)
- search_open;;
- drun)
- drun_open;;
- options)
- options_open;;
- launch)
- launch;;
-esac
diff --git a/.config/polybar/scripts/popup-calendar.sh b/.config/polybar/scripts/popup-calendar.sh
deleted file mode 100755
index 4e5303c..0000000
--- a/.config/polybar/scripts/popup-calendar.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/sh
-
-BAR_HEIGHT=22 # polybar height
-BORDER_SIZE=1 # border size from your wm settings
-YAD_WIDTH=222 # 222 is minimum possible value
-YAD_HEIGHT=193 # 193 is minimum possible value
-DATE="$(date +"%a %d %b, %H:%M")"
-
-case "$1" in
---popup)
- if [ "$(xdotool getwindowfocus getwindowname)" = "yad-calendar" ]; then
- exit 0
- fi
-
- eval "$(xdotool getmouselocation --shell)"
- eval "$(xdotool getdisplaygeometry --shell)"
-
- # X
- if [ "$((X + YAD_WIDTH / 2 + BORDER_SIZE))" -gt "$WIDTH" ]; then #Right side
- : $((pos_x = WIDTH - YAD_WIDTH - BORDER_SIZE))
- elif [ "$((X - YAD_WIDTH / 2 - BORDER_SIZE))" -lt 0 ]; then #Left side
- : $((pos_x = BORDER_SIZE))
- else #Center
- : $((pos_x = X - YAD_WIDTH / 2))
- fi
-
- # Y
- if [ "$Y" -gt "$((HEIGHT / 2))" ]; then #Bottom
- : $((pos_y = HEIGHT - YAD_HEIGHT - BAR_HEIGHT - BORDER_SIZE))
- else #Top
- : $((pos_y = BAR_HEIGHT + BORDER_SIZE))
- fi
-
- yad --calendar --undecorated --fixed --close-on-unfocus --no-buttons \
- --width="$YAD_WIDTH" --height="$YAD_HEIGHT" --posx="$pos_x" --posy="$pos_y" \
- --title="yad-calendar" --borders=0 >/dev/null &
- ;;
-*)
- echo "$DATE"
- ;;
-esac
diff --git a/.config/polybar/scripts/rofi-power.sh b/.config/polybar/scripts/rofi-power.sh
deleted file mode 100755
index 87ac92c..0000000
--- a/.config/polybar/scripts/rofi-power.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env sh
-#
-# A rofi powered menu to execute power related action.
-# Uses: amixer mpc poweroff reboot rofi rofi-prompt
-
-power_off=''
-reboot=''
-lock=''
-suspend='鈴'
-log_out=''
-
-chosen=$(printf '%s;%s;%s;%s;%s\n' "$power_off" "$reboot" "$lock" "$suspend" \
- "$log_out" \
- | rofi -theme '~/.config/rofi/themes/power.rasi' \
- -dmenu \
- -sep ';' \
- -selected-row 2)
-
-case "$chosen" in
- "$power_off")
- rofi-prompt --query 'Shutdown?' && poweroff
- ;;
-
- "$reboot")
- rofi-prompt --query 'Reboot?' && reboot
- ;;
-
- "$lock")
- # TODO Add your lockscreen command.
- ;;
-
- "$suspend")
- # Pause music and mute volume before suspending.
- mpc --quiet pause
- amixer set Master mute
- # TODO Add your suspend command.
- ;;
-
- "$log_out")
- # TODO Add your log out command.
- ;;
-
- *) exit 1 ;;
-esac
-
diff --git a/.config/polybar/scripts/scroll_spotify_status.sh b/.config/polybar/scripts/scroll_spotify_status.sh
deleted file mode 100755
index 74e0bfd..0000000
--- a/.config/polybar/scripts/scroll_spotify_status.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-# see man zscroll for documentation of the following parameters
-zscroll -l 20 \
- --delay 0.1 \
- --scroll-padding " " \
- --match-command "$HOME/.config/polybar/scripts/get_spotify_status.sh --status" \
- --match-text "Playing" "--scroll 1" \
- --match-text "Paused" "--scroll 0" \
- --update-check true "$HOME/.config/polybar/scripts/get_spotify_status.sh" &
-
-wait
diff --git a/.config/polybar/scripts/sysmenu.sh b/.config/polybar/scripts/sysmenu.sh
deleted file mode 100755
index a3a7a2a..0000000
--- a/.config/polybar/scripts/sysmenu.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/bash
-
-# Display a power menu to: shutdown, reboot,
-# lock, logout, and suspend. This script can be
-# executed by clicking on the polybar powermenu module
-# or with a keyboard shortcut
-
-# Options to be displayed
-shutdown=" Shutdown"
-reboot=" Reboot"
-lock=" Lock"
-logout=" Logout"
-suspend=" Suspend"
-
-uptime=$(uptime -p | sed -e 's/up //g')
-
-# Options passed into variable
-options="$shutdown\n$reboot\n$lock\n$logout\n$suspend"
-
-# Specify the path to the Rofi configuration file
-config_file="$HOME/.config/rofi/styles/powermenu.rasi"
-
-# Show Rofi with the specified configuration file
-chosen="$(echo -e "$options" | rofi -no-lazy-grab -sep -config "$config_file" -dmenu -p 'System ' "$uptime")"
-
-case $chosen in
- $shutdown)
- shutdown now
- ;;
- $reboot)
- systemctl reboot
- ;;
- $lock)
- betterlockscreen --lock dimblur
- ;;
- $logout)
- bspc quit
- ;;
- $suspend)
- systemctl suspend
- ;;
-esac
diff --git a/.config/polybar/scripts/sysmenu.shsave b/.config/polybar/scripts/sysmenu.shsave
deleted file mode 100755
index 00ce125..0000000
--- a/.config/polybar/scripts/sysmenu.shsave
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/bash
-
-# display a power menu to: shutdown, reboot,
-# lock, logout, and suspend. This script can be
-# executed by clicking on the polybar powermenu module
-# or with a keyboard shortcut
-
-
-# options to be displayed
-shutdown=" Shutdown"
-reboot=" Reboot"
-lock=" Lock"
-logout=" Logout"
-suspend=" Suspend"
-
-uptime=$(uptime -p | sed -e 's/up //g')
-
-# options passed into variable
-options="$shutdown\n$reboot\n$lock\n$logout\n$suspend"
-
-chosen="$(echo -e "$options" | rofi -no-lazy-grab -sep -lines 5 -hide-scrollbar true -border 0 -padding 0 -height 2px -width 15 -xoffset -10 -yoffset 28 -location 3 -columns 1 -dmenu -p 'System ' "$uptime")"
-
-case $chosen in
-$shutdown)
- systemctl poweroff
- ;;
-$reboot)
- systemctl reboot
- ;;
-$lock)
- betterlockscreen --lock dimblur
- ;;
-$logout)
- bspc quit
- ;;
-$suspend)
- systemctl suspend
- ;;
-esac
-
diff --git a/.config/polybar/scripts/system-usb-mount.sh b/.config/polybar/scripts/system-usb-mount.sh
deleted file mode 100755
index 63e9187..0000000
--- a/.config/polybar/scripts/system-usb-mount.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/sh
-
-devices=$(lsblk -Jplno NAME,TYPE,RM,SIZE,MOUNTPOINT,VENDOR)
-
-case "$1" in
- --mount)
- for mount in $(echo "$devices" | jq -r '.blockdevices[] | select(.type == "part") | select(.rm == true) | select(.mountpoint == null) | .name'); do
- udisksctl mount --no-user-interaction -b "$mount"
-
- mountpoint=$(udisksctl mount --no-user-interaction -b $mount)
- mountpoint=$(echo $mountpoint | cut -d " " -f 4- | tr -d ".")
- kitty -e "bash -lc 'pcmanfm $mountpoint'" &
- done
- ;;
- --unmount)
- for unmount in $(echo "$devices" | jq -r '.blockdevices[] | select(.type == "part") | select(.rm == true) | select(.mountpoint != null) | .name'); do
- udisksctl unmount --no-user-interaction -b "$unmount"
- udisksctl power-off --no-user-interaction -b "$unmount"
- done
- ;;
- *)
- output=""
- counter=0
-
- for unmounted in $(echo "$devices" | jq -r '.blockdevices[] | select(.type == "part") | select(.rm == true) | select(.mountpoint == null) | .name'); do
- unmounted=$(echo "$unmounted" | tr -d "[:digit:]")
- unmounted=$(echo "$devices" | jq -r '.blockdevices[] | select(.name == "'"$unmounted"'") | .vendor')
- unmounted=$(echo "$unmounted" | tr -d ' ')
-
- if [ $counter -eq 0 ]; then
- space=""
- else
- space=" "
- fi
- counter=$((counter + 1))
-
- output="$output$space#1 $unmounted"
- done
-
- for mounted in $(echo "$devices" | jq -r '.blockdevices[] | select(.type == "part") | select(.rm == true) | select(.mountpoint != null) | .size'); do
- if [ $counter -eq 0 ]; then
- space=""
- else
- space=" "
- fi
- counter=$((counter + 1))
-
- output="$output$space#2 $mounted"
- done
-
- echo "$output"
- ;;
-esac
diff --git a/.config/polybar/scripts/temperature.sh b/.config/polybar/scripts/temperature.sh
deleted file mode 100755
index 7ef6abb..0000000
--- a/.config/polybar/scripts/temperature.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/bash
-
-# Pulls CPU temps, averages them, and outputs them
-
-count=0
-sum=0.0
-
-# Iterate over each temperature reading
-for temp in "$(sensors | grep "^Core" | grep -e '+.*C' | cut -f 2 -d '+' | cut -f 1 -d ' ' | sed 's/°C//')"; do
- sum=$(echo "$sum + $temp" | bc)
- ((count++))
-done
-
-# Calculate the average
-avg=$(echo "scale=0; $sum / $count" | bc)
-
-# Output the average temperature without decimal points
-echo " ${avg%.*}°C"
diff --git a/.config/polybar/scripts/toggle_bluetooth.sh b/.config/polybar/scripts/toggle_bluetooth.sh
deleted file mode 100755
index 899d5ec..0000000
--- a/.config/polybar/scripts/toggle_bluetooth.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-if [ $(bluetoothctl show | grep "Powered: yes" | wc -c) -eq 0 ]
-then
- bluetoothctl power on
-else
- bluetoothctl power off
-fi
-
diff --git a/.config/polybar/scripts/vpn.sh b/.config/polybar/scripts/vpn.sh
deleted file mode 100755
index ab1eb9d..0000000
--- a/.config/polybar/scripts/vpn.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/sh
-
-# Set a default message
-default_message=" vpn"
-
-# Check if Protonvpn service is running
-if pgrep -x "openvpn" >/dev/null; then
- # If Protonvpn service is running, get the country
- country=$(protonvpn s | grep Country)
- # Extract the connection ID
- connection=$(pgrep -a openvpn$ | head -n 1 | awk '{print $NF }' | cut -d '.' -f 1)
- # Output vpn status with the country if connected
- echo " vpn" #"$country"
-else
- # If Protonvpn service is not running, output default message
- echo "$default_message"
-fi
-
-#
-#proton_status=$(protonvpn s)
-#current_status=$(protonvpn s | wc -l)
-#current_server=$(protonvpn s | awk '/Server:/ {print "VPN "$2}')
-#
-#if [ "$current_status" -gt 2 ]; then
-# echo "$current_server"
-#else
-# echo "%{F#bf616a}NO VPN"
-#fi
diff --git a/.config/powershell/Microsoft.PowerShell_profile.ps1 b/.config/powershell/Microsoft.PowerShell_profile.ps1
deleted file mode 100644
index 349f7ab..0000000
--- a/.config/powershell/Microsoft.PowerShell_profile.ps1
+++ /dev/null
@@ -1,14 +0,0 @@
-# Dotfiles special git command
-function global:config {
- git --git-dir="$env:USERPROFILE\.cfg" --work-tree="$env:USERPROFILE" $args
-}
-
-# Shows navigable menu of all options when hitting Tab
-Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete
-
-# Autocompletion for arrow keys
-Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward
-Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward
-
-New-Alias vi nvim.exe
-
diff --git a/.config/powershell/bloatware.ps1 b/.config/powershell/bloatware.ps1
deleted file mode 100644
index 2c8dacb..0000000
--- a/.config/powershell/bloatware.ps1
+++ /dev/null
@@ -1,335 +0,0 @@
-# bloatware.ps1
-
-# Check if the powershell-yaml module is installed, if not, install it
-if (-not (Get-Module powershell-yaml -ListAvailable)) {
- $policy = Get-PSRepository -Name 'PSGallery' | Select-Object -ExpandProperty InstallationPolicy
- Set-PSRepository -Name 'PSGallery' -InstallationPolicy Trusted
- Install-Module powershell-yaml
- Set-PSRepository -Name 'PSGallery' -InstallationPolicy $policy
-}
-
-Import-Module powershell-yaml
-
-# Define the path to the YAML file
-$yamlFilePath = "$HOME\packages.yml"
-
-# Parse the YAML file
-$packages = ConvertFrom-Yaml -Path $yamlFilePath
-$bloatware = $packages.bloatware
-$defaultApps = $packages.defaultApps
-
-# Check if Registry key exists
-function Check-RegistryKeyExists {
- param(
- [Parameter(Mandatory = $true)]
- [string]$KeyPath
- )
-
- if (Test-Path $KeyPath) {
- Write-Host "Registry key exists: $KeyPath"
- return $true
- } else {
- Write-Host "Registry key does not exist: $KeyPath"
- return $false
- }
-}
-
-# Helper functions ------------------------
-function force-mkdir($path) {
- if (!(Test-Path $path)) {
- Write-Host "-- Creating full path to: " $path -ForegroundColor White -BackgroundColor DarkGreen
- New-Item -ItemType Directory -Force -Path $path
- }
-}
-
-function Takeown-Registry($key) {
- # TODO does not work for all root keys yet
- switch ($key.split('\')[0]) {
- "HKEY_CLASSES_ROOT" {
- $reg = [Microsoft.Win32.Registry]::ClassesRoot
- $key = $key.substring(18)
- }
- "HKEY_CURRENT_USER" {
- $reg = [Microsoft.Win32.Registry]::CurrentUser
- $key = $key.substring(18)
- }
- "HKEY_LOCAL_MACHINE" {
- $reg = [Microsoft.Win32.Registry]::LocalMachine
- $key = $key.substring(19)
- }
- }
-
- # get administrator group
- $admins = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-32-544")
- $admins = $admins.Translate([System.Security.Principal.NTAccount])
-
- # set owner
- $key = $reg.OpenSubKey($key, "ReadWriteSubTree", "TakeOwnership")
- $acl = $key.GetAccessControl()
- $acl.SetOwner($admins)
- $key.SetAccessControl($acl)
-
- # set FullControl
- $acl = $key.GetAccessControl()
- $rule = New-Object System.Security.AccessControl.RegistryAccessRule($admins, "FullControl", "Allow")
- $acl.SetAccessRule($rule)
- $key.SetAccessControl($acl)
-}
-
-# Function to take ownership of registry keys
-function Takeown-Registry($keyPath) {
- $regKey = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey($keyPath, [Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree, [System.Security.AccessControl.RegistryRights]::TakeOwnership)
- $acl = $regKey.GetAccessControl()
- $acl.SetOwner([System.Security.Principal.NTAccount]"Administrators")
- $regKey.SetAccessControl($acl)
- $regKey.Close()
-}
-
-# Remove Features
-function Takeown-File($path) {
- takeown.exe /A /F $path
- $acl = Get-Acl $path
-
- # get administrator group
- $admins = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-32-544")
- $admins = $admins.Translate([System.Security.Principal.NTAccount])
-
- # add NT Authority\SYSTEM
- $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($admins, "FullControl", "None", "None", "Allow")
- $acl.AddAccessRule($rule)
-
- Set-Acl -Path $path -AclObject $acl
-}
-
-function Takeown-Folder($path) {
- Takeown-File $path
- foreach ($item in Get-ChildItem $path) {
- if (Test-Path $item -PathType Container) {
- Takeown-Folder $item.FullName
- }
- else {
- Takeown-File $item.FullName
- }
- }
-}
-
-function Elevate-Privileges {
- param($Privilege)
- $Definition = @"
- using System;
- using System.Runtime.InteropServices;
-
- public class AdjPriv {
- [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
- internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall, ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr rele);
-
- [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
- internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
-
- [DllImport("advapi32.dll", SetLastError = true)]
- internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);
-
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- internal struct TokPriv1Luid {
- public int Count;
- public long Luid;
- public int Attr;
- }
-
- internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
- internal const int TOKEN_QUERY = 0x00000008;
- internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
-
- public static bool EnablePrivilege(long processHandle, string privilege) {
- bool retVal;
- TokPriv1Luid tp;
- IntPtr hproc = new IntPtr(processHandle);
- IntPtr htok = IntPtr.Zero;
- retVal = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);
- tp.Count = 1;
- tp.Luid = 0;
- tp.Attr = SE_PRIVILEGE_ENABLED;
- retVal = LookupPrivilegeValue(null, privilege, ref tp.Luid);
- retVal = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);
- return retVal;
- }
- }
-"@
- $ProcessHandle = (Get-Process -id $pid).Handle
- $type = Add-Type $definition -PassThru
- $type[0]::EnablePrivilege($processHandle, $Privilege)
-}
-
-# Remove Features ------------------------
-foreach ($bloat in $bloatware) {
- Write-Output "Removing packages containing $bloat"
- $pkgs = Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages" | Where-Object Name -Like "*$bloat*"
-
- foreach ($pkg in $pkgs) {
- $pkgname = $pkg.Name.Split('\')[-1]
- Takeown-Registry $pkg.Name
- Takeown-Registry ($pkg.Name + "\Owners")
- Set-ItemProperty -Path ("HKLM:" + $pkg.Name.Substring(18)) -Name Visibility -Value 1
- New-ItemProperty -Path ("HKLM:" + $pkg.Name.Substring(18)) -Name DefVis -PropertyType DWord -Value 2
- Remove-Item -Path ("HKLM:" + $pkg.Name.Substring(18) + "\Owners")
- dism.exe /Online /Remove-Package /PackageName:$pkgname /NoRestart
- }
-}
-
-# Remove default apps and bloat
-Write-Output "Uninstalling default apps"
-foreach ($app in $defaultApps) {
- Write-Output "Trying to remove $app"
- Get-AppxPackage -Name $app -AllUsers | Remove-AppxPackage -AllUsers
- Get-AppXProvisionedPackage -Online | Where-Object DisplayName -EQ $app | Remove-AppxProvisionedPackage -Online
-}
-
-# Disable Microsoft Edge sidebar
-$RegistryPath = 'HKLM:\SOFTWARE\Policies\Microsoft\Edge'
-$Name = 'HubsSidebarEnabled'
-$Value = '00000000'
-# Create the key if it does not exist
-If (-NOT (Test-Path $RegistryPath)) {
- New-Item -Path $RegistryPath -Force | Out-Null
-}
-New-ItemProperty -Path $RegistryPath -Name $Name -Value $Value -PropertyType DWORD -Force
-
-# Disable Microsoft Edge first-run Welcome screen
-$RegistryPath = 'HKLM:\SOFTWARE\Policies\Microsoft\Edge'
-$Name = 'HideFirstRunExperience'
-$Value = '00000001'
-# Create the key if it does not exist
-If (-NOT (Test-Path $RegistryPath)) {
- New-Item -Path $RegistryPath -Force | Out-Null
-}
-New-ItemProperty -Path $RegistryPath -Name $Name -Value $Value -PropertyType DWORD -Force
-
-# Remove Microsoft Edge ------------------------
-$ErrorActionPreference = "Stop"
-$regView = [Microsoft.Win32.RegistryView]::Registry32
-$microsoft = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, $regView).
-OpenSubKey('SOFTWARE\Microsoft', $true)
-$edgeUWP = "$env:SystemRoot\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe"
-$uninstallRegKey = $microsoft.OpenSubKey('Windows\CurrentVersion\Uninstall\Microsoft Edge')
-$uninstallString = $uninstallRegKey.GetValue('UninstallString') + ' --force-uninstall'
-Write-Host "Removed Microsoft Edge"
-
-$edgeClient = $microsoft.OpenSubKey('EdgeUpdate\ClientState\{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}', $true)
-if ($null -ne $edgeClient.GetValue('experiment_control_labels')) {
- $edgeClient.DeleteValue('experiment_control_labels')
-}
-$microsoft.CreateSubKey('EdgeUpdateDev').SetValue('AllowUninstall', '')
-[void](New-Item $edgeUWP -ItemType Directory -ErrorVariable fail -ErrorAction SilentlyContinue)
-[void](New-Item "$edgeUWP\MicrosoftEdge.exe" -ErrorAction Continue)
-Start-Process cmd.exe "/c $uninstallString" -WindowStyle Hidden -Wait
-[void](Remove-Item "$edgeUWP\MicrosoftEdge.exe" -ErrorAction Continue)
-
-if (-not $fail) {
- [void](Remove-Item "$edgeUWP")
-}
-
-Write-Output "Edge should now be uninstalled!"
-
-# Kill OneDrive with fire ------------------------
-Write-Output "Kill OneDrive process"
-taskkill.exe /F /IM "OneDrive.exe"
-taskkill.exe /F /IM "explorer.exe"
-Write-Output "Remove OneDrive"
-if (Test-Path "$env:systemroot\System32\OneDriveSetup.exe") {
- & "$env:systemroot\System32\OneDriveSetup.exe" /uninstall
-}
-if (Test-Path "$env:systemroot\SysWOW64\OneDriveSetup.exe") {
- & "$env:systemroot\SysWOW64\OneDriveSetup.exe" /uninstall
-}
-
-Write-Output "Removing OneDrive leftovers"
-Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "$env:localappdata\Microsoft\OneDrive"
-Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "$env:programdata\Microsoft OneDrive"
-Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "$env:systemdrive\OneDriveTemp"
-# check if directory is empty before removing:
-If ((Get-ChildItem "$env:userprofile\OneDrive" -Recurse | Measure-Object).Count -eq 0) {
- Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "$env:userprofile\OneDrive"
-}
-
-Write-Output "Disable OneDrive via Group Policies"
-force-mkdir "HKLM:\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\OneDrive"
-Set-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\OneDrive" "DisableFileSyncNGSC" 1
-
-Write-Output "Remove Onedrive from explorer sidebar"
-New-PSDrive -PSProvider "Registry" -Root "HKEY_CLASSES_ROOT" -Name "HKCR"
-force-mkdir "HKCR:\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}"
-Set-ItemProperty "HKCR:\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}" "System.IsPinnedToNameSpaceTree" 0
-force-mkdir "HKCR:\Wow6432Node\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}"
-Set-ItemProperty "HKCR:\Wow6432Node\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}" "System.IsPinnedToNameSpaceTree" 0
-Remove-PSDrive "HKCR"
-
-# Thank you Matthew Israelsson
-Write-Output "Removing run hook for new users"
-reg load "hku\Default" "C:\Users\Default\NTUSER.DAT"
-reg delete "HKEY_USERS\Default\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "OneDriveSetup" /f
-reg unload "hku\Default"
-
-Write-Output "Removing startmenu entry"
-Remove-Item -Force -ErrorAction SilentlyContinue "$env:userprofile\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk"
-
-Write-Output "Removing scheduled task"
-$scheduledTasks = Get-ScheduledTask -TaskPath '\' -TaskName 'OneDrive*' -ErrorAction SilentlyContinue
-if ($scheduledTasks) {
- try {
- $scheduledTasks | Unregister-ScheduledTask -Confirm:$false
- Write-Output "OneDrive scheduled tasks removed."
- } catch {
- Write-Warning "Failed to unregister scheduled tasks: $_"
- }
-} else {
- Write-Output "No OneDrive scheduled tasks found."
-}
-
-Write-Output "Restarting explorer"
-Start-Process "explorer.exe"
-
-Write-Output "Waiting for explorer to complete loading"
-Start-Sleep 10
-
-Write-Output "Removing additional OneDrive leftovers"
-foreach ($item in (Get-ChildItem "$env:WinDir\WinSxS\*onedrive*")) {
- Takeown-Folder $item.FullName
- try {
- Remove-Item -Recurse -Force -ErrorAction Continue -ErrorVariable RemoveError $item.FullName
- if ($RemoveError) {
- Write-Warning "Failed to remove $($item.FullName): $($RemoveError.Exception.Message)"
- } else {
- Write-Output "Successfully removed: $($item.FullName)"
- }
- } catch {
- Write-Warning "Failed to remove $($item.FullName): $_"
- }
-}
-
-# As a last step, disable UAC ------------------------
-New-ItemProperty -Path HKLM:Software\Microsoft\Windows\CurrentVersion\policies\system -Name EnableLUA -PropertyType DWord -Value 0 -Force
-
-# Remove OneDrive directory if it exists
-Write-Host "Removing OneDrive directory"
-
-# Change directory to user's home directory
-Set-Location $HOME
-
-# Check if OneDrive directory exists
-$OneDrivePath = Join-Path $HOME "OneDrive"
-if (Test-Path -Path $OneDrivePath -PathType Container) {
- # Remove OneDrive directory recursively and forcefully
- Remove-Item -Path $OneDrivePath -Recurse -Force -ErrorAction Continue
- if ($?) {
- Write-Output "OneDrive directory removed successfully."
- } else {
- Write-Warning "Failed to remove OneDrive directory."
- }
-} else {
- Write-Output "OneDrive directory not found."
-}
-
-# Prevents "Suggested Applications" returning
-if (Check-RegistryKeyExists -KeyPath "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Cloud Content") {
- Set-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Cloud Content" "DisableWindowsConsumerFeatures" 1
-}
diff --git a/.config/powershell/bootstrap.ps1 b/.config/powershell/bootstrap.ps1
deleted file mode 100644
index 73d53b5..0000000
--- a/.config/powershell/bootstrap.ps1
+++ /dev/null
@@ -1,396 +0,0 @@
-# Requires -RunAsAdministrator
-
-# Set execution policy to remote signed
-Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
-
-# Set network category to private
-Set-NetConnectionProfile -NetworkCategory Private
-
-# Variables
-$dotfiles_url = 'https://github.com/srdusr/dotfiles.git'
-$dotfiles_dir = "$HOME\.cfg"
-
-# Function to handle errors
-function handle_error {
- param ($message)
- Write-Host $message -ForegroundColor Red
- exit 1
-}
-
-# Logs
-New-Item -Path $Env:USERPROFILE\Logs -ItemType directory -Force
-Start-Transcript -Path $Env:USERPROFILE\Logs\Bootstrap.log
-$ErrorActionPreference = 'SilentlyContinue'
-Write-Host "Bootstrap.log generated in Logs\"
-
-# Function to check if the current session is elevated
-function Test-IsAdmin {
- $currentUser = [Security.Principal.WindowsIdentity]::GetCurrent()
- $principal = New-Object Security.Principal.WindowsPrincipal($currentUser)
- return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
-}
-
-# Ensure the script is run as administrator
-if (-not (Test-IsAdmin)) {
- handle_error "This script must be run as an administrator."
-}
-
-# Imports
-. $HOME\.config\powershell\initialize.ps1
-. $HOME\.config\powershell\bloatware.ps1
-
-# Configure PowerShell
-Write-Host "Configuring PowerShell"
-Write-Host "----------------------------------------"
-
-# Get the "MyDocuments" path for the current user, excluding OneDrive
-$UserMyDocumentsPath = [System.Environment]::GetFolderPath('MyDocuments').Replace("OneDrive", "")
-
-$PowerShellProfileDirectory = "$UserMyDocumentsPath\PowerShell"
-$PowerShellLegacySymlink = "$UserMyDocumentsPath\WindowsPowerShell"
-
-$PowerShellProfileTemplate = "$PSScriptRoot\$USERNAME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1"
-$env:PSModulePath = $env:PSModulePath -replace "\\OneDrive\\Documents\\WindowsPowerShell\\","\.powershell\"
-
-# Set documents path to user's local Documents folder
-$documentsPath = "$UserMyDocumentsPath"
-$powerShellProfileDir = "$documentsPath\PowerShell"
-
-# Output the chosen PowerShell profile directory
-$PROFILE = "$powerShellProfileDir\Microsoft.PowerShell_profile.ps1"
-Write-Host "PowerShell profile directory set to: $powerShellProfileDir"
-
-if (-not (Test-Path -Path $powerShellProfileDir)) {
- New-Item -ItemType Directory -Path $powerShellProfileDir -Force
-}
-
-New-Item -ItemType HardLink -Force `
- -Path "$powerShellProfileDir\Microsoft.PowerShell_profile.ps1" `
- -Target "$home\.config\powershell\Microsoft.PowerShell_profile.ps1"
-
-# Set environment variable
-[System.Environment]::SetEnvironmentVariable('PowerShellProfileDir', $powerShellProfileDir, [System.EnvironmentVariableTarget]::User)
-
-Write-Host "PowerShell profile directory set to: $powerShellProfileDir"
-Write-Host "Environment variable 'PowerShellProfileDir' set to: $powerShellProfileDir"
-
-# Verify profile sourcing
-if (!(Test-Path -Path "$home\.config\powershell\Microsoft.PowerShell_profile.ps1")) {
- handle_error "PowerShell profile does not exist. Please create it at $home\.config\powershell\Microsoft.PowerShell_profile.ps1"
-}
-
-# Install Chocolatey if not installed
-Write-Host "Installing Chocolatey"
-Write-Host "----------------------------------------"
-
-if (-not (Get-Command choco -ErrorAction SilentlyContinue)) {
- [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
- Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
-
- # Check if Chocolatey installed successfully
- if (-not (Get-Command choco -ErrorAction SilentlyContinue)) {
- handle_error "Chocolatey installation failed."
- }
-} else {
- Write-Host "Chocolatey is already installed."
-}
-
-# Install Applications
-Write-Host "Installing Applications"
-Write-Host "----------------------------------------"
-
-# Check if the powershell-yaml module is installed, if not, install it
-if (-not (Get-Module powershell-yaml -ListAvailable)) {
- $policy = Get-PSRepository -Name 'PSGallery' | Select-Object -ExpandProperty InstallationPolicy
- Set-PSRepository -Name 'PSGallery' -InstallationPolicy Trusted
- Install-Module powershell-yaml
- Set-PSRepository -Name 'PSGallery' -InstallationPolicy $policy
-}
-
-Import-Module powershell-yaml
-
-# Load packages.yml
-$packagesFile = "$HOME\packages.yml"
-$packages = Get-Content $packagesFile | ConvertFrom-Yaml
-
-# Ensure 'windows' section exists and has applications listed
-if ($packages.windows) {
- foreach ($app in $packages.windows) {
- # Check if the application is already installed
- if (-not (choco list --local-only | Select-String -Pattern "^$app\s")) {
- Write-Host "Installing $app"
- choco install $app -y
-
- if ($LASTEXITCODE -ne 0) {
- handle_error "Installation of $app failed."
- } else {
- Write-Host "$app installed successfully."
- }
- } else {
- Write-Host "$app is already installed."
- }
- }
-} else {
- Write-Host "No applications specified under the 'windows' section in $packagesFile."
-}
-
-# Set Chrome as default browser ------------------------
-#Add-Type -AssemblyName 'System.Windows.Forms'
-#Start-Process $env:windir\system32\control.exe -ArgumentList '/name Microsoft.DefaultPrograms /page pageDefaultProgram\pageAdvancedSettings?pszAppName=google%20chrome'
-#Sleep 2
-#[System.Windows.Forms.SendKeys]::SendWait("{TAB} {TAB}{TAB} ")
-SetDefaultBrowser firefox
-
-# Refresh the environment variables
-Write-Host "Refreshing environment variables"
-
-# Update the current session environment variables
-Write-Host "Setting environment variables" -ForegroundColor Cyan
-$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
-[System.Environment]::SetEnvironmentVariable("Path", $env:Path, [System.EnvironmentVariableTarget]::Process)
-[Environment]::SetEnvironmentVariable("HOME", "$env:USERPROFILE", "User")
-[Environment]::SetEnvironmentVariable("LC_ALL", "C.UTF-8", "User")
-refreshenv
-
-# Add Git to PATH if it's installed via Chocolatey
-Write-Host "Checking for Git installation"
-$gitBinPath = "C:\Program Files\Git\bin"
-$gitCmdPath = "C:\Program Files\Git\cmd"
-$gitPaths = @($gitBinPath, $gitCmdPath)
-
-foreach ($path in $gitPaths) {
- if (Test-Path $path) {
- Write-Host "Adding $path to PATH"
- [System.Environment]::SetEnvironmentVariable("Path", "$env:Path;$path", [System.EnvironmentVariableTarget]::Machine)
- [System.Environment]::SetEnvironmentVariable("Path", "$env:Path;$path", [System.EnvironmentVariableTarget]::User)
- [System.Environment]::SetEnvironmentVariable("Path", "$env:Path;$path", [System.EnvironmentVariableTarget]::Process)
- } else {
- Write-Host "$path does not exist."
- }
-}
-
-# Check if Git is installed
-Write-Host "Checking for Git installation"
-if (-not (Get-Command git -ErrorAction SilentlyContinue)) {
- handle_error "Git is not installed or not found in PATH after installation."
-} else {
- Write-Host "Git is installed and available in PATH."
-}
-
-# Define the `config` alias in the current session
-function global:config {
- git --git-dir="$env:USERPROFILE\.cfg" --work-tree="$env:USERPROFILE" $args
-}
-
-# Add .gitignore entries
-Add-Content -Path "$HOME\.gitignore" -Value ".cfg"
-Add-Content -Path "$HOME\.gitignore" -Value "install.bat"
-Add-Content -Path "$HOME\.gitignore" -Value ".config/powershell/bootstrap.ps1"
-
-# Create symbolic links
-Write-Host "Create symbolic links"
-Write-Host "----------------------------------------"
-
-# Visual Studio Code settings.json
-New-Item -Force -ItemType SymbolicLink $HOME\AppData\Roaming\Code\User\ -Name settings.json -Value $HOME\.config\Code\User\settings.json
-
-# Visual Studio Code keybindings
-New-Item -Force -ItemType SymbolicLink $HOME\AppData\Roaming\Code\User\ -Name keybindings.json -Value $HOME\.config\Code\User\keybindings.json
-
-# Function to install dotfiles
-function install_dotfiles {
- if (Test-Path -Path $dotfiles_dir) {
- config pull | Out-Null
- $update = $true
- } else {
- git clone --bare $dotfiles_url $dotfiles_dir | Out-Null
- $update = $false
- }
-
- $std_err_output = config checkout 2>&1
-
- if ($std_err_output -match "following untracked working tree files would be overwritten") {
- if (-not $update) {
- config checkout | Out-Null
- }
- }
- config config status.showUntrackedFiles no
-
- git config --global include.path "$HOME\.gitconfig.aliases"
-
- if ($update -or (Read-Host "Do you want to overwrite existing files and continue with the dotfiles setup? [Y/n]" -eq "Y")) {
- config fetch origin main:main | Out-Null
- config reset --hard main | Out-Null
- config checkout -f
- if ($?) {
- Write-Host "Successfully imported $dotfiles_dir."
- } else {
- handle_error "Mission failed."
- }
- } else {
- handle_error "Aborted by user. Exiting..."
- }
-}
-
-install_dotfiles
-
-# Install python
-Write-Host "Updating python packages" -ForegroundColor Cyan
-python -m pip install --upgrade pip
-
-# Enable WSL feature
-dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
-Write-Host "Enable WSL feature"
-wsl --install -d ubuntu
-wsl --set-default-version 2
-
-# Enable Virtual Machine feature
-#dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
-#Write-Host "Enable Virtual Machine feature"
-
-Write-Header "Installing Hyper-V"
-
-# Install Hyper-V
-Write-Host "Installing Hyper-V and restart"
-Enable-WindowsOptionalFeature -Online -FeatureName Containers -All -NoRestart
-Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -NoRestart
-Install-WindowsFeature -Name Hyper-V -IncludeAllSubFeature -IncludeManagementTools -NoRestart
-
-# Configure Neovim
-Write-Host "Configuring Neovim"
-Write-Host "----------------------------------------"
-
-$neovimLocalPath = "$home\AppData\Local\nvim"
-$neovimConfigPath = "$home\.config\nvim"
-
-# Check if nvim directory already exists in AppData\Local
-if (-not (Test-Path -Path $neovimLocalPath)) {
- New-Item -ItemType Junction -Force -Path $neovimLocalPath -Target $neovimConfigPath
-} else {
- Write-Host "Neovim directory ($neovimLocalPath) already exists."
-}
-
-# Install Windows Terminal, and configure
-Write-Host "Install Windows Terminal, and configure"
-Write-Host "----------------------------------------"
-
-$windowsTerminalSettingsPath = "$home\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json"
-$windowsTerminalConfigPath = "$home\.config\windows-terminal\settings.json"
-
-# Check if Windows Terminal settings.json already exists
-if (Test-Path -Path $windowsTerminalSettingsPath) {
- # Backup existing settings.json
- Move-Item -Force $windowsTerminalSettingsPath "$windowsTerminalSettingsPath.old"
-} else {
- Write-Host "Windows Terminal settings.json not found, no need to backup."
-}
-
-# Create a hard link to the settings.json file in .config\windows-terminal
-New-Item -ItemType HardLink -Force -Path $windowsTerminalSettingsPath -Target $windowsTerminalConfigPath
-
-# Function to check if a registry key exists
-function Test-RegistryKeyExists {
- param ($path)
- return (Test-Path $path -PathType Container)
-}
-
-# Function to check if a registry property exists
-function Test-RegistryPropertyExists {
- param ($keyPath, $propertyName)
- if (Test-Path $keyPath) {
- $properties = Get-ItemProperty -Path $keyPath
- return $properties.PSObject.Properties.Name -contains $propertyName
- }
- return $false
-}
-
-# Registry Tweaks
-Write-Host "Registry Tweaks"
-Write-Host "----------------------------------------"
-
-# Show hidden files
-$advancedKeyPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
-if (-not (Test-RegistryPropertyExists $advancedKeyPath "Hidden")) {
- Set-ItemProperty -Path $advancedKeyPath -Name Hidden -Value 1
-}
-
-# Show file extensions in Windows Explorer
-$hideFileExtPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
-if (-not (Test-RegistryPropertyExists $hideFileExtPath "HideFileExt")) {
- Set-ItemProperty -Path $hideFileExtPath -Name HideFileExt -Value 0
-}
-
-# Never Combine taskbar buttons when the taskbar is full
-$taskbarGlomLevelPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
-if (-not (Test-RegistryPropertyExists $taskbarGlomLevelPath "TaskbarGlomLevel")) {
- Set-ItemProperty -Path $taskbarGlomLevelPath -Name TaskbarGlomLevel -Value 2
-}
-
-# Taskbar small icons
-$taskbarSmallIconsPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
-if (-not (Test-RegistryPropertyExists $taskbarSmallIconsPath "TaskbarSmallIcons")) {
- Set-ItemProperty -Path $taskbarSmallIconsPath -Name TaskbarSmallIcons -Value 1
-}
-
-# Set Windows to use UTC time instead of local time for system clock
-$timeZoneInfoPath = "HKLM:\SYSTEM\CurrentControlSet\Control\TimeZoneInformation"
-if (-not (Test-RegistryPropertyExists $timeZoneInfoPath "RealTimeIsUniversal")) {
- Set-ItemProperty -Path $timeZoneInfoPath -Name RealTimeIsUniversal -Value 1
-}
-
-# Disable the search in taskbar
-$searchBoxTaskbarPath = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search"
-if (-not (Test-RegistryPropertyExists $searchBoxTaskbarPath "SearchBoxTaskbarMode")) {
- New-ItemProperty -Path $searchBoxTaskbarPath -Name SearchBoxTaskbarMode -Value 0 -Type DWord -Force
-}
-
-# Dark mode:
-$personalizePath = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize"
-if (-not (Test-RegistryPropertyExists $personalizePath "AppsUseLightTheme")) {
- Set-ItemProperty -Path $personalizePath -Name AppsUseLightTheme -Value 0 -Type Dword -Force
-}
-if (-not (Test-RegistryPropertyExists $personalizePath "SystemUsesLightTheme")) {
- Set-ItemProperty -Path $personalizePath -Name SystemUsesLightTheme -Value 0 -Type Dword -Force
-}
-
-# Restart explorer so the rest of the settings take effect:
-Stop-Process -f -ProcessName explorer
-Start-Process explorer.exe
-
-# Function to disable the Windows key
-function Disable-WindowsKey {
- $regPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Keyboard Layout"
- $regName = "Scancode Map"
-
- # Binary data to remap the Windows key to F24 (an unused key)
- $binaryValue = [byte[]](
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00,
- 0x3A, 0x00, 0x5B, 0xE0,
- 0x00, 0x00, 0x00, 0x00
- )
-
- # Create the registry key if it doesn't exist
- if (-not (Test-RegistryKeyExists $regPath)) {
- New-Item -Path $regPath -Force | Out-Null
- }
-
- # Set the Scancode Map value if it doesn't exist
- if (-not (Test-RegistryPropertyExists $regPath $regName)) {
- Set-ItemProperty -Path $regPath -Name $regName -Value $binaryValue
- }
-
- Write-Output "Windows key has been disabled from opening the start menu. Please restart your computer for the changes to take effect."
-}
-
-#Disable-WindowsKey
-
-Write-Host "Bootstrap script completed."
-Write-Host "Please Restart."
-
-# Clean up Bootstrap.log
-Write-Host "Clean up Bootstrap.log"
-Stop-Transcript
-$logSuppress = Get-Content $Env:USERPROFILE\Logs\Bootstrap.log | Where-Object { $_ -notmatch "Host Application: powershell.exe" }
-$logSuppress | Set-Content $Env:USERPROFILE\Logs\Bootstrap.log -Force
diff --git a/.config/powershell/initialize.ps1 b/.config/powershell/initialize.ps1
deleted file mode 100644
index a616998..0000000
--- a/.config/powershell/initialize.ps1
+++ /dev/null
@@ -1,227 +0,0 @@
-<#
- .SYNOPSIS
- Bootstrap Windows command prompts (cmd, PS, PSCore) with my dotfiles and apps.
-
- .DESCRIPTION
- To bootstrap directly from GitHub, run these 2 cmdlets in a PowerShell prompt:
- > Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
- > irm 'https://raw.githubusercontent.com/srdusr/dotfiles/main/bootstrap.ps1' | iex
-#>
-[CmdletBinding()]
-param (
- [ValidateSet('clone', 'setup', 'apps', 'env', IgnoreCase = $true)]
- [Parameter(Position = 0)] [string]
- $verb = 'clone',
- [Parameter()] [string]
- $userName = $null,
- [Parameter()] [string]
- $email = $null,
- [Parameter()] [switch]
- $runAsAdmin = $false
-)
-
-$ErrorActionPreference = 'Stop'
-
-$originGitHub = 'https://github.com/srdusr/dotfiles.git'
-$dotPath = (Join-Path $env:USERPROFILE '.cfg')
-
-# Ensure Tls12
-[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12
-
-function ensureLocalGit {
- if (Get-Command 'git' -ErrorAction SilentlyContinue) {
- return
- }
-
- $localGitFolder = (Join-Path $env:USERPROFILE (Join-Path "Downloads" "localGit"))
- Write-Host "Installing ad-hoc git into $localGitFolder..."
-
- $gitUrl = Invoke-RestMethod 'https://api.github.com/repos/git-for-windows/git/releases/latest' |
- Select-Object -ExpandProperty 'assets' |
- Where-Object { $_.name -Match 'MinGit' -and $_.name -Match '64-bit' -and $_.name -notmatch 'busybox' } |
- Select-Object -ExpandProperty 'browser_download_url'
- $localGitZip = (Join-Path $localGitFolder "MinGit.zip")
- New-Item -ItemType Directory -Path $localGitFolder -Force | Out-Null
- (New-Object Net.WebClient).DownloadFile($gitUrl, $localGitZip)
- Expand-Archive -Path $localGitZip -DestinationPath $localGitFolder -Force
-
- $gitPath = (Join-Path $localGitFolder 'cmd')
- $env:Path += ";$gitPath"
-}
-
-function cloneDotfiles {
- Write-Host "Cloning $originGitHub -> $dotPath"
- Write-Host -NoNewline "OK to proceed with setup? [Y/n] "
- $answer = (Read-Host).ToUpper()
- if ($answer -ne 'Y' -and $answer -ne '') {
- Write-Warning "Aborting."
- return 4
- }
-
- ensureLocalGit
-
- if (-not $userName -or $userName -eq '') {
- $userName = (& git config --global --get user.name)
- }
- if (-not $userName -or $userName -eq '') {
- $userName = "$env:USERNAME@$env:COMPUTERNAME"
- }
-
- if (-not $email -or $email -eq '') {
- $email = (& git config --global --get user.email)
- }
- if (-not $email -or $email -eq '') {
- $email = Read-Host "Enter your email address for git commits"
- if ($email -eq '') {
- Write-Warning "Need email address, aborting."
- return 3
- }
- }
-
- & git.exe config --global user.name $userName
- & git.exe config --global user.email $email
-
-
- function global:config {
- git --git-dir="$dotPath" --work-tree="$env:USERPROFILE" $args
- }
-
- Add-Content -Path "$env:USERPROFILE\.gitignore" -Value ".cfg"
-
- if (Test-Path -Path $dotfiles_dir) {
- config pull | Out-Null
- $update = $true
- } else {
- git clone --bare $originGitHub $dotPath | Out-Null
- $update = $false
- }
-
- $std_err_output = config checkout 1>&1
-
- if ($std_err_output -match "following untracked working tree files would be overwritten") {
- if (-not $update) {
- config checkout | Out-Null
- }
- }
- config config --local status.showUntrackedFiles no
-
- if ($update -or (Read-Host "Do you want to overwrite existing files and continue with the dotfiles setup? [Y/n]" -eq "Y")) {
- config fetch origin main:main | Out-Null
- config reset --hard main | Out-Null
- config checkout -f
- if ($?) {
- Write-Host "Successfully imported $dotPath."
- } else {
- handle_error "Mission failed."
- }
- } else {
- handle_error "Aborted by user. Exiting..."
- }
-
- return 0
-}
-
-function setup {
- ensureLocalGit
-}
-
-function installApps {
- ensureLocalGit
-}
-
-function writeGitConfig {
- param (
- [Parameter(Mandatory = $true)] [string] $configIniFile
- )
-
- if ((Test-Path (Join-Path $env:USERPROFILE '.gitconfig')) -and -not (Test-Path (Join-Path $env:USERPROFILE '.gitconfig.bak'))) {
- $userName = (& git config --global --get user.name)
- $email = (& git config --global --get user.email)
-
- Move-Item -Path (Join-Path $env:USERPROFILE '.gitconfig') -Destination (Join-Path $env:USERPROFILE '.gitconfig.bak')
-
- if ($userName -and $userName -ne '') {
- & git.exe config --global user.name $userName
- }
- if ($email -and $email -ne '') {
- & git.exe config --global user.email $email
- }
- }
-
- Get-Content $configIniFile | ForEach-Object {
- if ($_.TrimStart().StartsWith('#')) { return }
- $key, $value = $_.Split('=', 2)
- Write-Verbose "git config --global $key $value"
- & git.exe config --global $key "$value"
- }
-}
-
-function setupShellEnvs {
- Write-Host "Setting cmd console properties:"
- $consolePath = 'HKCU\Console'
- & reg add $consolePath /v QuickEdit /d 0x1 /t REG_DWORD /f | Out-Null
- & reg add $consolePath /v WindowSize /d 0x00320078 /t REG_DWORD /f | Out-Null
- & reg add $consolePath /v ScreenBufferSize /d 0x23280078 /t REG_DWORD /f | Out-Null
- & reg add $consolePath /v FontFamily /d 0x36 /t REG_DWORD /f | Out-Null
- & reg add $consolePath /v HistoryBufferSize /d 0x64 /t REG_DWORD /f | Out-Null
- & reg add $consolePath /v FaceName /d "Hack Nerd Font Mono" /t REG_SZ /f | Out-Null
- & reg add $consolePath /v FontSize /d 0x00100000 /t REG_DWORD /f | Out-Null
-
- $win32rc = (Join-Path $PSScriptRoot (Join-Path 'win' 'win32-rc.cmd'))
- Write-Host "Setting up cmd autorun: $win32rc"
- & reg add "HKCU\Software\Microsoft\Command Processor" /v AutoRun /t REG_SZ /d $win32rc /f | Out-Null
-
- Write-Host "Configuring user home dir..."
- $configDir = (Join-Path $env:USERPROFILE '.config')
- New-Item -ItemType Directory -Path $configDir -ErrorAction SilentlyContinue | Out-Null
-
- $sshDir = (Join-Path $env:USERPROFILE '.ssh')
- Remove-Item (Join-Path $sshDir 'config') -ErrorAction SilentlyContinue -Force | Out-Null
- $openSsh = ((Join-Path $env:windir 'System32\OpenSSH\ssh.exe').Replace("\", "/"))
- & git config --global core.sshCommand $openSsh
-}
-
-function main {
- param (
- [Parameter(Mandatory = $true)] [string] $verbAction
- )
-
- Write-Verbose "PS: $($PSVersionTable.PSVersion)-$($PSVersionTable.PSEdition)"
- switch ($verbAction) {
- 'clone' {
- Write-Host
- if (Test-Path (Join-Path $dotPath '.git')) {
- Write-Host "Local git repo already exists, skipping."
- main setup
- return
- }
-
- $rc = cloneDotfiles
- if ($rc -ne 0) {
- Write-Error "Cloning dotfiles failed, aborting."
- return
- }
-
- $script = (Join-Path $dotPath '.config\powershell\bootstrap.ps1')
- Write-Host "Continue $script in child process"
- Start-Process -PassThru -NoNewWindow -FilePath "powershell.exe" -ArgumentList "-NoProfile -File $script setup" | Wait-Process
- }
-
- 'setup' {
- Write-Host "Setting up..."
- setup
- installApps
- setupShellEnvs
- Write-Host "Done (setup)."
- exit
- }
-
- 'apps' { installApps }
-
- 'env' { setupShellEnvs }
- }
-
- Write-Host "Done."
-}
-
-main $verb
diff --git a/.config/pypoetry/config.toml b/.config/pypoetry/config.toml
deleted file mode 100644
index 53b35d3..0000000
--- a/.config/pypoetry/config.toml
+++ /dev/null
@@ -1,3 +0,0 @@
-[virtualenvs]
-create = true
-in-project = true
diff --git a/.config/rofi/Notif.rasi b/.config/rofi/Notif.rasi
deleted file mode 100644
index 47bc1af..0000000
--- a/.config/rofi/Notif.rasi
+++ /dev/null
@@ -1,153 +0,0 @@
-configuration {
- display-drun: " Apps";
- display-window: "缾 Windows";
- show-icons:true;
- font: "Fira Code 10";
-}
-
-* {
- background-color: #fffff7;
- bg: #fffff7;
- text-color: #927f70;
- selbg: #927f70;
- actbg: #eee8da;
- urgbg: #eee8da;
- winbg: #eee8da;
-
- selected-normal-foreground: @text-color;
- normal-foreground: @text-color;
- selected-normal-background: @actbg;
- normal-background: @background-color;
-
- selected-urgent-foreground: @urgbg;
- urgent-foreground: @text-color;
- selected-urgent-background: @actbg;
- urgent-background: @background-color;
- urgent-foreground: @urgbg;
-
- selected-active-foreground: @selbg;
- active-foreground: @selbg;
- selected-active-background: @actbg;
- active-background: @background-color;
-
- line-margin: 2;
- line-padding: 2;
- separator-style: "none";
- hide-scrollbar: "true";
- margin: 0;
- padding: 5;
-}
-
-window {
- location: northeast;
- anchor: northeast;
- //height: 40%;
- y-offset: 60px;
- x-offset: -20px;
- width: 16%;
- orientation: horizontal;
- children: [mainbox];
- border: 2px solid;
- border-radius: 10px;
- border-color: #eee8da;
-}
-
-mainbox {
- spacing: 0.8em;
- orientation: vertical;
- children: [ inputbar, listview ];
-}
-
-button { padding: 2px 2px; }
-
-button selected {
- background-color: @active-background;
- text-color: @background-color;
-}
-
-inputbar {
- padding: 2px;
- spacing: 5px;
-}
-
-listview {
- spacing: 0.5em;
- dynamic: true;
- cycle: false;
-}
-
-element {
- padding: 10px;
-}
-
-prompt {
- padding: 10px 0px 0px 20px;
- font: "Fira Code 10";
-}
-
-entry {
- expand: true;
- text-color: @normal-foreground;
- vertical-align: 0;
- padding: 5px 0px 0px 20px;
- enabled: false;
-}
-
-element normal.normal {
- background-color: @bg;
- border-radius: 8px;
- text-color: @normal-foreground;
-}
-
-element normal.urgent {
- background-color: @bg;
- border-radius: 8px;
- text-color: @urgent-foreground;
-}
-
-element normal.active {
- background-color: @bg;
- border-radius: 8px;
- text-color: @active-foreground;
-}
-
-element selected.normal {
- background-color: @selected-normal-background;
- text-color: @selected-normal-foreground;
-}
-
-element selected.urgent {
- background-color: @selected-urgent-background;
- text-color: @selected-urgent-foreground;
-}
-
-element selected.active {
- background-color: @selected-active-background;
- text-color: @selected-active-foreground;
-}
-
-element alternate.normal {
- background-color: @bg;
- border-radius: 8px;
- text-color: @normal-foreground;
-}
-
-element alternate.urgent {
- background-color: @bg;
- border-radius: 8px;
- text-color: @urgent-foreground;
-}
-
-element alternate.active {
- background-color: @bg;
- border-radius: 8px;
- text-color: @active-foreground;
-}
-element-icon {
- size: 7ch;
-}
-element.selected {
- border-radius: 8px;
- border: 0 0 0 5px solid;
- border-color: @winbg;
-}
diff --git a/.config/rofi/colors/gruvbox.rasi b/.config/rofi/colors/gruvbox.rasi
deleted file mode 100644
index f5c9169..0000000
--- a/.config/rofi/colors/gruvbox.rasi
+++ /dev/null
@@ -1,10 +0,0 @@
-/* colors */
-
-* {
- al: #00000000;
- bg: #32302f;
- pg: #7c6f64;
- se: #101010ff;
- fg: #FFFFFFff;
- ac: #fe8019;
-}
diff --git a/.config/rofi/colors/nord.rasi b/.config/rofi/colors/nord.rasi
deleted file mode 100644
index 2e72da1..0000000
--- a/.config/rofi/colors/nord.rasi
+++ /dev/null
@@ -1,10 +0,0 @@
-/* colors */
-
-* {
- al: #00000000;
- bg: #2e3440;
- pg: #4c566a;
- se: #101010ff;
- fg: #FFFFFFff;
- ac: #88c0d0;
-}
diff --git a/.config/rofi/colors/simple.rasi b/.config/rofi/colors/simple.rasi
deleted file mode 100644
index 31f260e..0000000
--- a/.config/rofi/colors/simple.rasi
+++ /dev/null
@@ -1,10 +0,0 @@
-/* colors */
-
-* {
- al: #00000000;
- bg: #2c2f31;
- pg: #666666;
- se: #6cb6eb;
- fg: #FFFFFFff;
- ac: #3b4041;
-}
diff --git a/.config/rofi/config.rasi b/.config/rofi/config.rasi
deleted file mode 100644
index dfe7afd..0000000
--- a/.config/rofi/config.rasi
+++ /dev/null
@@ -1,178 +0,0 @@
-configuration {
- bw: 0;
- columns: 1;
- location: 0;
- lines: 5;
- padding: 0;
- fixed-num-lines: true;
- show-icons: true;
- sidebar-mode: false;
- separator-style: "beam";
- hide-scrollbar: false;
- scroll-method: 0;
- click-to-exit: true;
- show-match: true;
- combi-hide-mode-prefix: false;
- display-combi: "Combi";
- display-drun: "Start";
- display-window: "Window";
- display-windowcd: "Windowcd";
- display-run: "Commands";
- display-ssh: "Ssh";
- modi: "drun,window,run,ssh,";
- opacity: "0";
- fake-transparency: false;
- kb-row-up: "Up,Control+k,Shift+Tab,Shift+ISO_Left_Tab";
- kb-row-down: "Down,Control+j";
- kb-accept-entry: "Control+m,Return,KP_Enter";
- me-select-entry: "";
- me-accept-entry: "MousePrimary";
- terminal: "kitty";
- kb-remove-to-eol: "Control+Shift+e";
- kb-mode-next: "Shift+Right,Control+Tab,Control+l";
- kb-mode-previous: "Shift+Left,Control+Shift+Tab,Control+h";
- kb-remove-char-back: "BackSpace";
- kb-mode-complete: "Control+c";
-}
-
-* {
- background-color: @background;
- font: "Source Code Pro Semibold 9";
- spacing: 2;
-}
-
-#window {
- background-color: @background;
- border: 3;
- border-color: @cyber;
- padding: 0.5ch;
-}
-
-#mainbox {
- border: 0;
- border-color: @ac;
- padding: 0;
-}
-
-#message {
- border: 0px 0px 0px;
- border-color: @ac;
- padding: 1px;
-}
-
-#textbox {
- text-color: @foreground;
-}
-
-#inputbar {
- children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
-}
-
-#textbox-prompt-colon {
- expand: false;
- str: ":";
- margin: 0px 0.3em 0em 0em;
- text-color: inherit;
-}
-
-#listview {
- fixed-height: 0;
- border: 0px 0px 0px;
- border-color: @ac;
- spacing: 2px;
- scrollbar: true;
- padding: 2px 0px 0px;
-}
-
-#element {
- border: 0;
- padding: 1px;
-}
-
-#element.normal.normal {
- background-color: @background;
- text-color: @foreground;
-}
-
-#element.normal.urgent {
- background-color: @background;
- text-color: @red;
-}
-
-#element.normal.active {
- background-color: @foreground;
- text-color: @background;
-}
-
-#element.selected.normal {
- background-color: @foreground;
- text-color: @black;
-}
-
-#element.selected.urgent {
- background-color: @foreground;
- text-color: @black;
-}
-
-#element.selected.active {
- background-color: @foreground;
- text-color: @black;
-}
-
-#element.alternate.normal {
- background-color: @background;
- text-color: @foreground;
-}
-
-#element.alternate.urgent {
- background-color: @background;
- text-color: @foreground;
-}
-
-#element.alternate.active {
- background-color: @background;
- text-color: @foreground;
-}
-
-#scrollbar {
- width: 0px;
- border: 0;
- handle-width: 0px;
- padding: 0;
-}
-
-#sidebar {
- border: 2px 0px 0px;
- border-color: @ac;
-}
-
-#button {
- text-color: @background;
-}
-
-#button.selected {
- background-color: @ac;
- text-color: @foreground;
-}
-
-#inputbar {
- spacing: 0;
- text-color: @foreground;
- padding: 1px;
-}
-
-#case-indicator {
- spacing: 0;
- text-color: @foreground;
-}
-
-#entry {
- spacing: 0;
- text-color: @foreground;
-}
-
-#prompt {
- spacing: 0;
- text-color: @foreground;
-}
-@import "~/.config/rofi/themes/colors.rasi"
diff --git a/.config/rofi/options_menu.rasi b/.config/rofi/options_menu.rasi
deleted file mode 100644
index 173da88..0000000
--- a/.config/rofi/options_menu.rasi
+++ /dev/null
@@ -1,71 +0,0 @@
-configuration {
- show-icons: false;
- font: "Font Awesome 17";
-}
-
-window {
- height: 300;
- width: 300;
- location: northeast;
- anchor: northeast;
- x-offset: -10;
- y-offset: 10;
- transparency: "real";
- background-color: #00000000;
- border: 4px 4px solid 4px 4px;
- border-radius: 8;
- border-color: @primary;
-}
-
-mainbox {
- children: [message, listview];
- padding: 0px 0px;
-}
-
-
-textbox {
- horizontal-align: 0.5;
- border: 0px 0px 2px;
- border-color: @primary;
- margin: 12px;
- padding: 12px;
-}
-
-listview {
- padding: 8px 32px;
-}
-
-element {
- padding: 8px;
- orientation: horizontal;
-}
-
-element normal.urgent, element alternate.urgent {
- background-color: @urgent;
-}
-
-element normal.active, element alternate.active {
- background-color: @background-alt;
- border: 4px 4px solid 4px 4px;
- border-radius: 8;
- border-color: transparent;
-}
-
-element selected {
- border: 4px 4px solid 4px 4px;
- border-radius: 8;
- border-color: @primary;
-}
-
-element selected.urgent {
- background-color: @urgent;
-}
-
-element selected.active {
- background-color: @background-alt;
-}
-
-element-text {
- horizontal-align: 0;
- padding: 0px 8px;
-}
diff --git a/.config/rofi/rofi-network-manager.conf b/.config/rofi/rofi-network-manager.conf
deleted file mode 100644
index e182dc1..0000000
--- a/.config/rofi/rofi-network-manager.conf
+++ /dev/null
@@ -1,41 +0,0 @@
-# Location
-# +---------- +
-# | 1 | 2 | 3 |
-# | 8 | 0 | 4 |
-# | 7 | 6 | 5 |
-# +-----------+
-#The grid represents the screen with the numbers indicating the location of the window.
-#If you want the window to be in the upper right corner, set location to 3.
-LOCATION=3
-#This sets the anchor point for the window displaying the QR code.
-QRCODE_LOCATION=$LOCATION
-#X, Y Offset
-#This sets the distance of the window from the edge of the screen on the X and Y axis.
-Y_AXIS=35
-X_AXIS=-10
-#X_AXIS=-315
-#Use notifications or not
-#Values can be "true" or "false"
-NOTIFICATIONS="false"
-#Location of qrcode wifi image
-QRCODE_DIR="/tmp/"
-#WIDTH_FIX_MAIN/WIDTH_FIX_STATUS
-#These values can be adjusted if the text doesn't fit or
-#if there is too much space at the end when you launch the script.
-#It will depend on the font type and size.
-WIDTH_FIX_MAIN=1
-WIDTH_FIX_STATUS=10
-#Values can be "true" or "false"
-#Set it to true, if the script outputs the signal strength with asterisks
-#and you want bars.
-ASCII_OUT=false
-#Values can be "true" or "false"
-#Set it to true if you want to use custom icons
-#for the signal strength instead of the default ones.
-CHANGE_BARS=false
-#Custom signal strength indicators
-SIGNAL_STRENGTH_0="0"
-SIGNAL_STRENGTH_1="1"
-SIGNAL_STRENGTH_2="12"
-SIGNAL_STRENGTH_3="123"
-SIGNAL_STRENGTH_4="1234"
diff --git a/.config/rofi/rofi-network-manager.rasi b/.config/rofi/rofi-network-manager.rasi
deleted file mode 100644
index 7e2da9b..0000000
--- a/.config/rofi/rofi-network-manager.rasi
+++ /dev/null
@@ -1,127 +0,0 @@
-configuration {
- show-icons: false;
- sidebar-mode: false;
- hover-select: true;
- me-select-entry: "";
- me-accept-entry: [MousePrimary];
-}
-*{
- font: "DejaVu Sans Mono 9"; //Font
- //Colors
- foreground:#f8f8f2; //Text
- background:#0A1229; //Background
- accent:#00BCD4; //Highlight
- foreground-selection:@foreground; //Selection_fg
- background-selection:#e34039; //Selection_bg
-
- transparent: #ffffff00;
- background-color: @transparent;
- text-color: @foreground;
- selected-normal-foreground: @foreground-selection;
- normal-foreground: @foreground;
- alternate-normal-background: @transparent;
- selected-urgent-foreground: @foreground;
- urgent-foreground: @foreground;
- alternate-urgent-background: @background;
- active-foreground: @accent;
- selected-active-foreground: @background-selection;
- alternate-normal-foreground: @foreground;
- alternate-active-background: @background;
- bordercolor: @background;
- normal-background: @transparent;
- selected-normal-background: @background-selection;
- separatorcolor: @accent;
- urgent-background: @accent;
- alternate-urgent-foreground: @foreground;
- selected-urgent-background: @accent;
- alternate-active-foreground: @foreground;
- selected-active-background: @transparent;
- active-background: @transparent;
-}
-window {
- text-color: @foreground;
- background-color: @background;
- border-radius: 6px;
- padding: 10;
-}
-mainbox {
- border: 0;
- padding: 0;
-}
-textbox {
- text-color: @foreground;
-}
-listview {
- spacing: 4px;
- dynamic: true;
- fixed-height: false;
- border: 0;
- scrollbar: false;
- text-color: @separatorcolor;
-}
-element {
- border: 0;
- padding: 0;
- border-radius: 4px;
-}
-element-text {
- background-color: inherit;
- text-color: inherit;
-}
-element.normal.normal {
- text-color: @normal-foreground;
- background-color: @normal-background;
-}
-element.normal.urgent {
- text-color: @urgent-foreground;
- background-color: @urgent-background;
-}
-element.normal.active {
- text-color: @active-foreground;
- background-color: @active-background;
-}
-element.selected.normal {
- text-color: @selected-normal-foreground;
- background-color: @selected-normal-background;
-}
-element.selected.urgent {
- text-color: @selected-urgent-foreground;
- background-color: @selected-urgent-background;
-}
-element.selected.active {
- text-color: @selected-active-foreground;
- background-color: @selected-active-background;
-}
-element.alternate.normal {
- text-color: @alternate-normal-foreground;
- background-color: @alternate-normal-background;
-}
-element.alternate.urgent {
- text-color: @alternate-urgent-foreground;
- background-color: @alternate-urgent-background;
-}
-element.alternate.active {
- text-color: @alternate-active-foreground;
- background-color: @alternate-active-background;
-}
-mode-switcher {
- border: 0;
-}
-button selected {
- text-color: @selected-normal-foreground;
- background-color: @selected-normal-background;
-}
-button normal {
- text-color: @foreground;
-}
-inputbar {
- children: [textbox-prompt-colon,entry];
-}
-textbox-prompt-colon{
- expand: false;
- margin: 0;
- str: ":";
-}
-entry {
- placeholder: "";
-}
diff --git a/.config/rofi/styles/appmenu.rasi b/.config/rofi/styles/appmenu.rasi
deleted file mode 100644
index 83445be..0000000
--- a/.config/rofi/styles/appmenu.rasi
+++ /dev/null
@@ -1,186 +0,0 @@
-configuration {
- bw: 0;
- columns: 1;
- location: 0;
- lines: 15;
- padding: 0;
- fixed-num-lines: true;
- show-icons: true;
- sidebar-mode: false;
- separator-style: "beam";
- hide-scrollbar: false;
- scroll-method: 0;
- click-to-exit: true;
- show-match: true;
- combi-hide-mode-prefix: false;
- display-combi: "Combi";
- display-drun: "Start";
- display-window: "Window";
- display-windowcd: "Windowcd";
- display-run: "Commands";
- display-ssh: "Ssh";
- modi: "drun,window,run,ssh,";
- opacity: "0";
- fake-transparency: false;
- kb-row-up: "Up,Control+k,Shift+Tab,Shift+ISO_Left_Tab";
- kb-row-down: "Down,Control+j";
- kb-accept-entry: "Control+m,Return,KP_Enter";
- me-select-entry: "";
- me-accept-entry: "MousePrimary";
- terminal: "kitty";
- kb-remove-to-eol: "Control+Shift+e";
- kb-mode-next: "Shift+Right,Control+Tab,Control+l";
- kb-mode-previous: "Shift+Left,Control+Shift+Tab,Control+h";
- kb-remove-char-back: "BackSpace";
- kb-mode-complete: "Control+c";
-}
-
-* {
- padding: 0;
- hide-scrollbar: true;
- border: 0;
- width: 15%;
- columns: 1;
- background-color: @background;
- font: "Source Code Pro Semibold 9";
- spacing: 2;
-}
-
-#window {
- background-color: @background;
- border: 3;
- border-color: @cyber;
- padding: 0.5ch;
- location: northwest;
- margin: 28px 0 0 8px;
-}
-
-#mainbox {
- border: 0;
- border-color: @ac;
- padding: 0;
-}
-
-#message {
- border: 0px 0px 0px;
- border-color: @ac;
- padding: 1px;
-}
-
-#textbox {
- text-color: @foreground;
-}
-
-#inputbar {
- children: [ prompt, textbox-prompt-colon, entry, case-indicator ];
-}
-
-#textbox-prompt-colon {
- expand: false;
- str: ":";
- margin: 0px 0.3em 0em 0em;
- text-color: inherit;
-}
-
-#listview {
- fixed-height: 0;
- border: 0px 0px 0px;
- border-color: @ac;
- spacing: 2px;
- scrollbar: true;
- padding: 2px 0px 0px;
-}
-
-#element {
- border: 0;
- padding: 1px;
-}
-
-#element.normal.normal {
- background-color: @background;
- text-color: @foreground;
-}
-
-#element.normal.urgent {
- background-color: @background;
- text-color: @red;
-}
-
-#element.normal.active {
- background-color: @foreground;
- text-color: @background;
-}
-
-#element.selected.normal {
- background-color: @foreground;
- text-color: @black;
-}
-
-#element.selected.urgent {
- background-color: @foreground;
- text-color: @black;
-}
-
-#element.selected.active {
- background-color: @foreground;
- text-color: @black;
-}
-
-#element.alternate.normal {
- background-color: @background;
- text-color: @foreground;
-}
-
-#element.alternate.urgent {
- background-color: @background;
- text-color: @foreground;
-}
-
-#element.alternate.active {
- background-color: @background;
- text-color: @foreground;
-}
-
-#scrollbar {
- width: 0px;
- border: 0;
- handle-width: 0px;
- padding: 0;
-}
-
-#sidebar {
- border: 2px 0px 0px;
- border-color: @ac;
-}
-
-#button {
- text-color: @background;
-}
-
-#button.selected {
- background-color: @ac;
- text-color: @foreground;
-}
-
-#inputbar {
- spacing: 0;
- text-color: @foreground;
- padding: 1px;
-}
-
-#case-indicator {
- spacing: 0;
- text-color: @foreground;
-}
-
-#entry {
- spacing: 0;
- text-color: @foreground;
-}
-
-#prompt {
- spacing: 0;
- text-color: @foreground;
-}
-
-@import "~/.config/rofi/themes/colors.rasi"
diff --git a/.config/rofi/styles/powermenu.rasi b/.config/rofi/styles/powermenu.rasi
deleted file mode 100644
index 1b7219d..0000000
--- a/.config/rofi/styles/powermenu.rasi
+++ /dev/null
@@ -1,187 +0,0 @@
-configuration {
- bw: 0;
- columns: 1;
- location: 0;
- lines: 5;
- padding: 0;
- fixed-num-lines: true;
- show-icons: true;
- sidebar-mode: false;
- separator-style: "beam";
- hide-scrollbar: false;
- scroll-method: 0;
- click-to-exit: true;
- show-match: true;
- combi-hide-mode-prefix: false;
- display-combi: "Combi";
- display-drun: "Start";
- display-window: "Window";
- display-windowcd: "Windowcd";
- display-run: "Commands";
- display-ssh: "Ssh";
- modi: "drun,window,run,ssh,";
- opacity: "0";
- fake-transparency: false;
- kb-row-up: "Up,Control+k,Shift+Tab,Shift+ISO_Left_Tab";
- kb-row-down: "Down,Control+j";
- kb-accept-entry: "Control+m,Return,KP_Enter";
- me-select-entry: "";
- me-accept-entry: "MousePrimary";
- terminal: "kitty";
- kb-remove-to-eol: "Control+Shift+e";
- kb-mode-next: "Shift+Right,Control+Tab,Control+l";
- kb-mode-previous: "Shift+Left,Control+Shift+Tab,Control+h";
- kb-remove-char-back: "BackSpace";
- kb-mode-complete: "Control+c";
-}
-
-* {
- lines: 5;
- padding: 0;
- hide-scrollbar: true;
- border: 0;
- width: 15%;
- columns: 1;
- background-color: @background;
- font: "Source Code Pro Semibold 9";
- spacing: 2;
-}
-
-#window {
- background-color: @background;
- border: 3;
- border-color: @cyber;
- padding: 0.5ch;
- location: northeast;
- margin: 28px 8px 0 0; /* Adjust these values for spacing and positioning */
-}
-
-#mainbox {
- border: 0;
- border-color: @ac;
- padding: 0;
-}
-
-#message {
- border: 0px 0px 0px;
- border-color: @ac;
- padding: 1px;
-}
-
-#textbox {
- text-color: @foreground;
-}
-
-#inputbar {
- children: [ prompt, textbox-prompt-colon, entry, case-indicator ];
-}
-
-#textbox-prompt-colon {
- expand: false;
- str: ":";
- margin: 0px 0.3em 0em 0em;
- text-color: inherit;
-}
-
-#listview {
- fixed-height: 0;
- border: 0px 0px 0px;
- border-color: @ac;
- spacing: 2px;
- scrollbar: true;
- padding: 2px 0px 0px;
-}
-
-#element {
- border: 0;
- padding: 1px;
-}
-
-#element.normal.normal {
- background-color: @background;
- text-color: @foreground;
-}
-
-#element.normal.urgent {
- background-color: @background;
- text-color: @red;
-}
-
-#element.normal.active {
- background-color: @foreground;
- text-color: @background;
-}
-
-#element.selected.normal {
- background-color: @foreground;
- text-color: @black;
-}
-
-#element.selected.urgent {
- background-color: @foreground;
- text-color: @black;
-}
-
-#element.selected.active {
- background-color: @foreground;
- text-color: @black;
-}
-
-#element.alternate.normal {
- background-color: @background;
- text-color: @foreground;
-}
-
-#element.alternate.urgent {
- background-color: @background;
- text-color: @foreground;
-}
-
-#element.alternate.active {
- background-color: @background;
- text-color: @foreground;
-}
-
-#scrollbar {
- width: 0px;
- border: 0;
- handle-width: 0px;
- padding: 0;
-}
-
-#sidebar {
- border: 2px 0px 0px;
- border-color: @ac;
-}
-
-#button {
- text-color: @background;
-}
-
-#button.selected {
- background-color: @ac;
- text-color: @foreground;
-}
-
-#inputbar {
- spacing: 0;
- text-color: @foreground;
- padding: 1px;
-}
-
-#case-indicator {
- spacing: 0;
- text-color: @foreground;
-}
-
-#entry {
- spacing: 0;
- text-color: @foreground;
-}
-
-#prompt {
- spacing: 0;
- text-color: @foreground;
-}
-
-@import "~/.config/rofi/themes/colors.rasi"
diff --git a/.config/rofi/themes/colors.rasi b/.config/rofi/themes/colors.rasi
deleted file mode 100644
index d1419e4..0000000
--- a/.config/rofi/themes/colors.rasi
+++ /dev/null
@@ -1,18 +0,0 @@
-/* colors */
-
-* {
- alternative: #00101212;
- background: #101010ff;
- seperator: #00101212;
- foreground: #FAFAFA;
- ac: #00000000;
- red: #CECCC9;
- green: #CECCC9;
- yellow: #CECCC9;
- blue: #CECCC9;
- purple: #CECCC9;
- cyan: #CECCC9;
- black: #101212;
- cyber: #53E2AE;
- orange: #fe8019;
-}
diff --git a/.config/rofi/themes/dmenu.rasi b/.config/rofi/themes/dmenu.rasi
deleted file mode 100644
index 1e8f319..0000000
--- a/.config/rofi/themes/dmenu.rasi
+++ /dev/null
@@ -1,38 +0,0 @@
-
-* {
- background-color: #1a2026;
- border-color: #29343d;
- text-color: #ffffff;
- font: "Fira Code Nerd Font Mono 11";
-}
-
-window {
- anchor: north;
- location: north;
- width: 100%;
- padding: 4px;
- children: [ horibox ];
-}
-
-horibox {
- orientation: horizontal;
- children: [ prompt, entry, listview ];
-}
-
-listview {
- layout: horizontal;
- spacing: 10px;
- lines: 100;
-}
-
-entry {
- expand: false;
- width: 14em;
-}
-
-element {
- padding: 2px 5px;
-}
-element selected {
- color: #a9bcef;
-}
diff --git a/.config/rofi/themes/power.rasi b/.config/rofi/themes/power.rasi
deleted file mode 100644
index 209a9ac..0000000
--- a/.config/rofi/themes/power.rasi
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * This theme is intended for a 5 items wide menu
- * on a 1366x768 pixels resolution.
- */
-@import "colors.rasi"
-#window {
- width: 1366px;
- height: 768px;
- /* vertical horizontal */
- padding: 270px 88px;
- children: [ horibox ];
-}
-#horibox {
- children: [ listview ];
-}
-#listview {
- layout: horizontal;
- spacing: 56px;
- lines: 5;
-}
-#element {
- /**
- * Values bellow are 'no-padding' ones, to which we add 70
- * top right bottom left
- * -14px 0px -14px -93px */
- padding: 56px 70px 56px -23px;
- background-color: @background-light;
-}
-#element.selected {
- background-color: @accent;
- text-color: @background;
-}
-
-
diff --git a/.config/sxhkd/show_help.sh b/.config/sxhkd/show_help.sh
deleted file mode 100755
index bd0cd6c..0000000
--- a/.config/sxhkd/show_help.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-cat ~/.config/sxhkd/sxhkdrc | awk '/^[a-z]/ && last {print $0,"\t",last} {last=""} /^#/{last=$0}' | column -t -s $'\t' | rofi -dmenu -i -no-show-icons -width 1000
-
diff --git a/.config/sxhkd/sxhkdrc b/.config/sxhkd/sxhkdrc
deleted file mode 100755
index 1b276c7..0000000
--- a/.config/sxhkd/sxhkdrc
+++ /dev/null
@@ -1,490 +0,0 @@
-#################################################
-# ███████╗██╗ ██╗██╗ ██╗██╗ ██╗██████╗ #
-# ██╔════╝╚██╗██╔╝██║ ██║██║ ██╔╝██╔══██╗ #
-# ███████╗ ╚███╔╝ ███████║█████╔╝ ██║ ██║ #
-# ╚════██║ ██╔██╗ ██╔══██║██╔═██╗ ██║ ██║ #
-# ███████║██╔╝ ██╗██║ ██║██║ ██╗██████╔╝ #
-# ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ #
-#################################################
-
-#---------------------------------------------------------------
-#
-# WM independent hotkeys
-#
-
-# Help
-super + slash
- ~/.config/sxhkd/show_help.sh -m -3
-
-# Application menu
-super + a
- ~/.config/polybar/scripts/menu.sh
-
-# Shutdown menu
-#super + alt + Delete
-# ~/.config/polybar/scripts/sysmenu.sh
-
-# lockscreen
-super + Escape
- betterlockscreen -l
-
-# Program launcher
-super + @space
- rofi -show drun
-
-# Run launcher (commands)
-super + r
- rofi -show run
-
-# Task switcher
-alt + Tab
- rofi -show window
-
-# Turn off compositor
-super + shift + p
- toggleprogram "picom" "--experimental-backends"
-
-#picom-trans -c -10
-#picom-trans -c +10
-
-# Close all active notifications.
-# ~button1
-# bspc query -D -d .focused.!occupied && $HOME/.local/bin/eww update noti=false; sleep 0.270; $HOME/.local/bin/eww close notification-popup; pkill openEwwPopup.sh
-
-# Toggle control center using middle click.
-~button2
- xqp 0 $(xdo id -N Bspwm -n root) && sh $HOME/.config/jgmenu/scripts/windows.sh
-#bspc query -D -d .focused.!occupied && sh $HOME/.config/eww/scripts/openControlCenter.sh
-
-# Right click menu
-~button3
- xqp 0 $(xdo id -N Bspwm -n root) && sh $HOME/.config/jgmenu/scripts/jgmenu.sh
-
-# Toggle control center.
-super + shift + c
- sh $HOME/.config/eww/scripts/openControlCenter.sh
-
-# Toggle notification center.
-super + shift + n
- sh $HOME/.config/eww/scripts/openNotificationCenter.sh
-
-## Toggle info center.
-#super + shift + i
-# sh $HOME/.config/eww/scripts/openInfoCenter.sh
-#
-## Toggle color picker.
-#super + shift + x
-# sh $HOME/.local/bin/xcolor-pick
-#
-## Toggle bar.
-#super + shift + b
-# sh $HOME/.local/bin/tglbar
-#
-## Toggle exit screen.
-#super + Escape
-# sh $HOME/.config/eww/scripts/openExitScreen.sh
-#
-## Close exit screen when it's enabled.
-#~Escape
-# [[ -f "$HOME/.cache/eww-escreen.lock" ]] && sh $HOME/.config/eww/scripts/openExitScreen.sh
-
-## Open web browser, and file manager.
-#super + shift + {w,f}
-# {firefox-developer-edition,thunar}
-
-# Terminal emulator
-#super + Return
-# $TERMINAL
-
-# Browser
-super + w
- $BROWSER
-
-# Keyboard
-super + o
- onboard
-
-# Show clipmenu
-#alt + x
-# parcellite
- #~/.scripts/clip.sh
-
-# Screenshots tool (selection)
-ctrl + Print
- screenshot crop
-
-# Screenshots tool (screen)
-shift + Print
- screenshot full
-
-# make sxhkd reload its configuration files:
-super + ctrl + x
- pkill -USR1 -x sxhkd; dunstify "Sxhkd configuration reloaded"
-
-# Kill window
-ctrl + alt + Escape
- xkill
-
-# Un/mount drives
-ctrl + alt + {m,u}
- {_,u}mnt
-
-
-#---------------------------------------------------------------
-#
-# bspwm hotkeys
-#
-
-# Quit/restart bspwm
-super + alt + shift + {q,r}
- bspc {quit,wm -r}
-
-# Close and kill
-super + d
- bspc node -c
-
-# Alternate between the tiled and monocle layout
-super + m
- bspc desktop -l next
-super + z
- bspc desktop -l next
-
-# Send the newest marked node to the newest preselected node
-super + y
- bspc node newest.marked.local -n newest.!automatic.local
-
-# Swap the current node and the biggest window
-super + g
- bspc node -s biggest.window
-
-
-#---------------------------------------------------------------
-#
-# state/flags
-#
-
-# Set the window state
-#super + {t,shift + t,s,f}
-# bspc node -t {tiled,pseudo_tiled,floating,fullscreen}
-
-# Floating into monocle layout
-super + shift + m
- bspc node -t pseudo_tiled; bspc node -t floating && wtp 10 36 $(($(bspc query -T -m | jq '.rectangle.width') * 98 / 100)) $(($(($(bspc query -T -m | jq '.rectangle.height') - $(bspc config top_padding))) * 96 / 100)) "$(pfw)"
-
-# Floating window pane left
-super + shift + h
- bspc node -t pseudo_tiled; bspc node -t floating && wtp 10 36 $(($(($(bspc query -T -m | jq '.rectangle.width') / 2)) - 5)) $(($(($(bspc query -T -m | jq '.rectangle.height') - $(bspc config top_padding))) * 96 / 100)) "$(pfw)"
-
-# Floating window pane right
-super + shift + l
- bspc node -t pseudo_tiled && bspc node -t floating && wtp $(($(bspc query -T -m | jq '.rectangle.width') - $(($(bspc query -T -m | jq '.rectangle.width') / 2)))) 36 $(($(($(bspc query -T -m | jq '.rectangle.width') / 2)) - 15)) $(($(($(bspc query -T -m | jq '.rectangle.height') - $(bspc config top_padding))) * 96 / 100)) "$(pfw)"
-
-# Set the window state
-super + {t,shift + t,s}
- bspc node -t {tiled,pseudo_tiled,floating}; \
- xdo raise -N Plank; \
- xdo raise -N '*:*:Picture in picture'; \
- xdo raise -N "Picture-in-Picture"
-
-# Toggle fullscreen
-super + {f}
- bspc node -t \~fullscreen
-
-# Toggle sticky
-#super + q
-# bspc node -g sticky=on
-
-# Set the node flags
-super + ctrl + {m,x,y,z}
- bspc node -g {marked,locked,sticky,private}
-
-# Move layers of windows above/below each other (script)
-super + {equal,minus}
- layer.sh {+,-}
-
-
-#---------------------------------------------------------------
-#
-# Focus/Swap
-#
-
-# Focus the node in the given direction
-super + {_,shift + }{h,j,k,l}
- bspc node -{f,s} {west,south,north,east}
-
-# Focus the node for the given path jump
-#super + {p,b,comma,period}
-# bspc node -f @{parent,brother,first,second}
-
-# Focus the next/previous window in the current desktop
-super + {_,shift + }c
- bspc node -f {next,prev}.local.!hidden.window
-
-# Focus the next/previous desktop in the current monitor
-super + bracket{left,right}
- bspc desktop -f {prev,next}.local
-
-# Focus the last node/desktop
-super + {grave,Tab}
- bspc {node,desktop} -f last
-
-# Focus the older or newer node in the focus history
-#super + {o,i}
-# bspc wm -h off; \
-# bspc node {older,newer} -f; \
-# bspc wm -h on
-
-# Focus or send to the given desktop
-super + {_,shift + }{1-9,0}
- bspc {desktop -f,node -d} '^{1-9,10}'
-
-# Hide window
-super + comma
- bspc node -g hidden
-
-# Unhide window (script)
-super + period
- ${HOME}/.config/bspwm/scripts/hide-window unhide
-
-# Toggle the hidden state of the focused node
-super + q
- ~/.scripts/bspwm-toggle-visibility.sh
-
-#---------------------------------------------------------------
-#
-# Preselect
-#
-
-# Preselect the direction
-super + ctrl + {h,j,k,l}
- bspc node -p {west,south,north,east}
-
-# Preselect the ratio
-super + ctrl + {1-9}
- bspc node -o 0.{1-9}
-
-# Cancel the preselection for the focused node
-super + ctrl + space
- bspc node -p cancel
-
-# Cancel the preselection for the focused desktop
-super + ctrl + shift + space
- bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel
-
-# Close all receptacle
-super + shift + i
- for win in `bspc query -N -n .leaf.\!window`; do bspc node $win -k ; done;
-
-# Insert receptacle
-super + i; {h,j,k,l}
- bspc node --presel-dir {west,south,north,east} -i
-
-# Move to rectacle
-super + ctrl + i
- bspreceptacle
-
-# Balance nodes
-super + alt + i
- bspc node @/ -B
-
-
-
-#---------------------------------------------------------------
-#
-# Move/resize
-#
-
-## Drag tiling window to floating
-alt + button1
- bspdragtofloat
-alt + @button1
- bspdragtofloat stop
-@button1
- bspdragtofloat stop
-~button1
- :
-
-# Move a floating window or swap with any other adjacent tiled/pseudo_tiled window
-ctrl + alt + {h,j,k,l}
- { dir=west dx=-20 dy=0 \
- , dir=south dx=0 dy=20 \
- , dir=north dx=0 dy=-20 \
- , dir=east dx=20 dy=0 \
- }; \
- bspc node --move "$dx" "$dy" || bspc node --swap $dir
-
-# Rotate windows to different nodes
-super + ctrl + r
- bspc node @parent -R 90
-
-# Resize tiled/floating windows (script)
-shift + alt + {h,j,k,l}
- bspwm_resize.sh {west,south,north,east}
-#shift + alt + {h,j,k,l}
-# {bspc node @parent/second -z left -20 0; \
-# bspc node @parent/first -z right -20 0, \
-# bspc node @parent/second -z top 0 +20; \
-# bspc node @parent/first -z bottom 0 +20, \
-# bspc node @parent/first -z bottom 0 -20; \
-# bspc node @parent/second -z top 0 -20, \
-# bspc node @parent/first -z right +20 0; \
-# bspc node @parent/second -z left +20 0}
-
-# Resize window into predefined pseudo_tiled window
-super + shift + s
- bspc node -t pseudo_tiled; bspc node -t floating && wtp 396 185 570 394 "$(pfw)"
-
-# Spawn next window/program into predefined floating window
-super + ctrl + s
- bspc rule -a '*' -o state=floating rectangle=720x480+320+200
-
-# Spawn next window/program into another desktop
-super + alt + {1-9,0}
- bspc rule -a '*' -o desktop=^{1-9,10}
-
-# Focused desktop window gaps scroll
-shift + alt + {1,2}
- bspc config -d focused window_gap $((`bspc config -d focused window_gap` {-,+} 5 ))
-
-# Global window gaps scroll
-ctrl + alt + {1,2}
- bspc config window_gap $(( $(bspc config window_gap) {-,+} 5 ))
-
-#---------------------------------------------------------------
-#
-# Multimedia
-#
-# Multimedia control
-{XF86AudioStop,XF86AudioPlay,XF86AudioPrev,XF86AudioNext}
- playerctl {stop,play-pause,previous,next}
-
-# Use arrow keys as multimedia keys
-alt + shift + {Left,Up,Right}
- playerctl {previous,play-pause,next}
-
-# Brightness control
-XF86MonBrightness{Up,Down}
- brightnessctl s 5%{+,-}
-
-# Use arrow keys as brightness keys
-alt + {Right,Left}
- brightnessctl s 5%{+,-}
-
-# Volume control
-XF86Audio{Raise,Lower}Volume
- pulsemixer --change-volume {+,-}5
-
-# Use arrow keys as volume keys
-alt + {Up,Down}
- pulsemixer --change-volume {+,-}5
-
-
-#---------------------------------------------------------------
-#
-# Xdotool keys
-#
-
-# Move mouse cursor north, west, south, east
-alt + {w,a,s,d}
- xdotool mousemove_relative --sync {-- 0 -24, -- -24 0, 0 24, 24 0}
-
-# Move mouse cursor diagonally north-west, north-east, south-west, south-east
-shift + alt + {q,e,a,d}
- xdotool mousemove_relative --sync {-- -24 -24, -- 24 -24, -- -24 24,-- 24 24}
-
-# Emulate left mouse click
-alt + i
- xdotool click --clearmodifiers 1
-
-# Emulate left mouse click select
-alt + shift + i
- xdotool mousedown 1 sleep 0.5 mousemove_relative --sync {-- -8 0, 0 8, -- 0 -8, 8 0} sleep 0.5 mouseup 1
-
-# Emulate mouse right click
-alt + o
- xdotool click --clearmodifiers 3
-
-# Emulate mouse scroll up
-alt + n
- xdotool click --clearmodifiers 4
-
-# Emulate mouse scroll down
-alt + m
- xdotool click --clearmodifiers 5
-
-# Emulate mouse scroll button
-alt + p
- xdotool click --clearmodifiers 2
-
-# Emulate home key
-alt + ctrl + Left
- xdotool keyup Left key --clearmodifiers Home
-
-# Emulate end key
-alt + ctrl + Right
- xdotool keyup Right key --clearmodifiers End
-
-# Emulate delete key
-~alt + BackSpace
- xte 'keyup Alt_L' 'key Delete' 'keydown Alt_L'
-
-
-#---------------------------------------------------------------
-#
-# Programs
-#
-
-# Scratchpd
-super + semicolon
- ~/.scripts/scratchpad
-
-super + x
- ~/.scripts/scratchpad
-
-# Heads-Up-Display scratchpad terminal
-super + e
- ~/.scripts/heads-up-display
-
-## File manager nnn
-#super + shift + n
-# $TERMINAL -e nnn
-
-# File manager pcmanfm (GUI)
-super + shift + f
- pcmanfm
-
-# Bitwarden-rofi
-super + shift + b
- rofi-rbw
-
-# Thunderbird mail
-#super + shift + m
-# thunderbird
-
-# VirtualBox gui
-super + v
- /usr/bin/VirtualBox -- :0 vt1
-
-# Discord
-super + shift + d
- discord
-
-# Spotify
-super + shift + y
- spotify
-
-# Book reader (zathura)
-super + shift + z
- zathura
-
-# Dictionary
-super + ctrl + w
- goldendict
-
-# Thesaurus
-super + shift + w
- artha
-
-# Suspend
-alt + F4
- systemctl suspend && betterlockscreen --lock dimblur
diff --git a/.config/tridactyl/tridactylrc b/.config/tridactyl/tridactylrc
deleted file mode 100644
index a9547cc..0000000
--- a/.config/tridactyl/tridactylrc
+++ /dev/null
@@ -1,170 +0,0 @@
-" -*- vimrc-generic -*-
-"
-" Base on
-" https://raw.githubusercontent.com/tridactyl/tridactyl/master/.tridactylrc
-" See that for more advanced examples.
-
-" Installing Tridactyl:
-"
-" * Put this config in ~/.tridactylrc (or $XDG_CONFIG_DIR/tridactyl/tridactylrc).
-"
-" * Install the native messenger by running :installnative in Tridactyl
-" and then running the shell command it copies to clipboard.
-"
-" * Run :source in the browser or just restart.
-
-" NB: If you want "vim-like" behaviour where removing a line from
-" here makes the setting disappear, uncomment the line below.
-"
-"sanitise tridactyllocal tridactylsync
-
-" Use this to see current config in the browser
-" :viewconfig --user
-
-" WARNING: THERE IS A BUG WHEREBY SOMETIMES SOME LINES IN THE CONFIG GET IGNORED :/
-" https://github.com/tridactyl/tridactyl/issues/1409
-
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-"
-" Search Urls
-"
-" These work in the 'o' -> ':open ' dialog, but not in the regular
-" address bar.
-"
-" In addition to using %s for a single query param, you can use %1,
-" %2, etc, for multiple query params.
-
-"set searchurls.hackage http://hackage.haskell.org/package/%s
-"set searchurls.hayoo http://hayoo.fh-wedel.de/?query=%s
-"set searchurls.h4 https://www.haskell.org/hoogle/?hoogle=%s
-"set searchurls.h5 https://hoogle.haskell.org/?hoogle=%s&scope=set%3Astackage
-
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-"
-" Quickmarks
-"
-" Use go<key>/gn<key>/gw<key> to open quickmark for <key> in
-" current/new tab/new window
-
-quickmark g https://mail.google.com/mail/u/0/#inbox
-quickmark G https://mail.google.com/mail/u/1/#inbox
-
-""""""""""""""""
-"
-" Disable on some sites
-"
-
-"blacklistadd youtube.com
-blacklistadd calendar.google.com
-blacklistadd docs.google.com
-blacklistadd drive.google.com
-blacklistadd keep.google.com
-blacklistadd mail.google.com
-blacklistadd monkeytype.com
-blacklistadd typeracer.com
-blacklistadd codepen.io
-blacklistadd codesandbox.io
-"blacklistadd github.dev
-
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-"
-" Binds
-"
-" Some defaults:
-" - :help
-" - :tutor
-" - b : buffers/tabs navigation
-" - yy : yank url
-" - gg : top of page
-" - G : bottom of page
-" - insert, shift+insert, ctrl+alt+`, shift+escape : toggle pass thru
-" - d/D : close current tab and move focus right/left
-" - p/P : open url in clipboard or search for clipboard content in current/new tab
-" - zi/zo/zz : zoom in/out/reset
-" - \[\[ / \]\] : guess previous/next page (seems smart, e.g. works when
-" url does not end in a number, but "next" occurs in link text)
-" - ;; : focus an element. Useful if you want to scroll something non-default with up/down or j/k
-" - ;p : copy element (e.g. link, paragraph) to clipboard
-" - ;k : kill element (e.g. a big "please disable your ad blocker" banner)
-" - :viewconfig nmaps : see all key bindings (but how to delete?)
-" - f/;t/F: follow hint in current tab/new foreground tab (switch focus)/new background tab (don't switch focus)
-" - C-o : run a single command (in normal mode) when in ignore mode, then switch back to ignore mode
-
-" Make 'd' switch to previous active tab after close
-bind d composite tabclose | buffer #
-
-" Don't bind paste to ignore mode. Can use 'S-Esc' or 'C-A-Esc' instead.
-unbind <S-Insert>
-
-" Don't bind 'f' in youtube
-unbindurl youtube\.com/watch\?v=.* f
-
-" Bind <Insert> to toggle normal/ignore mode. I use <Insert> to toggle
-" Ctrl-lock in Emacs, so hopefully this will be memorable. We leave
-" insert mode, but don't enter it. The insert mode bind doesn't work,
-" but <C-,> still allows escape.
-bind --mode=normal <Insert> mode ignore
-bind --mode=ignore <Insert> mode normal
-"bind --mode=insert <Insert> mode normal
-
-" Bind <C-o> to toggle normal/ignore mode for one command. Already
-" bound to C-o in normal mode, make it work everywhere. I'm rebinding
-" the existing normal mode bind for completeness/clairity. We leave
-" insert mode, but don't enter. The insert mode bind doesn't work, but
-" <C-,> still allows escape.
-bind --mode=normal <C-o> nmode normal 1 mode ignore
-bind --mode=ignore <C-o> nmode ignore 1 mode normal
-"bind --mode=insert <C-o> nmode insert 1 mode normal
-
-bind / fillcmdline find
-bind n findnext 1
-bind N findnext -1
-"bind <Space>/ nohlsearch
-set findcase smart
-
-" Workaround bug on web.whatsapp.com that prevents focus from leaving
-" message entry
-"" box. https://github.com/tridactyl/tridactyl/issues/3070
-"bindurl web.whatsapp.com --mode=normal <Escape> composite hint -f m2 ; fillcmdline ; ex.hide_and_clear
-"bindurl web.whatsapp.com --mode=insert <Escape> composite hint -f m2 ; fillcmdline ; ex.hide_and_clear
-"bindurl web.whatsapp.com --mode=input <Escape> composite hint -f m2 ; fillcmdline ; ex.hide_and_clear
-
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-"
-" Misc settings
-"
-
-" but make sure i can always get into the console"
-bind : fillcmdline_notrail
-
-" newtab
-set newtab about:blank
-
-" I’m a smooth operator
-set smoothscroll true
-
-" Vimperator-style hinting, using numbers to select and letters to
-" narrow, instead of just letters to select.
-set hintfiltermode vimperator-reflow
-set hintnames numeric
-" " I use Programmer Dvorak
-" set hintchars dhtnaoeuifgcrl',.pybm;qjkx
-
-" Defaults to 300ms
-set hintdelay 100
-
-" Don't autofocus!
-autocmd TabEnter .* unfocus
-autocmd DocLoad .* unfocus
-
-
-" Include numbers in tab names, to make 'b' and '<A-<number>>'
-" switching easier.
-guiset tabs numbers
-
-" Make Tridactyl work on more sites at the expense of some security
-" set csp clobber
-" fixamo_quiet
-
-" This will have to do until someone writes us a nice syntax file :)
-" vim: set filetype=vim:
diff --git a/.config/user-dirs.dirs b/.config/user-dirs.dirs
deleted file mode 100644
index 0db0cae..0000000
--- a/.config/user-dirs.dirs
+++ /dev/null
@@ -1,15 +0,0 @@
-# This file is written by xdg-user-dirs-update
-# If you want to change or add directories, just edit the line you're
-# interested in. All local changes will be retained on the next run.
-# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
-# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
-# absolute path. No other format is supported.
-#
-XDG_DESKTOP_DIR="$HOME/"
-XDG_DOWNLOAD_DIR="$HOME/downloads"
-XDG_TEMPLATES_DIR="$HOME/"
-XDG_PUBLICSHARE_DIR="$HOME/"
-XDG_DOCUMENTS_DIR="$HOME/documents"
-XDG_MUSIC_DIR="$HOME/music"
-XDG_PICTURES_DIR="$HOME/pictures"
-XDG_VIDEOS_DIR="$HOME/videos"
diff --git a/.config/user-dirs.locale b/.config/user-dirs.locale
deleted file mode 100644
index 3e0b419..0000000
--- a/.config/user-dirs.locale
+++ /dev/null
@@ -1 +0,0 @@
-en_US \ No newline at end of file
diff --git a/.config/waybar/config.jsonc b/.config/waybar/config.jsonc
deleted file mode 100644
index dbf6556..0000000
--- a/.config/waybar/config.jsonc
+++ /dev/null
@@ -1,292 +0,0 @@
-{
- "layer": "top", // Waybar at top layer
- "position": "top", // Waybar position (top|bottom|left|right)
- //"gtk-layer-shell": "false",
- "height": 45, // Waybar height (to be removed for auto height)
- // "width": 2560, // Waybar width
- "spacing": 0, // Gaps between modules (0px) Adjusted in the css
- "margin-top": 0,
- //"margin-bottom":-10,
- "margin-left": 10,
- "margin-right": 10,
- // Choose the order of the modules
- "modules-left": [
- "custom/launcher",
- "wlr/workspaces",
- "cpu",
- "memory",
- "temperature",
- "disk",
- "custom/updates"
- ],
- "modules-center": [
- "custom/music"
- ],
- "modules-right": [
- "network",
- "pulseaudio",
- "backlight",
- "battery",
- "custom/notifications",
- "tray",
- "clock",
- "custom/weather",
- "custom/cycle_wall",
- "custom/clipboard",
- "custom/power",
- "custom/custom"
- ],
- "custom/launcher": {
- "format": "{}",
- "tooltip": true,
- "exec": "echo '{\"text\":\"💧\",\"tooltip\":\"Drun | Run\"}'",
- "return-type": "json",
- "on-click": "pkill wofi || wofi --show drun -n",
- "on-click-right": "pkill wofi || wofi --show run -n",
- },
- "wlr/workspaces": {
- // "format": "{icon} {name}",
- "format": "",
- "format-icons": {
- "active": "",
- "default": ""
- },
- "on-scroll-up": "hyprctl dispatch workspace e-1",
- "on-scroll-down": "hyprctl dispatch workspace e+1",
- "on-click": "activate"
- },
- "cpu": {
- "format": " {usage}%",
- "tooltip": true,
- "on-click": "kitty --start-as=fullscreen --title all_is_kitty sh -c 'btop'",
- "interval": 2
- },
- "memory": {
- "format": " {}%",
- "tooltip": true,
- "on-click": "kitty --start-as=fullscreen --title all_is_kitty sh -c 'btop'",
- "interval": 2
- },
- "temperature": {
- // "thermal-zone": 2,
- // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
- "critical-threshold": 40,
- "format-critical": "{icon} {temperatureC}°C",
- "format": "{icon} {temperatureC}°C",
- "format-icons": [
- "",
- "",
- ""
- ],
- "tooltip": true,
- "on-click": "kitty --start-as=fullscreen --title all_is_kitty sh -c 'btop'",
- "interval": 2
- },
- "disk": {
- "format": " {percentage_used}% ({free})",
- "tooltip": true,
- "on-click": "kitty --start-as=fullscreen --title all_is_kitty sh -c 'btop'",
- "interval": 2
- },
- "custom/updates": {
- "format": "{}",
- "exec": "~/.scripts/updates",
- "on-click": "~/.scripts/updates update",
- "interval": 300,
- "tooltip": true,
- // "tooltip-format": "{}",
- // "exec-tooltip": "~/.scripts/updates tooltip"
- },
- "custom/music": {
- "format": "{icon}{}",
- "format-icons": {
- // "Playing": " ", // Uncomment if not using the dynamic script
- "Paused": " ",
- "Stopped": "&#x202d;ﭥ " // This stop symbol is RTL. So &#x202d; is left-to-right override.
- },
- "escape": true,
- "tooltip": true,
- "exec": "~/.scripts/caway -b 10",
- "return-type": "json",
- "on-click": "playerctl play-pause",
- "on-scroll-up": "playerctl previous",
- "on-scroll-down": "playerctl next",
- "on-click-right": "g4music",
- "max-length": 35
- },
- "hyprland/window": {
- "format": "{}",
- "separate-outputs": true,
- "max-length": 35
- },
- "network": {
- // "interface": "wlp2*", // (Optional) To force the use of this interface
- "format": "↕{bandwidthTotalBytes}",
- "format-disconnected": "{icon} No Internet",
- "format-linked": " {ifname} (No IP)",
- "format-alt": "↕{bandwidthUpBytes} | ↕{bandwidthDownBytes}",
- "tooltip-format": "{ifname}: {ipaddr}/{cidr}  {gwaddr}",
- "tooltip-format-wifi": "{icon} {essid} ({signalStrength}%)",
- "tooltip-format-ethernet": "{icon} {ipaddr}/{cidr}",
- "tooltip-format-disconnected": "{icon} Disconnected",
- "on-click-right": "nm-connection-editor",
- "format-icons": {
- "ethernet": "",
- "disconnected": "⚠",
- "wifi": [
- "睊",
- "直"
- ]
- },
- "interval": 2
- },
- "pulseaudio": {
- // "scroll-step": 1, // %, can be a float
- "format": "{icon} {volume}%", // {format_source}
- "format-bluetooth": "{icon} {volume}%", // {format_source}
- "format-bluetooth-muted": "", // {format_source}
- "format-muted": "", // {format_source}
- "format-source": "{volume}% ",
- "format-source-muted": "",
- "format-icons": {
- "headphone": "",
- "headset": "",
- "phone": "",
- "portable": "",
- "car": " ",
- "default": [
- "",
- "",
- ""
- ]
- },
- "on-click": "pavucontrol"
- },
- "backlight": {
- // "device": "acpi_video1",
- "format": "{icon} {percent}%",
- "format-icons": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- ""
- ],
- "on-scroll-up": "light -A 1",
- "on-scroll-down": "light -U 1",
- "interval": 2
- },
- "battery": {
- "states": {
- "good": 100,
- "warning": 30,
- "critical": 10
- },
- "format": "{icon} {capacity}%",
- "format-charging": " {capacity}%",
- "format-plugged": " {capacity}%",
- "format-alt": "{icon} {time}",
- // "format-good": "", // An empty format will hide the module
- "format-full": " {capacity}%",
- "format-icons": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- ""
- ],
- "interval": 2
- },
- "custom/notifications": {
- "tooltip": false,
- "format": "{icon}",
- "format-icons": {
- "notification": "<span foreground='red'><sup></sup></span>",
- "none": "",
- "dnd-notification": "<span foreground='red'><sup></sup></span>",
- "dnd-none": ""
- },
- "return-type": "json",
- "exec-if": "which swaync-client",
- "exec": "swaync-client -swb",
- "on-click": "swaync-client -t -sw",
- "on-click-right": "swaync-client -d -sw",
- "escape": true
- },
- "tray": {
- "icon-size": 15,
- "spacing": 15
- },
- "clock": {
- "timezone": "Asia/Calcutta",
- "format": " {:%d <small>%a</small> %H:%M}",
- //"format": " {:%a %b %d %Y | %H:%M}",
- "format-alt": " {:%A %B %d %Y (%V) | %r}",
- "tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
- "calendar-weeks-pos": "right",
- "today-format": "<span color='#f38ba8'><b><u>{}</u></b></span>",
- "format-calendar": "<span color='#f2cdcd'><b>{}</b></span>",
- "format-calendar-weeks": "<span color='#94e2d5'><b>W{:%U}</b></span>",
- "format-calendar-weekdays": "<span color='#f9e2af'><b>{}</b></span>",
- "interval": 60
- },
- "idle_inhibitor": {
- "format": "{icon}",
- "format-icons": {
- "activated": "",
- "deactivated": ""
- }
- },
- "custom/weather": {
- "tooltip": true,
- "format": "{}",
- "exec": "~/.scripts/tools/expand weather",
- "return-type": "json"
- },
- "custom/ss": {
- "format": "{}",
- "exec": "~/./scripts/tools/expand ss-icon",
- "return-type": "json",
- "on-click": "~/.scripts/screenshot_full"
- },
- "custom/cycle_wall": {
- "format": "{}",
- "exec": "~/.scripts/tools/expand wall",
- "return-type": "json",
- // "interval": 1,
- "on-click": "~/.scripts/tools/expand cycle",
- "on-click-right": "~/.scripts/tools/expand cycler"
- },
- "custom/clipboard": {
- "format": "{}",
- "exec": "~/.scripts/tools/expand clipboard",
- "return-type": "json",
- // Here "-l top_right -x -15 -y 10" doesn't matter as '-n' mode is used
- // Window position is managed in Hyperland config's windowrulev2
- "on-click": "pkill wofi || cliphist list | wofi --dmenu -p clippick -l top_right -x -15 -y 10 -n | cliphist decode | wl-copy",
- "on-click-middle": "rm -f ~/.cache/cliphist/db",
- "on-click-right": "pkill wofi || cliphist list | wofi --dmenu -p clippick -l top_right -x -15 -y 10 -n | cliphist delete",
- "escape": true
- },
- "custom/power": {
- "format": "{}",
- "exec": "~/.scripts/tools/expand power",
- "return-type": "json",
- "on-click": "~/.config/wlogout/launch.sh"
- },
- "custom/custom": {
- "format": "{}",
- "exec": "~/.scripts/tools/expand arrow-icon",
- "on-click": "~/.scripts/tools/expand_toolbar",
- "return-type": "json"
- }
-}
diff --git a/.config/waybar/style.css b/.config/waybar/style.css
deleted file mode 100644
index 348bb04..0000000
--- a/.config/waybar/style.css
+++ /dev/null
@@ -1,434 +0,0 @@
-/*
-@import "catppuccin/mocha.css";
-*/
-
-/*
-* Catppuccin Mocha palette
-*/
-
-@define-color base #1e1e2e;
-@define-color mantle #181825;
-@define-color crust #11111b;
-
-@define-color text #cdd6f4;
-@define-color subtext0 #a6adc8;
-@define-color subtext1 #bac2de;
-
-@define-color surface0 rgba(22, 25, 37, 0.9);
-@define-color surface1 #45475a;
-@define-color surface2 #585b70;
-@define-color surface3 #394161;
-
-@define-color overlay0 #6c7086;
-@define-color overlay1 #7f849c;
-@define-color overlay2 #9ba3c3;
-
-@define-color blue #89b4fa;
-@define-color lavender #b4befe;
-@define-color sapphire #74c7ec;
-@define-color sky #89dceb;
-@define-color teal #94e2d5;
-@define-color green #a6e3a1;
-@define-color yellow #f9e2af;
-@define-color peach #fab387;
-@define-color maroon #eba0ac;
-@define-color red #f38ba8;
-@define-color mauve #cba6f7;
-@define-color pink #f5c2e7;
-@define-color flamingo #f2cdcd;
-@define-color rosewater #f5e0dc;
-
-/* =============================== */
-/* Universal Styling */
-* {
- border: none;
- border-radius: 0;
- font-family: 'CaskaydiaCove Nerd Font', monospace;
- font-size: 13px;
- min-height: 0;
-}
-
-/* =============================== */
-
-
-/* =============================== */
-/* Bar Styling */
-#waybar {
- background: transparent;
- color: @text;
-}
-
-/* =============================== */
-
-
-/* =============================== */
-/* Main Modules */
-#custom-launcher,
-#workspaces,
-#window,
-#tray,
-#backlight,
-#clock,
-#battery,
-#pulseaudio,
-#network,
-#mpd,
-#cpu,
-#memory,
-#disk,
-#temperature,
-#custom-music,
-#custom-updates,
-#custom-nordvpn,
-#custom-notifications,
-#custom-power,
-#custom-custom,
-#custom-cycle_wall,
-#custom-clipboard,
-#custom-ss,
-#custom-weather {
- background-color: @surface0;
- color: @text;
- border-radius: 16px;
- padding: 0.5rem 1rem;
- box-shadow: rgba(0, 0, 0, 0.116) 2px 2px 5px 2px;
- margin-top: 10px;
- /*
- margin-bottom: 10px;
-*/
- margin-right: 10px;
-}
-
-/* =============================== */
-/* Launcher Module */
-#custom-launcher {
- color: @green;
- padding-top: 0px;
- padding-bottom: 0px;
- padding-right: 10px;
-}
-
-/* =============================== */
-/* Workspaces */
-#workspaces {
- padding-left: 8px;
- padding-right: 8px;
-}
-
-#workspaces * {
- font-size: 0px;
-}
-
-#workspaces button {
- background-color: @surface3;
- color: @mauve;
- border-radius: 100%;
- min-height: 14px;
- min-width: 14px;
- margin: 5px 8px;
- padding: 0px;
- /*transition: all 0.5s cubic-bezier(0.33, 1.0, 0.68, 1.0); easeInOutCubic */
- transition: all 0.5s cubic-bezier(.55, -0.68, .48, 1.68);
- box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px;
-}
-
-#workspaces button.active {
- /*color: @surface0;
- border-radius: 1rem;
- padding: 0rem 10px;*/
- background: radial-gradient(circle, rgba(203, 166, 247, 1) 0%, rgba(193, 168, 247, 1) 12%, rgba(249, 226, 175, 1) 19%, rgba(189, 169, 247, 1) 20%, rgba(182, 171, 247, 1) 24%, rgba(198, 255, 194, 1) 36%, rgba(177, 172, 247, 1) 37%, rgba(170, 173, 248, 1) 48%, rgba(255, 255, 255, 1) 52%, rgba(166, 174, 248, 1) 52%, rgba(160, 175, 248, 1) 59%, rgba(148, 226, 213, 1) 66%, rgba(155, 176, 248, 1) 67%, rgba(152, 177, 248, 1) 68%, rgba(205, 214, 244, 1) 77%, rgba(148, 178, 249, 1) 78%, rgba(144, 179, 250, 1) 82%, rgba(180, 190, 254, 1) 83%, rgba(141, 179, 250, 1) 90%, rgba(137, 180, 250, 1) 100%);
- background-size: 400% 400%;
- animation: gradient_f 20s ease-in-out infinite;
- transition: all 0.3s cubic-bezier(.55, -0.68, .48, 1.682);
-}
-
-#workspaces button:hover {
- background-color: @mauve;
-}
-
-@keyframes gradient {
- 0% {
- background-position: 0% 50%;
- }
-
- 50% {
- background-position: 100% 30%;
- }
-
- 100% {
- background-position: 0% 50%;
- }
-}
-
-@keyframes gradient_f {
- 0% {
- background-position: 0% 200%;
- }
-
- 50% {
- background-position: 200% 0%;
- }
-
- 100% {
- background-position: 400% 200%;
- }
-}
-
-@keyframes gradient_f_nh {
- 0% {
- background-position: 0% 200%;
- }
-
- 100% {
- background-position: 200% 200%;
- }
-}
-
-/* =============================== */
-
-
-/* =============================== */
-/* System Monitoring Modules */
-#cpu,
-#memory,
-#temperature {
- color: @blue;
-}
-
-#cpu {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- margin-right: 0px;
- padding-right: 5px;
-}
-
-#memory {
- border-radius: 0px;
- margin-right: 0px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-#temperature {
- border-radius: 0px;
- margin-right: 0px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-#disk {
- color: @peach;
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- padding-left: 5px;
- padding-right: 1rem;
-}
-
-/* Updates Module */
-#custom-updates {
- color: @sky;
-}
-
-/* =============================== */
-
-
-/* =============================== */
-/* Clock Module */
-#clock {
- color: @flamingo;
-}
-
-/* =============================== */
-
-
-#custom-music.low {
- background: rgb(148, 226, 213);
- background: linear-gradient(52deg, rgba(148, 226, 213, 1) 0%, rgba(137, 220, 235, 1) 19%, rgba(116, 199, 236, 1) 43%, rgba(137, 180, 250, 1) 56%, rgba(180, 190, 254, 1) 80%, rgba(186, 187, 241, 1) 100%);
- background-size: 300% 300%;
- text-shadow: 0px 0px 5px rgba(0, 0, 0, 0.377);
- animation: gradient 15s ease infinite;
- font-weight: bold;
- color: #fff;
-}
-
-#custom-music.random {
- background: rgb(148, 226, 213);
- background: radial-gradient(circle, rgba(148, 226, 213, 1) 0%, rgba(156, 227, 191, 1) 21%, rgba(249, 226, 175, 1) 34%, rgba(158, 227, 186, 1) 35%, rgba(163, 227, 169, 1) 59%, rgba(148, 226, 213, 1) 74%, rgba(164, 227, 167, 1) 74%, rgba(166, 227, 161, 1) 100%);
- background-size: 400% 400%;
- animation: gradient_f 4s ease infinite;
- text-shadow: 0px 0px 5px rgba(0, 0, 0, 0.377);
- font-weight: bold;
- color: #fff;
-}
-
-#custom-music.critical {
- background: rgb(235, 160, 172);
- background: linear-gradient(52deg, rgba(235, 160, 172, 1) 0%, rgba(243, 139, 168, 1) 30%, rgba(231, 130, 132, 1) 48%, rgba(250, 179, 135, 1) 77%, rgba(249, 226, 175, 1) 100%);
- background-size: 300% 300%;
- animation: gradient 15s cubic-bezier(.55, -0.68, .48, 1.68) infinite;
- text-shadow: 0px 0px 5px rgba(0, 0, 0, 0.377);
- font-weight: bold;
- color: #fff;
-}
-
-#custom-music.Playing {
- background: rgb(137, 180, 250);
- background: radial-gradient(circle, rgba(137, 180, 250, 120) 0%, rgba(142, 179, 250, 120) 6%, rgba(148, 226, 213, 1) 14%, rgba(147, 178, 250, 1) 14%, rgba(155, 176, 249, 1) 18%, rgba(245, 194, 231, 1) 28%, rgba(158, 175, 249, 1) 28%, rgba(181, 170, 248, 1) 58%, rgba(205, 214, 244, 1) 69%, rgba(186, 169, 248, 1) 69%, rgba(195, 167, 247, 1) 72%, rgba(137, 220, 235, 1) 73%, rgba(198, 167, 247, 1) 78%, rgba(203, 166, 247, 1) 100%);
- background-size: 400% 400%;
- animation: gradient_f 9s cubic-bezier(.72, .39, .21, 1) infinite;
- text-shadow: 0px 0px 5px rgba(0, 0, 0, 0.377);
- font-weight: bold;
- color: #fff;
-}
-
-#custom-music.Paused,
-#custom-music.Stopped {
- background: @surface0;
-}
-
-
-/* =============================== */
-/* Music/PlayerCTL Module */
-#custom-music {
- color: @mauve;
-}
-
-/* =============================== */
-
-
-/* =============================== */
-/* Network Module */
-#network {
- color: @blue;
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- margin-right: 0px;
- padding-right: 5px;
-}
-
-/* =============================== */
-
-
-/* =============================== */
-/* PulseAudio Module */
-#pulseaudio {
- color: @mauve;
- border-radius: 0;
- margin-right: 0px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-/* =============================== */
-
-
-/* =============================== */
-/* Backlight Module */
-#backlight {
- color: @teal;
- border-radius: 0;
- margin-right: 0px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-/* =============================== */
-
-
-/* =============================== */
-/* Battery Module */
-#battery {
- color: @green;
- border-radius: 0;
- margin-right: 0px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-#battery.charging {
- color: @green;
-}
-
-#battery.warning:not(.charging) {
- color: @maroon;
-}
-
-#battery.critical:not(.charging) {
- color: @red;
- animation-name: blink;
- animation-duration: 1s;
- animation-timing-function: linear;
- animation-iteration-count: infinite;
- animation-direction: alternate;
-}
-
-@keyframes blink {
- to {
- background: @red;
- color: @surface1;
- }
-}
-
-/* =============================== */
-
-/* Notifications Module */
-#custom-notifications {
- color: @mauve;
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- padding-left: 5px;
- padding-right: 1.25rem;
-}
-
-
-/* =============================== */
-/* Tray Module */
-#tray {
- color: @mauve;
- padding-right: 1.25rem;
-}
-
-/* =============================== */
-
-
-/* =============================== */
-/* | Custom Modules | */
-/* =============================== */
-#custom-custom {
- color: @peach;
- padding-right: 1.25rem;
- margin-right: 0px;
-}
-
-/* Screenshot */
-#custom-ss {
- color: @mauve;
- padding-right: 1.5rem;
-}
-
-/* Wallpaper */
-#custom-cycle_wall {
- background: linear-gradient(45deg, rgba(245, 194, 231, 1) 0%, rgba(203, 166, 247, 1) 0%, rgba(243, 139, 168, 1) 13%, rgba(235, 160, 172, 1) 26%, rgba(250, 179, 135, 1) 34%, rgba(249, 226, 175, 1) 49%, rgba(166, 227, 161, 1) 65%, rgba(148, 226, 213, 1) 77%, rgba(137, 220, 235, 1) 82%, rgba(116, 199, 236, 1) 88%, rgba(137, 180, 250, 1) 95%);
- background-size: 500% 500%;
- animation: gradient 7s linear infinite;
-}
-
-/* Notifications Module */
-#custom-clipboard {
- color: @mauve;
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- margin-right: 0px;
- padding-right: 8px;
-}
-
-/* Powermenu Module */
-#custom-power {
- color: @mauve;
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- padding-left: 8px;
- padding-right: 1.20rem;
-}
-
-/* =============================== */
diff --git a/.config/wezterm/wezterm.lua b/.config/wezterm/wezterm.lua
deleted file mode 100644
index 4f4bd07..0000000
--- a/.config/wezterm/wezterm.lua
+++ /dev/null
@@ -1,206 +0,0 @@
-local wezterm = require("wezterm")
-
----- Function to unset Ctrl+C keybinding
---local function unsetCtrlCKeybinding(window)
--- local keys = window:get_config().keys
--- for i, key in ipairs(keys) do
--- if key.key == 'c' and key.mods == 'CTRL' then
--- table.remove(keys, i)
--- break
--- end
--- end
--- window:set_config({ keys = keys })
---end
---
----- Event handler to unset Ctrl+C keybinding when using nvim
---wezterm.on("spawn_command", function(window, pane)
--- local cmd = pane:get_command()
--- if cmd and cmd[1] == "nvim" then
--- unsetCtrlCKeybinding(window)
--- end
---end)
-
---local function isNvimRunning(window)
--- local pane = window.active_pane
--- local cmd = pane:get_command()
--- return cmd and cmd[1] == "nvim"
---end
---
----- Function to modify keybindings based on the current program
---local function updateKeybindings(window)
--- local isNvim = isNvimRunning(window)
---
--- local keys = {}
--- if not isNvim then
--- -- Add the default Ctrl+C keybinding
--- keys = {
--- {
--- key = "c",
--- mods = "CTRL",
--- action = wezterm.action{CopyTo = "ClipboardAndPrimarySelection"}
--- }
--- }
--- end
---
--- window:set_config({
--- keys = keys
--- })
---end
---
----- Event handler to update keybindings when the active program changes
---wezterm.on("update-right-status", function(window)
--- updateKeybindings(window)
---end)
-
-wezterm.on("toggle-opacity", function(window)
- local overrides = window:get_config_overrides() or {}
- if not overrides.window_background_opacity then
- overrides.window_background_opacity = 1.0
- elseif overrides.window_background_opacity == 1.0 then
- overrides.window_background_opacity = 0.6
- else
- overrides.window_background_opacity = nil
- end
- window:set_config_overrides(overrides)
-end)
-
-return {
- front_end = "OpenGL",
- --font = wezterm.font 'JetBrains Mono',
- font = wezterm.font_with_fallback({
- {
- family = "JetBrains Mono",
- --intensity = 'Normal',
- weight = "Medium",
- italic = false,
- harfbuzz_features = { "calt=0", "clig=0", "liga=0" },
- },
- { family = "Hack Nerd Font", weight = "Medium" },
- {
- family = "Fira Code",
- harfbuzz_features = { "zero" },
- },
- { family = "Terminus", weight = "Bold" },
- "Noto Color Emoji",
- }),
- font_size = 9,
- warn_about_missing_glyphs = false,
- adjust_window_size_when_changing_font_size = false,
- line_height = 1.0,
- --dpi = 96.0,
- -- Keybinds
- disable_default_key_bindings = true,
- use_dead_keys = false,
- mouse_bindings = {
- -- Ctrl-click will open the link under the mouse cursor
- {
- event = { Up = { streak = 1, button = "Left" } },
- mods = "CTRL",
- action = wezterm.action.OpenLinkAtMouseCursor,
- },
- },
- keys = {
- --leader = { key = 'a', mods = 'CTRL', timeout_milliseconds = 1000 },
- {
- key = "O",
- mods = "CTRL|SHIFT",
- action = wezterm.action({ EmitEvent = "toggle-opacity" }),
- },
- { key = "R", mods = "CTRL", action = "ReloadConfiguration" },
- { key = "Y", mods = "CTRL", action = "ShowDebugOverlay" },
- {
- key = "-",
- mods = "CTRL",
- action = wezterm.action.DecreaseFontSize,
- },
- {
- key = "=",
- mods = "CTRL",
- action = wezterm.action.IncreaseFontSize,
- },
- {
- key = "0",
- mods = "CTRL",
- action = wezterm.action.ResetFontSize,
- },
- {
- key = "v",
- mods = "CTRL",
- action = wezterm.action({ PasteFrom = "Clipboard" }),
- },
- --{
- -- key = "c",
- -- mods = "CTRL",
- -- action = wezterm.action({ CopyTo = "ClipboardAndPrimarySelection" }),
- --},
- {
- key = "c",
- mods = "CTRL",
- action = wezterm.action_callback(function(window, pane)
- local has_selection = window:get_selection_text_for_pane(pane) ~= ""
- if has_selection then
- window:perform_action(wezterm.action({ CopyTo = "ClipboardAndPrimarySelection" }), pane)
- window:perform_action("ClearSelection", pane)
- else
- window:perform_action(wezterm.action({ SendKey = { key = "c", mods = "CTRL" } }), pane)
- end
- end),
- },
- },
- -- Aesthetic Night Colorscheme
- bold_brightens_ansi_colors = true,
- -- Padding
- window_padding = {
- left = 5,
- right = 5,
- top = 6,
- bottom = 4,
- },
- -- Cursor style
- --default_cursor_style = "BlinkingUnderline",
- default_cursor_style = "BlinkingBar",
- cursor_blink_rate = 700,
- -- needed to prevent 'easing' from using 40%+ cpu util ...
- --animation_fps = 1,
- force_reverse_video_cursor = true,
- colors = {
- cursor_bg = "white",
- compose_cursor = "orange",
- --cursor_border = 'white',
- },
-
- -- Tab Bar
- enable_tab_bar = false,
- --hide_tab_bar_if_only_one_tab = true,
- --show_tab_index_in_tab_bar = false,
- tab_bar_at_bottom = false,
-
- -- General
- -- X11
- enable_wayland = false,
- audible_bell = "Disabled",
-
- visual_bell = {
- fade_in_duration_ms = 5,
- fade_out_duration_ms = 5,
- target = "CursorColor",
- },
- automatically_reload_config = true,
- scrollback_lines = 3500,
- --inactive_pane_hsb = { saturation = 1.0, brightness = 1.0 },
- --text_background_opacity = 0.3,
- window_background_opacity = 0.8,
- --window_background_image = '/path/to/wallpaper.jpg',
- --window_background_image_hsb = {
- -- -- Darken the background image by reducing it to 1/3rd
- -- brightness = 0.3,
- -- -- You can adjust the hue by scaling its value.
- -- -- a multiplier of 1.0 leaves the value unchanged.
- -- hue = 1.0,
- -- -- You can adjust the saturation also.
- -- saturation = 1.0,
- --},
- window_close_confirmation = "NeverPrompt",
- --color_scheme = 'transparent',
- use_resize_increments = true,
-}
diff --git a/.config/windows-terminal/settings.json b/.config/windows-terminal/settings.json
deleted file mode 100644
index 71bf5bd..0000000
--- a/.config/windows-terminal/settings.json
+++ /dev/null
@@ -1,590 +0,0 @@
-{
- "$help": "https://aka.ms/terminal-documentation",
- "$schema": "https://aka.ms/terminal-profiles-schema",
- "actions":
- [
- { "command": "scrollDownPage", "keys": "ctrl+shift+pgdn" },
- { "command": "unbound", "keys": "ctrl+v" },
- { "command": "unbound", "keys": "ctrl+c" },
- { "command": { "action": "copy", "singleLine": false } },
- { "command": { "action": "scrollUp" }, "keys": "ctrl+shift+up" },
- { "command": "find", "keys": "ctrl+shift+f" },
- { "command": "paste" },
-
- { "command": { "action": "splitPane", "split": "vertical", "splitMode": "duplicate" }, "keys": "alt+shift+plus" },
- { "command": { "action": "splitPane", "split": "horizontal", "splitMode": "duplicate" }, "keys": "alt+shift+-" },
-
- { "command": { "action": "nextTab", "tabSwitcherMode": "mru" }, "keys": "ctrl+tab" },
- { "command": "openTabRenamer", "keys": "ctrl+shift+r" },
-
- { "command": { "action": "splitPane", "split": "auto", "splitMode": "duplicate" }, "keys": "alt+shift+d" },
- { "command": { "action": "scrollDown" }, "keys": "ctrl+shift+down" },
-
- { "command": "scrollUpPage", "keys": "ctrl+shift+pgup" },
-
- { "command": { "action": "moveFocus", "direction": "left" }, "keys": "alt+h" },
- { "command": { "action": "moveFocus", "direction": "down" }, "keys": "alt+j" },
- { "command": { "action": "moveFocus", "direction": "up" }, "keys": "alt+k" },
- { "command": { "action": "moveFocus", "direction": "right" }, "keys": "alt+l" },
-
- { "command": { "action": "resizePane", "direction": "left" }, "keys": "alt+shift+y" },
- { "command": { "action": "resizePane", "direction": "down" }, "keys": "alt+shift+u" },
- { "command": { "action": "resizePane", "direction": "up" }, "keys": "alt+shift+i" },
- { "command": { "action": "resizePane", "direction": "right" }, "keys": "alt+shift+o" },
-
- { "command": { "action": "swapPane", "direction": "left" }, "keys": "alt+shift+h" },
- { "command": { "action": "swapPane", "direction": "down" }, "keys": "alt+shift+j" },
- { "command": { "action": "swapPane", "direction": "up" }, "keys": "alt+shift+k" },
- { "command": { "action": "swapPane", "direction": "right" }, "keys": "alt+shift+l" },
-
- { "command": "togglePaneZoom", "keys": "alt+f" }
- ],
- "copyFormatting": "none",
- "copyOnSelect": false,
- "defaultProfile": "{f19ccc1d-fe9a-4e79-ad18-49276786d144}",
- "launchMode": "default",
- "profiles":
- {
- "defaults":
- {
- "backgroundImage": null,
- "colorScheme": "Gruvbox Dark",
- "font":
- {
- "face": "CaskaydiaCove NF"
- },
- "historySize": 9001,
- "opacity": 100,
- "padding": "0",
- "snapOnInput": false,
- "useAcrylic": false,
- "closeOnExit":"graceful",
- "intenseTextStyle": "all"
- },
- "list":
- [
- {
- "backgroundImage": "C:\\Users\\srdusr\\wallpapers\\download3.jpg",
- "backgroundImageOpacity": 0.089999999999999997,
- "colorScheme": "Tokyo Night",
- "commandline": "C:\\Program Files\\PowerShell\\7\\pwsh.exe",
- "experimental.retroTerminalEffect": false,
- "font":
- {
- "face": "CaskaydiaCove NF"
- },
- "guid": "{f19ccc1d-fe9a-4e79-ad18-49276786d144}",
- "historySize": 99999,
- "icon": "ms-appx:///ProfileIcons/pwsh.png",
- "name": "PowerShell 7 - BG",
- "opacity": 100,
- "padding": "0",
- "scrollbarState": "visible",
- "startingDirectory": "%USERPROFILE%",
- "suppressApplicationTitle": false,
- "useAcrylic": false,
- "closeOnExit":"graceful",
- "intenseTextStyle": "all"
- },
- {
- "backgroundImage": "C:\\Users\\srdusr\\wallpapers\\photo-1533484306792-cf313c2b8ab0 (2).jpg",
- "backgroundImageOpacity": 0.19,
- "bellStyle": "taskbar",
- "colorScheme": "Tokyo Night",
- "font":
- {
- "face": "CaskaydiaCove NF"
- },
- "guid": "{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}",
- "hidden": false,
- "historySize": 99999,
- "name": "Ubuntu-20.04",
- "source": "Windows.Terminal.Wsl",
- "closeOnExit":"graceful",
- "intenseTextStyle": "all"
- },
- {
- "guid": "{f9ceaf27-504c-58d7-927c-d1d6a7ac7d3c}",
- "hidden": false,
- "backgroundImage": "C:\\Users\\srdusr\\wallpapers\\photo-1533484306792-cf313c2b8ab0 (2).jpg",
- "backgroundImageOpacity": 0.19,
- "name": "Ubuntu 22.04.1 LTS",
- "source": "CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc",
- "colorScheme": "Tokyo Night",
- "font":
- {
- "face": "CaskaydiaCove NF"
- },
- "closeOnExit":"graceful",
- "intenseTextStyle": "all"
- },
- {
- "font":
- {
- "face": "CaskaydiaCove NF"
- },
- "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
- "hidden": false,
- "historySize": 99999,
- "name": "PowerShell 7 - NO BG",
- "padding": "0",
- "source": "Windows.Terminal.PowershellCore",
- "suppressApplicationTitle": false,
- "useAcrylic": false,
- "closeOnExit":"graceful",
- "intenseTextStyle": "all"
- },
- {
- "font":
- {
- "face": "CaskaydiaCove NF"
- },
- "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
- "hidden": false,
- "historySize": 99999,
- "name": "Command Prompt",
- "closeOnExit":"graceful",
- "intenseTextStyle": "all"
- },
- {
- "font":
- {
- "face": "CaskaydiaCove NF"
- },
- "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
- "hidden": false,
- "historySize": 99999,
- "name": "PowerShell 5",
- "closeOnExit":"graceful",
- "intenseTextStyle": "all"
- },
- {
- "font":
- {
- "face": "CaskaydiaCove NF"
- },
- "guid": "{46ca431a-3a87-5fb3-83cd-11ececc031d2}",
- "hidden": false,
- "name": "Kali Linux",
- "source": "Windows.Terminal.Wsl",
- "closeOnExit":"graceful",
- "intenseTextStyle": "all"
- },
- {
- "font":
- {
- "face": "CaskaydiaCove NF"
- },
- "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
- "hidden": false,
- "historySize": 99999,
- "name": "Azure Cloud Shell",
- "source": "Windows.Terminal.Azure",
- "closeOnExit":"graceful",
- "intenseTextStyle": "all"
- },
- {
- "backgroundImage": null,
- "backgroundImageOpacity": 0.29999999999999999,
- "commandline": "C:\\GBox\\Applications\\Tools\\Applications\\Neovim\\nvim-win64\\0.6.0\\bin\\nvim.exe",
- "font":
- {
- "face": "CaskaydiaCove NF"
- },
- "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6102}",
- "hidden": false,
- "historySize": 99999,
- "name": "Neovim",
- "padding": "0",
- "useAcrylic": false,
- "closeOnExit":"graceful",
- "intenseTextStyle": "all"
- },
- {
- "guid": "{d701ea23-d39a-51a9-9966-855f1c8051f1}",
- "hidden": false,
- "name": "Developer Command Prompt for VS 2022 [Preview]",
- "source": "Windows.Terminal.VisualStudio",
- "closeOnExit":"graceful",
- "intenseTextStyle": "all"
- },
- {
- "guid": "{960e8c7a-d53d-5f77-ad6f-daf9dfeb597d}",
- "hidden": false,
- "name": "Developer PowerShell for VS 2022 [Preview]",
- "source": "Windows.Terminal.VisualStudio",
- "closeOnExit":"graceful",
- "intenseTextStyle": "all"
- },
- {
- "guid": "{fddd4872-371a-5869-85aa-657716af07fa}",
- "hidden": true,
- "name": "Developer Command Prompt for VS 2022",
- "source": "Windows.Terminal.VisualStudio",
- "closeOnExit":"graceful",
- "intenseTextStyle": "all"
- },
- {
- "guid": "{e1c4148c-0ee2-5cd8-802c-8a170e188519}",
- "hidden": true,
- "name": "Developer PowerShell for VS 2022",
- "source": "Windows.Terminal.VisualStudio",
- "closeOnExit":"graceful",
- "intenseTextStyle": "all"
- }
- ]
- },
- "schemes":
- [
- {
- "background": "#0C0C0C",
- "black": "#0C0C0C",
- "blue": "#0037DA",
- "brightBlack": "#767676",
- "brightBlue": "#3B78FF",
- "brightCyan": "#61D6D6",
- "brightGreen": "#16C60C",
- "brightPurple": "#B4009E",
- "brightRed": "#E74856",
- "brightWhite": "#F2F2F2",
- "brightYellow": "#F9F1A5",
- "cursorColor": "#FFFFFF",
- "cyan": "#3A96DD",
- "foreground": "#CCCCCC",
- "green": "#13A10E",
- "name": "Campbell",
- "purple": "#881798",
- "red": "#C50F1F",
- "selectionBackground": "#FFFFFF",
- "white": "#CCCCCC",
- "yellow": "#C19C00"
- },
- {
- "background": "#012456",
- "black": "#0C0C0C",
- "blue": "#0037DA",
- "brightBlack": "#767676",
- "brightBlue": "#3B78FF",
- "brightCyan": "#61D6D6",
- "brightGreen": "#16C60C",
- "brightPurple": "#B4009E",
- "brightRed": "#E74856",
- "brightWhite": "#F2F2F2",
- "brightYellow": "#F9F1A5",
- "cursorColor": "#FFFFFF",
- "cyan": "#3A96DD",
- "foreground": "#CCCCCC",
- "green": "#13A10E",
- "name": "Campbell Powershell",
- "purple": "#881798",
- "red": "#C50F1F",
- "selectionBackground": "#FFFFFF",
- "white": "#CCCCCC",
- "yellow": "#C19C00"
- },
- {
- "background": "#282828",
- "black": "#282828",
- "blue": "#458588",
- "brightBlack": "#928374",
- "brightBlue": "#83A598",
- "brightCyan": "#8EC07C",
- "brightGreen": "#B8BB26",
- "brightPurple": "#D3869B",
- "brightRed": "#FB4934",
- "brightWhite": "#EBDBB2",
- "brightYellow": "#FABD2F",
- "cursorColor": "#FFFFFF",
- "cyan": "#689D6A",
- "foreground": "#EBDBB2",
- "green": "#98971A",
- "name": "Gruvbox Dark",
- "purple": "#B16286",
- "red": "#CC241D",
- "selectionBackground": "#FFFFFF",
- "white": "#A89984",
- "yellow": "#D79921"
- },
- {
- "background": "#282C34",
- "black": "#282C34",
- "blue": "#61AFEF",
- "brightBlack": "#5A6374",
- "brightBlue": "#61AFEF",
- "brightCyan": "#56B6C2",
- "brightGreen": "#98C379",
- "brightPurple": "#C678DD",
- "brightRed": "#E06C75",
- "brightWhite": "#DCDFE4",
- "brightYellow": "#E5C07B",
- "cursorColor": "#FFFFFF",
- "cyan": "#56B6C2",
- "foreground": "#DCDFE4",
- "green": "#98C379",
- "name": "One Half Dark",
- "purple": "#C678DD",
- "red": "#E06C75",
- "selectionBackground": "#FFFFFF",
- "white": "#DCDFE4",
- "yellow": "#E5C07B"
- },
- {
- "background": "#282C34",
- "black": "#282C34",
- "blue": "#61AFEF",
- "brightBlack": "#282C34",
- "brightBlue": "#61AFEF",
- "brightCyan": "#56B6C2",
- "brightGreen": "#98C379",
- "brightPurple": "#C678DD",
- "brightRed": "#E06C75",
- "brightWhite": "#DCDFE4",
- "brightYellow": "#E5C07B",
- "cursorColor": "#FFFFFF",
- "cyan": "#56B6C2",
- "foreground": "#DCDFE4",
- "green": "#98C379",
- "name": "One Half Dark2",
- "purple": "#C678DD",
- "red": "#E06C75",
- "selectionBackground": "#FFFFFF",
- "white": "#DCDFE4",
- "yellow": "#E5C07B"
- },
- {
- "background": "#FAFAFA",
- "black": "#383A42",
- "blue": "#0184BC",
- "brightBlack": "#4F525D",
- "brightBlue": "#61AFEF",
- "brightCyan": "#56B5C1",
- "brightGreen": "#98C379",
- "brightPurple": "#C577DD",
- "brightRed": "#DF6C75",
- "brightWhite": "#FFFFFF",
- "brightYellow": "#E4C07A",
- "cursorColor": "#4F525D",
- "cyan": "#0997B3",
- "foreground": "#383A42",
- "green": "#50A14F",
- "name": "One Half Light",
- "purple": "#A626A4",
- "red": "#E45649",
- "selectionBackground": "#FFFFFF",
- "white": "#FAFAFA",
- "yellow": "#C18301"
- },
- {
- "background": "#FAFAFA",
- "black": "#383A42",
- "blue": "#0184BC",
- "brightBlack": "#383A42",
- "brightBlue": "#0184BC",
- "brightCyan": "#0997B3",
- "brightGreen": "#50A14F",
- "brightPurple": "#A626A4",
- "brightRed": "#E45649",
- "brightWhite": "#FAFAFA",
- "brightYellow": "#C18401",
- "cursorColor": "#FFFFFF",
- "cyan": "#0997B3",
- "foreground": "#383A42",
- "green": "#50A14F",
- "name": "One Half Light2",
- "purple": "#A626A4",
- "red": "#E45649",
- "selectionBackground": "#FFFFFF",
- "white": "#FAFAFA",
- "yellow": "#C18401"
- },
- {
- "background": "#002B36",
- "black": "#002B36",
- "blue": "#268BD2",
- "brightBlack": "#073642",
- "brightBlue": "#839496",
- "brightCyan": "#93A1A1",
- "brightGreen": "#586E75",
- "brightPurple": "#6C71C4",
- "brightRed": "#CB4B16",
- "brightWhite": "#FDF6E3",
- "brightYellow": "#657B83",
- "cursorColor": "#FFFFFF",
- "cyan": "#2AA198",
- "foreground": "#839496",
- "green": "#859900",
- "name": "Solarized Dark",
- "purple": "#D33682",
- "red": "#DC322F",
- "selectionBackground": "#FFFFFF",
- "white": "#EEE8D5",
- "yellow": "#B58900"
- },
- {
- "background": "#001E27",
- "black": "#002831",
- "blue": "#2176C7",
- "brightBlack": "#475B62",
- "brightBlue": "#708284",
- "brightCyan": "#819090",
- "brightGreen": "#475B62",
- "brightPurple": "#5956BA",
- "brightRed": "#BD3613",
- "brightWhite": "#FCF4DC",
- "brightYellow": "#536870",
- "cursorColor": "#FFFFFF",
- "cyan": "#259286",
- "foreground": "#708284",
- "green": "#738A05",
- "name": "Solarized Dark - Patched",
- "purple": "#C61C6F",
- "red": "#D11C24",
- "selectionBackground": "#FFFFFF",
- "white": "#EAE3CB",
- "yellow": "#A57706"
- },
- {
- "background": "#FDF6E3",
- "black": "#002B36",
- "blue": "#268BD2",
- "brightBlack": "#073642",
- "brightBlue": "#839496",
- "brightCyan": "#93A1A1",
- "brightGreen": "#586E75",
- "brightPurple": "#6C71C4",
- "brightRed": "#CB4B16",
- "brightWhite": "#FDF6E3",
- "brightYellow": "#657B83",
- "cursorColor": "#002B36",
- "cyan": "#2AA198",
- "foreground": "#657B83",
- "green": "#859900",
- "name": "Solarized Light",
- "purple": "#D33682",
- "red": "#DC322F",
- "selectionBackground": "#FFFFFF",
- "white": "#EEE8D5",
- "yellow": "#B58900"
- },
- {
- "background": "#000000",
- "black": "#000000",
- "blue": "#3465A4",
- "brightBlack": "#555753",
- "brightBlue": "#729FCF",
- "brightCyan": "#34E2E2",
- "brightGreen": "#8AE234",
- "brightPurple": "#AD7FA8",
- "brightRed": "#EF2929",
- "brightWhite": "#EEEEEC",
- "brightYellow": "#FCE94F",
- "cursorColor": "#FFFFFF",
- "cyan": "#06989A",
- "foreground": "#D3D7CF",
- "green": "#4E9A06",
- "name": "Tango Dark",
- "purple": "#75507B",
- "red": "#CC0000",
- "selectionBackground": "#FFFFFF",
- "white": "#D3D7CF",
- "yellow": "#C4A000"
- },
- {
- "background": "#FFFFFF",
- "black": "#000000",
- "blue": "#3465A4",
- "brightBlack": "#555753",
- "brightBlue": "#729FCF",
- "brightCyan": "#34E2E2",
- "brightGreen": "#8AE234",
- "brightPurple": "#AD7FA8",
- "brightRed": "#EF2929",
- "brightWhite": "#EEEEEC",
- "brightYellow": "#FCE94F",
- "cursorColor": "#000000",
- "cyan": "#06989A",
- "foreground": "#555753",
- "green": "#4E9A06",
- "name": "Tango Light",
- "purple": "#75507B",
- "red": "#CC0000",
- "selectionBackground": "#FFFFFF",
- "white": "#D3D7CF",
- "yellow": "#C4A000"
- },
- {
- "background": "#1A1B2C",
- "black": "#414868",
- "blue": "#7AA2F7",
- "brightBlack": "#414868",
- "brightBlue": "#7AA2F7",
- "brightCyan": "#7DCFFF",
- "brightGreen": "#73DACA",
- "brightPurple": "#BB9AF7",
- "brightRed": "#F7768E",
- "brightWhite": "#C0CAF5",
- "brightYellow": "#E0AF68",
- "cursorColor": "#C0CAF5",
- "cyan": "#7DCFFF",
- "foreground": "#A9B1DC",
- "green": "#73DACA",
- "name": "Tokyo Night",
- "purple": "#BB9AF7",
- "red": "#F7768E",
- "selectionBackground": "#28344A",
- "white": "#C0CAF5",
- "yellow": "#E0AF68"
- },
- {
- "background": "#24283B",
- "black": "#414868",
- "blue": "#7AA2F7",
- "brightBlack": "#414868",
- "brightBlue": "#7AA2F7",
- "brightCyan": "#7DCFFF",
- "brightGreen": "#73DACA",
- "brightPurple": "#BB9AF7",
- "brightRed": "#F7768E",
- "brightWhite": "#C0CAF5",
- "brightYellow": "#E0AF68",
- "cursorColor": "#C0CAF5",
- "cyan": "#7DCFFF",
- "foreground": "#A9B1DC",
- "green": "#73DACA",
- "name": "Tokyo Night Storm",
- "purple": "#BB9AF7",
- "red": "#F7768E",
- "selectionBackground": "#28344A",
- "white": "#C0CAF5",
- "yellow": "#E0AF68"
- },
- {
- "background": "#000000",
- "black": "#000000",
- "blue": "#000080",
- "brightBlack": "#808080",
- "brightBlue": "#0000FF",
- "brightCyan": "#00FFFF",
- "brightGreen": "#00FF00",
- "brightPurple": "#FF00FF",
- "brightRed": "#FF0000",
- "brightWhite": "#FFFFFF",
- "brightYellow": "#FFFF00",
- "cursorColor": "#FFFFFF",
- "cyan": "#008080",
- "foreground": "#C0C0C0",
- "green": "#008000",
- "name": "Vintage",
- "purple": "#800080",
- "red": "#800000",
- "selectionBackground": "#FFFFFF",
- "white": "#C0C0C0",
- "yellow": "#808000"
- }
- ],
- "showTabsInTitlebar": true,
- "showTerminalTitleInTitlebar": true,
- "tabWidthMode": "titleLength",
- "trimBlockSelection": true,
- "useAcrylicInTabRow": false
-}
diff --git a/.config/wofi/config b/.config/wofi/config
deleted file mode 100644
index d1ea4c8..0000000
--- a/.config/wofi/config
+++ /dev/null
@@ -1,17 +0,0 @@
-width=420
-height=550
-location=center
-show=drun
-matching=fuzzy
-prompt=Search...
-filter_rate=100
-allow_markup=true
-no_actions=true
-halign=fill
-orientation=vertical
-content_halign=fill
-insensitive=true
-allow_images=true
-image_size=28
-gtk_dark=false
-term=kitty
diff --git a/.config/wofi/style.css b/.config/wofi/style.css
deleted file mode 100644
index 6fb5107..0000000
--- a/.config/wofi/style.css
+++ /dev/null
@@ -1,99 +0,0 @@
-* {
- transition: 0.2s;
-}
-
-window {
- font-family: "FiraCode Nerd Font Mono";
- font-size: 13px;
-}
-
-window {
- margin: 0px;
- border: 2px solid #cba6f7;
-/*
- background-color: #161925;
-*/
- background-color: transparent;
- border-radius: 16px;
-}
-
-#input {
- padding: 4px;
- margin: 20px;
- padding-left: 20px;
- border: none;
- color: #fff;
- font-weight: bold;
- background: linear-gradient(90deg, #cba6f7 0%, #94e2d5 100%);
- outline: none;
- border-radius: 16px;
-}
-
-#input image {
- color: #fff;
-}
-
-#input:focus {
- border: none;
- outline: none;
-}
-
-#inner-box {
- margin: 20px;
- margin-top: 0px;
- border: none;
- color: #cba6f7;
- border-radius: 16px;
-}
-
-#inner-box * {
- transition: none;
-}
-
-#outer-box {
- margin: 0px;
- border: none;
- padding: 0px;
- border-radius: 16px;
-}
-
-#scroll {
- margin-top: 5px;
- border: none;
- border-radius: 16px;
- margin-bottom: 5px;
-}
-
-#text:selected {
- color: #fff;
- font-weight: bold;
-}
-
-#img {
- margin-right: 20px;
- background: transparent;
-}
-
-#text {
- margin: 0px;
- border: none;
- padding: 0px;
- background: transparent;
-}
-
-#entry {
- margin: 0px;
- border: none;
- border-radius: 16px;
- background-color: transparent;
- min-height:32px;
- font-weight: bold;
-}
-
-#entry:selected {
- outline: none;
- margin: 0px;
- border: none;
- border-radius: 16px;
- background: linear-gradient(90deg, #cba6f7 0%, #94e2d5 100%);
-}
diff --git a/.config/xkb/symbols/custom-us b/.config/xkb/symbols/custom-us
deleted file mode 100644
index 9faa2e9..0000000
--- a/.config/xkb/symbols/custom-us
+++ /dev/null
@@ -1,27 +0,0 @@
-// Clear existing modifiers
-//default partial modifier_keys
-partial alphanumeric_keys
-xkb_symbols "basic" {
- include "us(basic)"
-
- // Define a custom modifier (Mode_switch)
- modifier_map Mod5 { <MDSW> };
-
- // Remap Caps Lock to AltGr (ISO_Level3_Shift) and clear other modifiers
- key <CAPS> {
- type[Group1] = "ONE_LEVEL",
- symbols[Group1] = [ ISO_Level3_Shift ],
- actions[Group1] = [ SetMods(modifiers=Mod5) ]
- };
-
- // Remap h, j, k, l to arrow keys when Mode_switch is active and clear other modifiers
- key <AC06> { [ h, H, Left ] };
- key <AC07> { [ j, J, Down ] };
- key <AC08> { [ k, K, Up ] };
- key <AC09> { [ l, L, Right ] };
-
- key <AD02> { [ w, W, Up ] };
- key <AC01> { [ a, A, Left ] };
- key <AC02> { [ s, S, Down ] };
- key <AC03> { [ d, D, Right ] };
-};
diff --git a/.config/xob/launch.sh b/.config/xob/launch.sh
deleted file mode 100755
index 46d4861..0000000
--- a/.config/xob/launch.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-killall -q xob
-pkill -f manage-volume
-pkill -f manage-brightness
-pkill -f manage-microphone
-
-"$HOME"/.config/xob/manage-volume | xob -s default &
-"$HOME"/.config/xob/manage-brightness | xob -s default &
-"$HOME"/.config/xob/manage-microphone | xob -s default &
diff --git a/.config/xob/manage-brightness b/.config/xob/manage-brightness
deleted file mode 100755
index 496900f..0000000
--- a/.config/xob/manage-brightness
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/node
-
-const fs = require('fs')
-const { exec } = require("child_process");
-
-let device = "intel_backlight";
-
-brightnessFile = `/sys/class/backlight/${device}/brightness`;
-maxBrightnessFile = `/sys/class/backlight/${device}/max_brightness`;
-
-maxValue = parseInt(fs.readFileSync(maxBrightnessFile, 'utf8'));
-
-fs.watch(brightnessFile, () => {
- value = parseInt(fs.readFileSync(brightnessFile, 'utf8'));
- console.log(Math.round(value / maxValue * 100));
-})
diff --git a/.config/xob/manage-microphone b/.config/xob/manage-microphone
deleted file mode 100755
index 3bf5972..0000000
--- a/.config/xob/manage-microphone
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/env python3
-
-import sys
-
-from pulsectl import Pulse, PulseLoopStop
-
-
-def callback(ev):
- if ev.index == source_index:
- raise PulseLoopStop
-
-
-def current_status(source):
- return round(source.volume.value_flat * 100), source.mute == 1
-
-
-def get_default_source_idx():
- default_source_name = pulse.server_info().default_source_name
- try:
- source_index = next(index for index, source in sources.items()
- if source.name == default_source_name)
- return source_index
- except StopIteration:
- raise StopIteration("No default source was found.")
-
-
-try:
- with Pulse() as pulse:
- sources = {s.index: s for s in pulse.source_list()}
-
- if len(sys.argv) > 1:
- # Source index from command line argument if provided
- source_index = int(sys.argv[1])
- if source_index not in sources:
- raise KeyError(
- f"Source index {source_index} not found in list of sources."
- )
- else:
- # Automatic determination of default source otherwise
- source_index = get_default_source_idx()
-
- pulse.event_mask_set('source')
- pulse.event_callback_set(callback)
- last_value, last_mute = current_status(sources[source_index])
-
- while True:
- pulse.event_listen()
- sources = {s.index: s for s in pulse.source_list()}
- value, mute = current_status(sources[source_index])
- if value != last_value or mute != last_mute:
- print(str(value) + ('!' if mute else ''))
- last_value, last_mute = value, mute
- sys.stdout.flush()
-
-except Exception as e:
- print(f"ERROR: {e}", file=sys.stderr)
diff --git a/.config/xob/manage-volume b/.config/xob/manage-volume
deleted file mode 100755
index d05a92f..0000000
--- a/.config/xob/manage-volume
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env python3
-
-from pulsectl import Pulse, PulseLoopStop
-import sys
-
-with Pulse() as pulse:
- while True:
- def callback(ev):
- if ev.index == sink_index: raise PulseLoopStop
-
- def current_status(sink):
- return round(sink.volume.value_flat * 100), sink.mute == 1
-
- def get_default_sink_idx():
- default_sink_name = pulse.server_info().default_sink_name
- try:
- sink_index = next(index for index,sink in sinks.items() if sink.name == default_sink_name)
- return sink_index
- except StopIteration: raise StopIteration("No default sink was found.")
-
- try:
- sinks = {s.index:s for s in pulse.sink_list()}
- if len(sys.argv) > 1:
- # Sink index from command line argument if provided
- sink_index = int(sys.argv[1])
- if not sink_index in sinks:
- raise KeyError(f"Sink index {sink_index} not found in list of sinks.")
- else:
- # Automatic determination of default sink otherwise
- sink_index = get_default_sink_idx()
-
- pulse.event_mask_set('sink')
- pulse.event_callback_set(callback)
- last_value, last_mute = current_status(sinks[sink_index])
-
- while True:
- pulse.event_listen()
- sinks = {s.index:s for s in pulse.sink_list()}
- value, mute = current_status(sinks[sink_index])
- if value != last_value or mute != last_mute:
- print(str(value) + ('!' if mute else ''))
- last_value, last_mute = value, mute
- sys.stdout.flush()
-
- except Exception as e:
- print(f"ERROR: {e}", file=sys.stderr)
diff --git a/.config/xob/styles.cfg b/.config/xob/styles.cfg
deleted file mode 100644
index d236ff8..0000000
--- a/.config/xob/styles.cfg
+++ /dev/null
@@ -1,100 +0,0 @@
-#vol = {
-# x = {relative = 1 ;offset = 88}
-# y = {relative = 0 ;offset = 32}
-# length = {relative = 0; offset = 0;};
-# padding = 0;
-# border = 0;
-# outline = 0;
-# thickness = 20;
-# orientation = "vertical"
-# color = {
-# normal = {
-# fg = "#ffffff";
-# bg = "#000000";
-# border = "#ffffff";
-# };
-# alt = {
-# fg = "#dc322f";
-# bg = "#000000";
-# border = "#dc322f";
-# };
-# overflow = {
-# fg = "#555555";
-# bg = "#000000";
-# border = "#555555";
-# };
-# altoverflow = {
-# fg = "#550000";
-# bg = "#000000";
-# border = "#550000";
-# };
-# };
-#};
-#
-#brightness = {
-# x = {relative = 1 ;offset = 88}
-# y = {relative = 0 ;offset = 88}
-# length = {relative = 0; offset = 0;};
-# padding = 0;
-# border = 0;
-# outline = 0;
-# thickness = 20;
-# orientation = "vertical"
-# color = {
-# normal = {
-# fg = "#ffffff";
-# bg = "#000000";
-# border = "#ffffff";
-# };
-# alt = {
-# fg = "#dc322f";
-# bg = "#000000";
-# border = "#dc322f";
-# };
-# overflow = {
-# fg = "#555555";
-# bg = "#000000";
-# border = "#555555";
-# };
-# altoverflow = {
-# fg = "#550000";
-# bg = "#000000";
-# border = "#550000";
-# };
-# };
-#};
-default = {
- x = {relative = 1; offset = -48;};
- y = {relative = 0.5; offset = 0;};
- length = {relative = 0.3; offset = 0;};
- thickness = 24;
- outline = 3;
- border = 4;
- padding = 3;
- orientation = "vertical";
-
- overflow = "proportional";
-
- color = {
- normal = {
- fg = "#ffffff";
- bg = "#00000090";
- border = "#ffffff";
- };
- alt = {
- fg = "#555555";
- bg = "#00000090";
- border = "#555555";
- };
- overflow = {
- fg = "#ff0000";
- bg = "#00000090";
- border = "#ff0000";
- };
- altoverflow = {
- fg = "#550000";
- bg = "#00000090";
- border = "#550000";
- };
- };
-};
diff --git a/.config/zathura/zathurarc b/.config/zathura/zathurarc
deleted file mode 100644
index 78d66a1..0000000
--- a/.config/zathura/zathurarc
+++ /dev/null
@@ -1,27 +0,0 @@
-set window-title-basename "true"
-
-
-
-
-# Basic Settings
-
-set highlight-transparency .1
-set zoom-center "true"
-set selection-clipboard "clipboard"
-set render-loading "false"
-set pages-per-row 1
-set scroll-page-aware "true"
-set scroll-full-overlap 0.01
-set scroll-step 50
-set zoom-min 10
-set guioptions ""
-set render-loading "false"
-
-
-# Startup options
-set adjust-open "best-fit"
-set recolor true
-
-# Side by side view (view 2 pages like an open book)
-map D set "first-page-column 1:1"
-map <C-d> set "first-page-column 1:2"
diff --git a/.config/zsh/.zshenv b/.config/zsh/.zshenv
deleted file mode 100644
index 1d6eee9..0000000
--- a/.config/zsh/.zshenv
+++ /dev/null
@@ -1,348 +0,0 @@
-# Load local/system wide binaries and scripts
-export PATH=$HOME/.bin:$HOME/.local/bin:$HOME/.scripts:$HOME/.scripts/test:/usr/local/bin:/sbin:/usr/sbin:$PATH
-export PATH="/data/data/com.termux/files/usr/local/bin:$PATH"
-
-if [ -d "$HOME/.scripts" ]; then
- for d in "$HOME/.scripts"/*; do
- [ -d "$d" ] && PATH="$PATH:$d"
- done
-fi
-
-#export PATH
-
-export TERM=xterm-256color
-# Skip the not really helpful global compinit
-skip_global_compinit=1
-
-#export WINEARCH=win64 #<or win32>
-#export WINEPREFIX=~/.wine
-#export PATH=$PATH:/usr/bin/wine
-#winetricks vcrun2019
-### Conditionally set WM(window manager)
-#available_wms=("bspwm" "mutter" "i3")
-#for wm in "${available_wms[@]}"; do
-# if command -v "$wm" &> /dev/null; then
-# export WM="$wm"
-# break
-# fi
-#done
-
-## Set a flag to indicate if the display server type is found
-#display_server_found=0
-#
-## Conditionally set Display server
-#available_displays=("wayland" "x11")
-#for display in "${available_displays[@]}"; do
-# if [ "$WAYLAND_DISPLAY" = "$display" ]; then
-# export XDG_SESSION_TYPE="$display"
-# display_server_found=1
-# break
-# fi
-#done
-#
-## Check if XDG_SESSION_TYPE is "x11" and set X11-specific variables
-#if [ "$display_server_found" -eq 1 ] && [ "$XDG_SESSION_TYPE" == "x11" ]; then
-# # X11-specific variables
-# export XINITRC="$HOME/.config/X11/.xinitrc"
-# export XSERVERRC="$XDG_CONFIG_HOME/X11/xserverrc"
-# export USERXSESSION="$XDG_CONFIG_HOME/X11/xsession"
-# export USERXSESSIONRC="$XDG_CONFIG_HOME/X11/xsessionrc"
-# export ALTUSERXSESSION="$XDG_CONFIG_HOME/X11/Xsession"
-# export ERRFILE="$XDG_CONFIG_HOME/X11/xsession-errors"
-# export ICEAUTHORITY="$XDG_CACHE_HOME/.ICEauthority"
-#fi
-
-# Conditionally set default term
-available_terms=("wezterm" "alacritty" "xterm")
-for term in "${available_terms[@]}"; do
- if command -v "$term" &> /dev/null; then
- export TERMINAL="$term"
- break
- fi
-done
-
-# Default Programs:
-export EDITOR=$(command -v nvim || echo "vim")
-#if command -v nvim &> /dev/null; then
-# export EDITOR=nvim
-#else
-# export EDITOR=vim
-#fi
-export VISUAL=$EDITOR
-export GIT_EDITOR="$EDITOR"
-export COLORTERM="truecolor"
-export TERM="xterm-256color"
-export READER="zathura"
-export BROWSER="firefox"
-export OPENER="xdg-open"
-#export MANPAGER="$EDITOR +Man!"
-#if [ "$EDITOR" = "nvim" ]; then
-if command -v nvim &> /dev/null; then
- #export MANPAGER="sh -c 'col -b | nvim -c \"set ft=man ts=8 nomod nolist nonu noma\" -c \"autocmd VimEnter * call feedkeys(\\\"q\\\")\" -'"
- export MANPAGER="sh -c 'col -b | nvim -c \"set ft=man ts=8 nomod nolist nonu noma\" -c \"autocmd VimEnter * call feedkeys(\\\"\\<CR>q\\\")\" -'"
- #export MANPAGER="$nvim --clean -n -i NONE -u NORC -c 'colorscheme desert' -c 'highlight Normal ctermbg=NONE guibg=NONE' +Man\!"
-else
- export MANPAGER="bat"
- #export MANPAGER="less -R --use-color -Dd+r -Du+b"
- #export MANPAGER="sh -c 'col -bx | bat -l man -p --pager \"less -R\"'"
-fi
-export MANROFFOPT="-c"
-export PAGER="less"
-export SUDO_ASKPASS=/usr/lib/ssh/x11-ssh-askpass
-export FAQ_STYLE='github'
-export VIDEO="mpv"
-export IMAGE="phototonic"
-
-# XDG Paths:
-export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-$HOME/.config}
-export XDG_DATA_HOME=${XDG_DATA_HOME:-$HOME/.local/share}
-export XDG_CACHE_HOME=${XDG_CACHE_HOME:-$HOME/.cache}
-export INPUTRC="${XDG_CONFIG_HOME:-$HOME/.config}/inputrc"
-export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
-export HISTFILE="$ZDOTDIR/.zhistory" # History filepath
-export HISTSIZE=1000000 # Maximum events for internal history
-export SAVEHIST=1000000 # Maximum events in history file
-export BANG_HIST # Treat the '!' character specially during expansion.
-export EXTENDED_HISTORY # Write the history file in the ":start:elapsed;command" format.
-export INC_APPEND_HISTORY # Write to the history file immediately, not when the shell exits.
-export SHARE_HISTORY # Share history between all sessions.
-export HIST_EXPIRE_DUPS_FIRST # Expire duplicate entries first when trimming history.
-export HIST_IGNORE_DUPS # Don't record an entry that was just recorded again.
-export HIST_IGNORE_ALL_DUPS # Delete old recorded entry if new entry is a duplicate.
-export HIST_FIND_NO_DUPS # Do not display a line previously found.
-export HIST_IGNORE_SPACE # Don't record an entry starting with a space.
-export HIST_SAVE_NO_DUPS # Don't write duplicate entries in the history file.
-export HIST_REDUCE_BLANKS # Remove superfluous blanks before recording entry.
-export HIST_VERIFY # Don't execute immediately upon history expansion.
-export HIST_BEEP # Beep when accessing nonexistent history.
-export INC_APPEND_HISTORY
-
-# Customize `ls` colours
-export LSCOLORS=ExGxBxDxCxEgEdxbxgxcxd
-
-# Other XDG paths:
-export RIPGREP_CONFIG_PATH="$XDG_CONFIG_HOME/ripgrep/ripgreprc"
-export DOCKER_CONFIG="$XDG_CONFIG_HOME/docker"
-export VSCODE_PORTABLE="$XDG_DATA_HOME/vscode"
-export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc"
-export PATH="/usr/bin/cmake:$PATH"
-export PATH=$PATH:/opt/google/chrome
-export DISCORD_USER_DATA_DIR="$XDG_DATA_HOME"
-export LYNX_CFG="$XDG_CONFIG_HOME/.lynxrc"
-
-# Manage Arch linux build sources
-export ASPROOT="${XDG_CACHE_HOME:-$HOME/.cache}/asp"
-
-# Homebrew
-#export PATH=/opt/homebrew/bin:$PATH
-export PATH="/opt/homebrew/sbin:$PATH"
-
-# Nix-profile
-export PATH=$HOME/.nix-profile/bin:$PATH
-
-# GnuPG
-export GPG_TTY=$(tty)
-#export GNUPGHOME="$XDG_CONFIG_HOME/gnupg"
-
-# Nvim
-export NVIM_TUI_ENABLE_TRUE_COLOR=1
-
-# Fzf
-export FZF_DEFAULT_COMMAND="rg --files --hidden --glob '!{node_modules/*,.git/*}'"
-export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
-export FZF_DEFAULT_OPTS='-m --height 50% --border'
-
-
-# enable git scripts
-export DEVELOPMENT_DIRECTORY="$HOME/code"
-
-# Android Home
-export ANDROID_HOME=/opt/android-sdk
-export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$PATH
-#export PATH=$ANDROID_HOME/cmdline-tools/bin:$PATH
-export PATH=$ANDROID_HOME/tools:$PATH
-export PATH=$ANDROID_HOME/tools/bin:$PATH
-export PATH=$ANDROID_HOME/platform-tools:$PATH
-# Android emulator PATH
-export PATH=$ANDROID_HOME/emulator:$PATH
-# Android SDK ROOT PATH
-export ANDROID_SDK_ROOT=/opt/android-sdk
-export PATH=$ANDROID_SDK_ROOT:$PATH
-#export ANDROID_SDK_HOME="${XDG_CONFIG_HOME:-$HOME/.config}/android"
-
-# Programming Environment Variables:
-
-# Rust
-export RUSTUP_HOME=${XDG_DATA_HOME:-$HOME/.local/share}/rustup
-export CARGO_HOME=${XDG_DATA_HOME:-$HOME/.local/share}/cargo
-export PATH="${CARGO_HOME}/bin:${RUSTUP_HOME}/bin:$PATH"
-#export PATH="$PATH:$CARGO_HOME/bin"
-#[[ -d $CARGO_HOME/bin ]] && path=($CARGO_HOME/bin $path)
-if which rustc > /dev/null; then export RUST_BACKTRACE=1; fi
-#export PATH="$HOME/.cargo/bin:$PATH"
-#export CARGO_HOME=${XDG_DATA_HOME}/cargo
-#export RUSTUP_HOME=${XDG_DATA_HOME}/rustup
-
-
-# Dotnet
-# # Currently dotnet does not support XDG ( https://github.com/dotnet/sdk/issues/10390 )
-#export DOTNET_TOOLS_DIR="$HOME/.dotnet/tools"
-export DOTNET_HOME=${XDG_DATA_HOME:-$HOME/.local/share}/dotnet
-export DOTNET_CLI_HOME="$XDG_CONFIG_HOME/dotnet"
-#mkdir -p "$DOTNET_CLI_HOME";
-export PATH="$PATH":"$DOTNET_HOME"/tools
-export DOTNET_ROOT=/opt/dotnet
-# Disable telemetry for dotnet apps
-export DOTNET_CLI_TELEMETRY_OPTOUT=1
-
-
-# Java
-#export JAVA_HOME=/usr/lib/jvm/default-java
-#export JAVA_HOME='/usr/lib/jvm/java-8-openjdk'
-#export JAVA_HOME='/usr/lib/jvm/java-10-openjdk'
-#export JAVA_HOME='/usr/lib/jvm/java-11-openjdk'
-#export JAVA_HOME='/usr/lib/jvm/java-17-openjdk'
-export JAVA_HOME='/usr/lib/jvm/java-20-openjdk'
-#export PATH=$JAVA_HOME/bin:$PATH
-export _JAVA_OPTIONS=-Djava.util.prefs.userRoot="$XDG_CONFIG_HOME"/java
-#export DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions'
-#export _JAVA_AWT_WM_NONREPARENTING=1
-#export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
-#export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.xml.bind'
-#Windows:
-#set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee
-
-
-# Dart/Flutter
-export PATH="/opt/flutter/bin:/usr/lib/dart/bin:$PATH"
-
-
-# Go
-export GO_PATH=${XDG_DATA_HOME}/go
-export GOPATH="${XDG_DATA_HOME:-$HOME/.local/share}/go"
-
-
-# Javascript
-# NVM
-export NVM_DIR="$HOME/.config/nvm"
-[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
-#[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
-
-# global node installs (gross)
-[[ -d "$XDG_DATA_HOME/node/bin" ]] && path=($XDG_DATA_HOME/node/bin $path)
-export NODE_REPL_HISTORY="$XDG_DATA_HOME"/node_repl_history
-export NPM_CONFIG_USERCONFIG=$XDG_CONFIG_HOME/npm/npmrc
-#export NPM_CONFIG_INIT_AUTHOR_NAME='srdusr'
-#export NPM_CONFIG_INIT_AUTHOR_EMAIL='trevorgray@srdusr.com'
-#export NPM_CONFIG_INIT_AUTHOR_URL='https://srdusr.com'
-#export NPM_CONFIG_INIT_LICENSE='GPL-3.0'
-#export NPM_CONFIG_INIT_VERSION='0.0.0'
-#export NPM_CONFIG_SIGN_GIT_TAG='true'
-
-# Yarn
-#if command -v yarn >/dev/null 2>&1; then
-# export PATH="$PATH:`yarn global bin`"
-#fi
-#export PATH="$(yarn global bin):$PATH"
-#YARN_PATH="$HOME/.yarn/bin"
-#YARN_BIN_EXPORT="$HOME/.config/yarn/global/node_modules/.bin"
-
-# Ruby
-export GEM_PATH="$XDG_DATA_HOME/ruby/gems"
-export GEM_SPEC_CACHE="$XDG_DATA_HOME/ruby/specs"
-export GEM_HOME="$XDG_DATA_HOME/ruby/gems"
-#if [[ -d ~/.gem/ruby ]]; then
-# ver=$(find ~/.gem/ruby/* -maxdepth 0 | sort -rV | head -n 1)
-# export PATH="$PATH:${ver}/bin"
-#fi
-
-
-# Python
-# lazy load pyenv
-#export PYENV_ROOT=${PYENV_ROOT:-$HOME/.pyenv}
-#[[ -a $PYENV_ROOT/bin/pyenv ]] && path=($PYENV_ROOT/bin $path)
-#if type pyenv &> /dev/null || [[ -a $PYENV_ROOT/bin/pyenv ]]; then
-# function pyenv() {
-# unset pyenv
-# path=($PYENV_ROOT/shims $path)
-# eval "$(command pyenv init -)"
-# if which pyenv-virtualenv-init > /dev/null; then
-# eval "$(pyenv virtualenv-init -)"
-# export PYENV_VIRTUALENV_DISABLE_PROMPT=1
-# fi
-# pyenv $@
-# }
-#fi
-#export WORKON_HOME="$XDG_DATA_HOME/virtualenvs"
-export WORKON_HOME=$HOME/.virtualenvs
-export VIRTUALENVWRAPPER_PYTHON=`which python3`
-export VIRTUALENVWRAPPER_VIRTUALENV=`which virtualenv`
-#source /usr/local/bin/virtualenvwrapper.sh
-source $(which virtualenvwrapper.sh)
-export VIRTUAL_ENV_DISABLE_PROMPT=false
-export JUPYTER_CONFIG_DIR="$XDG_CONFIG_HOME/jupyter"
-export IPYTHONDIR="$XDG_CONFIG_HOME/jupyter"
-
-# Python
-[[ "$(uname)" == "Darwin" ]] && export PYTHON_CONFIGURE_OPTS="--enable-framework"
-[[ "$(uname)" == "Linux" ]] && export PYTHON_CONFIGURE_OPTS="--enable-shared"
-
-export PYENV_ROOT="$HOME/.pyenv"
-export PATH="$PYENV_ROOT/bin:$PATH"
-
-# PHP
-PATH="$HOME/.config/composer/vendor/bin:$PATH"
-
-
-# Lua
-export PATH=$PATH:/usr/local/luarocks/bin
-#export PATH="$XDG_DATA_HOME/luarocks/bin:$PATH"
-
-#ver=$(find lua* -maxdepth 0 | sort -rV | head -n 1)
-#export LUA_PATH="$LUA_PATH:${ver}/share/lua/5.1/?.lua;${ver}/share/lua/5.1/?/init.lua;;"
-#export LUA_CPATH="$LUA_CPATH:${ver}/lib/lua/5.1/?.so;;"
-
-#LUAROCKS_PREFIX=/usr/local
-#export LUA_PATH="$LUAROCKS_PREFIX/share/lua/5.1/?.lua;$LUAROCKS_PREFIX/share/lua/5.1/?/init.lua;;"
-#export LUA_CPATH="$LUAROCKS_PREFIX/lib/lua/5.1/?.so;;"
-
-#export LUA_PATH="<path-to-add>;;"
-#export LUA_CPATH="./?.so;/usr/local/lib/lua/5.3/?.so;
-# /usr/local/share/lua/5.3/?.so;<path-to-add>"
-
-
-# Program settings
-#export MOZ_USE_XINPUT2="1" # Mozilla smooth scrolling/touchpads.
-# Pixel-perfect Firefox touchpad scrolling
-export MOZ_USE_XINPUT2=1
-
-
-# Scaling
-#export QT_AUTO_SCREEN_SCALE_FACTOR=0
-#export QT_SCALE_FACTOR=1
-#export QT_SCREEN_SCALE_FACTORS="1;1;1"
-#export GDK_SCALE=1
-#export GDK_DPI_SCALE=1
-
-
-#typeset -U PATH path
-export GTK_IM_MODULE='fcitx'
-export QT_IM_MODULE='fcitx'
-export SDL_IM_MODULE='fcitx'
-export XMODIFIERS='@im=fcitx'
-
-
-# Start blinking
-export LESS_TERMCAP_mb=$(tput bold; tput setaf 2) # green
-# Start bold
-export LESS_TERMCAP_md=$(tput bold; tput setaf 2) # green
-# Start stand out
-export LESS_TERMCAP_so=$(tput bold; tput setaf 3) # yellow
-# End standout
-export LESS_TERMCAP_se=$(tput rmso; tput sgr0)
-# Start underline
-export LESS_TERMCAP_us=$(tput smul; tput bold; tput setaf 1) # red
-# End Underline
-export LESS_TERMCAP_ue=$(tput sgr0)
-# End bold, blinking, standout, underline
-export LESS_TERMCAP_me=$(tput sgr0).
diff --git a/.config/zsh/.zshrc b/.config/zsh/.zshrc
deleted file mode 100644
index ececf24..0000000
--- a/.config/zsh/.zshrc
+++ /dev/null
@@ -1,63 +0,0 @@
-
-# ███████╗███████╗██╗ ██╗██████╗ ██████╗
-# ╚══███╔╝██╔════╝██║ ██║██╔══██╗██╔════╝
-# ███╔╝ ███████╗███████║██████╔╝██║
-# ███╔╝ ╚════██║██╔══██║██╔══██╗██║
-# ███████╗███████║██║ ██║██║ ██║╚██████╗
-# ╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝
-
-for zsh_source in "$HOME"/.config/zsh/user/*.zsh; do
- source $zsh_source
-done
-
-# If not running interactively, don't do anything
-[[ $- != *i* ]] && return
-
-if [[ -n "$SSH_CLIENT" ]]; then
- export KEYTIMEOUT=10
-else
- export KEYTIMEOUT=15
-fi
-
-# Tmux default session
-if command -v tmux &> /dev/null && [ -n "$PS1" ] && [ -z "$DISPLAY" ] && [ -z "$TMUX" ]; then
- if ! tmux list-sessions | grep -q '^tmux:'; then
- tmux new -s tmux
- fi
-fi
-
-# Enable various options
-setopt interactive_comments beep extendedglob nomatch notify completeinword prompt_subst
-
-# Some other useful functionalities
-setopt autocd # Automatically cd into typed directory.
-setopt AUTO_PUSHD # More history for cd and use "cd -TAB"
-stty intr '^q' # free Ctrl+C for copy use Ctrl+q instead
-stty lnext '^-' # free Ctrl+V for paste use ^- instead
-stty stop undef # Disable ctrl-s to freeze terminal.
-stty start undef
-#COMPLETION_WAITING_DOTS="false"
-#unsetopt BEEP
-
-########## Source Plugins, should be last ##########
-#source /usr/share/nvm/init-nvm.sh
-
-# Load fzf keybindings and completion if fzf is installed
-if command -v fzf > /dev/null 2>&1; then
- #FZF_BASE="/usr/share/fzf"
- FZF_BASE="/usr/local/bin/fzf/shell"
- source "${FZF_BASE}/key-bindings.zsh"
- source "${FZF_BASE}/completion.zsh"
-else
- echo "fzf not found, please install it to use fzf keybindings and completion."
-fi
-
-# Suggest aliases for commands
-source ~/.config/zsh/plugins/zsh-you-should-use/you-should-use.plugin.zsh
-
-# Load zsh-syntax-highlighting
-source ~/.config/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
-
-# Load fish like auto suggestions
-source ~/.config/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.plugin.zsh
-source ~/.config/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
diff --git a/.config/zsh/user/aliases.zsh b/.config/zsh/user/aliases.zsh
deleted file mode 100644
index df0c4af..0000000
--- a/.config/zsh/user/aliases.zsh
+++ /dev/null
@@ -1,129 +0,0 @@
-########## Aliases ##########
-
-### Dotfiles
-alias config='git --git-dir=$HOME/.cfg --work-tree=$HOME'
-cfg_files=$(config ls-tree --name-only -r HEAD)
-
-export CFG_FILES="$cfg_files"
-
-# Define alias for nvim/vim (fallback to vim)
-if command -v nvim > /dev/null; then
- alias vi='nvim'
-else
- alias vi='vim'
-fi
-
-# Confirmation #
-alias mv='mv -i'
-alias cp='cp -i'
-alias ln='ln -i'
-
-# Disable 'rm'
-alias rm='function _rm() { echo -e "\033[0;31mrm\033[0m is disabled, use \033[0;32mtrash\033[0m or \033[0;32mdel \033[0m\033[0;33m$1\033[0m"; }; _rm'
-alias del='/bin/rm'
-
-alias ls='lsd --color=auto --group-directories-first'
-#alias ls="ls --color=auto --group-directories-first"
-
-# ls variants
-alias l='ls -FAh --group-directories-first'
-alias la='ls -lAFh --group-directories-first'
-alias lt='ls -lFAht --group-directories-first'
-alias lr='ls -RFAh --group-directories-first'
-
-# more ls variants
-alias ldot='ls -ld .* --group-directories-first'
-alias lS='ls -1FASsh --group-directories-first'
-alias lart='ls -1Fcart --group-directories-first'
-alias lrt='ls -1Fcrt --group-directories-first'
-
-# ls with different alphabethical sorting
-#unalias ll
-#ll() { LC_COLLATE=C ls "$@" }
-
-# suffix aliases
-alias -g CP='| xclip -selection clipboard -rmlastnl'
-alias -g LL="| less"
-alias -g CA="| cat -A"
-alias -g KE="2>&1"
-alias -g NE="2>/dev/null"
-alias -g NUL=">/dev/null 2>&1"
-
-alias grep='grep --color=auto --exclude-dir={.git,.svn,.hg}'
-alias egrep='egrep --color=auto --exclude-dir={.git,.svn,.hg}'
-alias egrep='fgrep --color=auto --exclude-dir={.git,.svn,.hg}'
-
-alias gdb='gdb -q'
-alias rust-gdb='rust-gdb -q'
-
-# List upto last 10 visited directories using "d" and quickly cd into any specific one
-alias d="dirs -v | head -10"
-
-# Using just a number from "0" to "9"
-alias 0="cd +0"
-alias 1="cd +1"
-alias 2="cd +2"
-alias 3="cd +3"
-alias 4="cd +4"
-alias 5="cd +5"
-alias 6="cd +6"
-alias 7="cd +7"
-alias 8="cd +8"
-alias 9="cd +9"
-
-alias sudo='sudo ' # zsh: elligible for alias expansion/fix syntax highlight
-alias sedit='sudoedit'
-#alias se='sudoedit'
-alias se='sudo -e'
-alias :q='exit'
-alias sc="systemctl"
-alias jc="journalctl"
-alias jck="journalctl -k" # Kernel
-alias jce='sudo journalctl -b --priority 0..3' # error
-alias journalctl-error='sudo journalctl -b --priority 0..3'
-alias jcssh="sudo journalctl -u sshd"
-alias tunnel='ssh -fNTL'
-# tty aliases
-if [[ "$TERM" == 'linux' ]]; then
- alias tmux='/usr/bin/tmux -L linux'
-fi
-alias logout="loginctl kill-user $(whoami)"
-
-#alias suspend='systemctl suspend && betterlockscreen -l' # Suspend(sleep) and lock screen if using systemctl
-alias suspend='systemctl suspend' # Suspend(sleep) and lock screen if using systemctl
-alias hibernate='systemctl hibernate' # Hibernate
-alias lock='DISPLAY=:0 xautolock -locknow' # Lock my workstation screen from my phone
-alias oports="sudo lsof -i -P -n | grep -i 'listen'" # List open ports
-alias keyname="xev | sed -n 's/[ ]*state.* \([^ ]*\)).*/\1/p'"
-alias wget=wget --hsts-file="$XDG_CACHE_HOME/wget-hsts" # wget does not support environment variables
-alias pp='getlast 2>&1 |&tee -a output.txt'
-alias lg='la | grep'
-alias pg='ps aux | grep'
-alias py='python'
-alias py3='python3'
-alias sha256='shasum -a 256'
-alias rgf='rg -F'
-alias weather='curl wttr.in/durban'
-alias wifi='nmcli dev wifi show-password'
-alias ddg='w3m lite.duckduckgo.com'
-alias rss='newsboat'
-alias vpn='protonvpn'
-alias yt-dl="yt-dlp -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4' --restrict-filename"
-
-# Time aliases
-alias utc='TZ=Africa/Johannesburg date'
-alias ber='TZ=Europe/Berlin date'
-alias nyc='TZ=America/New_York date'
-alias sfo='TZ=America/Los_Angeles date'
-alias utc='TZ=Etc/UTC date'
-
-alias src='source ~/.zshrc'
-alias p=proxy
-
-alias cheat='~/.scripts/cheat.sh ~/documents/notes/cheatsheets'
-alias crypto='curl -s rate.sx | head -n -2 | tail -n +10'
-alias todo='glow "$HOME"/media/notes/_TODO.md'
-
-alias android-studio='/opt/android-studio/bin/studio.sh' # android-studio
-alias nomachine='/usr/NX/bin/nxplayer' # nomachine
-alias spotify='LD_PRELOAD=/usr/lib/spotify-adblock.so /bin/spotify %U'
diff --git a/.config/zsh/user/bindings.zsh b/.config/zsh/user/bindings.zsh
deleted file mode 100644
index ce8451b..0000000
--- a/.config/zsh/user/bindings.zsh
+++ /dev/null
@@ -1,39 +0,0 @@
-########## Vi mode ##########
-bindkey -v
-#bindkey -M viins '^?' backward-delete-char
-#local WORDCHARS='*?_-.[]~=&;!#$%^(){}<>'
-backward-kill-dir () {
- local WORDCHARS=${WORDCHARS/\/}
- zle backward-kill-word
- zle -f kill
-}
-zle -N backward-kill-dir
-bindkey '^[^?' backward-kill-dir
-bindkey "^W" backward-kill-dir
-bindkey -M viins '^[[3~' delete-char
-bindkey -M vicmd '^[[3~' delete-char
-bindkey -v '^?' backward-delete-char
-bindkey -r '\e/'
-bindkey -s jk '\e'
-#bindkey "^W" backward-kill-word
-bindkey "^H" backward-delete-char # Control-h also deletes the previous char
-bindkey "^U" backward-kill-line
-bindkey "^[j" history-search-forward # or you can bind it to the down key "^[[B"
-bindkey "^[k" history-search-backward # or you can bind it to Up key "^[[A"
-
-# Define the 'autosuggest-execute' and 'autosuggest-accept' ZLE widgets
-autoload -Uz autosuggest-execute autosuggest-accept
-zle -N autosuggest-execute
-zle -N autosuggest-accept
-bindkey '^X' autosuggest-execute
-bindkey '^Y' autosuggest-accept
-
-# Edit line in vim with alt-e
-autoload edit-command-line; zle -N edit-command-line
-bindkey '^e' edit-command-line
-bindkey '^[e' edit-command-line # alt + e
-
-# Allow CTRL+D to exit zsh with partial command line (non empty line)
-exit_zsh() { exit }
-zle -N exit_zsh
-bindkey '^D' exit_zsh
diff --git a/.config/zsh/user/completion.zsh b/.config/zsh/user/completion.zsh
deleted file mode 100644
index 7d9198a..0000000
--- a/.config/zsh/user/completion.zsh
+++ /dev/null
@@ -1,156 +0,0 @@
-#!/bin/zsh
-
-########## Completion(s) ##########
-
-autoload -Uz compinit
-_comp_path="${XDG_CACHE_HOME:-$HOME/.cache}/zcompdump"
-
-# Expands globs in conditional expressions
-if [[ $_comp_path(#qNmh-20) ]]; then
- # -C (skip function check) implies -i (skip security check).
- compinit -C -d "$_comp_path"
-else
- mkdir -p "$_comp_path:h"
- compinit -i -d "$_comp_path"
- # Keep $_comp_path younger than cache time even if it isn't regenerated.
- touch "$_comp_path"
-fi
-unset _comp_path
-
-# Accept completion with <tab> or Ctrl+i and go to next/previous suggestions with Vi like keys: Ctrl+n/p
-zmodload -i zsh/complist
-accept-and-complete-next-history() {
- zle expand-or-complete-prefix
-}
-zle -N accept-and-complete-next-history
-bindkey -M menuselect '^i' accept-and-complete-next-history
-bindkey '^n' expand-or-complete
-bindkey '^p' reverse-menu-complete
-bindkey -M menuselect '^[' undo
-
-#zstyle ':completion:*' menu select=1
-#zstyle ':completion:*:directory-stack' list-colors '=(#b) #([0-9]#)*( *)==95=38;5;12'
-
-# Options
-setopt COMPLETE_IN_WORD # Complete from both ends of a word.
-setopt ALWAYS_TO_END # Move cursor to the end of a completed word.
-setopt PATH_DIRS # Perform path search even on command names with slashes.
-setopt AUTO_MENU # Show completion menu on a successive tab press.
-setopt AUTO_LIST # Automatically list choices on ambiguous completion.
-setopt AUTO_PARAM_SLASH # If completed parameter is a directory, add a trailing slash.
-setopt EXTENDED_GLOB # Needed for file modification glob modifiers with compinit.
-unsetopt MENU_COMPLETE # Do not autoselect the first completion entry.
-
-# Variables
-LS_COLORS=${LS_COLORS:-'di=34:ln=35:so=32:pi=33:ex=31:bd=36;01:cd=33;01:su=31;40;07:sg=36;40;07:tw=32;40;07:ow=33;40;07:'}
-
-# Styles
-# Defaults.
-zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
-zstyle ':completion:*:default' list-prompt '%S%M matches%s'
-
-# Use caching to make completion for commands such as dpkg and apt usable.
-zstyle ':completion::complete:*' use-cache on
-zstyle ':completion::complete:*' cache-path "${XDG_CACHE_HOME:-$HOME/.cache}/zcompcache"
-
-
-# Group matches and describe.
-zstyle ':completion:*:*:*:*:*' menu select
-zstyle ':completion:*:matches' group 'yes'
-zstyle ':completion:*:options' description 'yes'
-zstyle ':completion:*:options' auto-description '%d'
-zstyle ':completion:*:corrections' format ' %F{green}-- %d (errors: %e) --%f'
-zstyle ':completion:*:descriptions' format ' %F{yellow}-- %d --%f'
-zstyle ':completion:*:messages' format ' %F{purple} -- %d --%f'
-zstyle ':completion:*:warnings' format ' %F{red}-- no matches found --%f'
-zstyle ':completion:*' format ' %F{yellow}-- %d --%f'
-zstyle ':completion:*' group-name ''
-zstyle ':completion:*' verbose yes
-
-# Fuzzy match mistyped completions.
-zstyle ':completion:*' completer _complete _match _approximate
-zstyle ':completion:*:match:*' original only
-zstyle ':completion:*:approximate:*' max-errors 1 numeric
-
-# Increase the number of errors based on the length of the typed word. But make
-# sure to cap (at 7) the max-errors to avoid hanging.
-zstyle -e ':completion:*:approximate:*' max-errors 'reply=($((($#PREFIX+$#SUFFIX)/3>7?7:($#PREFIX+$#SUFFIX)/3))numeric)'
-
-# Don't complete unavailable commands.
-zstyle ':completion:*:functions' ignored-patterns '(_*|pre(cmd|exec))'
-
-# Array completion element sorting.
-zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters
-
-# Directories
-zstyle ':completion:*:*:cd:*' tag-order local-directories directory-stack path-directories
-zstyle ':completion:*:*:cd:*:directory-stack' menu yes select
-zstyle ':completion:*:-tilde-:*' group-order 'named-directories' 'path-directories' 'users' 'expand'
-zstyle ':completion:*' squeeze-slashes true
-
-# History
-zstyle ':completion:*:history-words' stop yes
-zstyle ':completion:*:history-words' remove-all-dups yes
-zstyle ':completion:*:history-words' list false
-zstyle ':completion:*:history-words' menu yes
-
-# Environment Variables
-zstyle ':completion::*:(-command-|export):*' fake-parameters ${${${_comps[(I)-value-*]#*,}%%,*}:#-*-}
-
-# Populate hostname completion. But allow ignoring custom entries from static
-# */etc/hosts* which might be uninteresting.
-zstyle -a ':completion:*:hosts' etc-host-ignores '_etc_host_ignores'
-
-zstyle -e ':completion:*:hosts' hosts 'reply=(
- ${=${=${=${${(f)"$(cat {/etc/ssh/ssh_,~/.ssh/}known_hosts(|2)(N) 2> /dev/null)"}%%[#| ]*}//\]:[0-9]*/ }//,/ }//\[/ }
- ${=${(f)"$(cat /etc/hosts(|)(N) <<(ypcat hosts 2> /dev/null))"}%%(\#${_etc_host_ignores:+|${(j:|:)~_etc_host_ignores}})*}
- ${=${${${${(@M)${(f)"$(cat ~/.ssh/config 2> /dev/null)"}:#Host *}#Host }:#*\**}:#*\?*}}
-)'
-
-# Don't complete uninteresting users...
-zstyle ':completion:*:*:*:users' ignored-patterns \
- adm amanda apache avahi beaglidx bin cacti canna clamav daemon \
- dbus distcache dovecot fax ftp games gdm gkrellmd gopher \
- hacluster haldaemon halt hsqldb ident junkbust ldap lp mail \
- mailman mailnull mldonkey mysql nagios \
- named netdump news nfsnobody nobody nscd ntp nut nx openvpn \
- operator pcap postfix postgres privoxy pulse pvm quagga radvd \
- rpc rpcuser rpm shutdown squid sshd sync uucp vcsa xfs '_*'
-
-# ... unless we really want to.
-zstyle '*' single-ignored show
-
-# Ignore multiple entries.
-zstyle ':completion:*:(rm|kill|diff):*' ignore-line other
-zstyle ':completion:*:rm:*' file-patterns '*:all-files'
-
-# Kill
-zstyle ':completion:*:*:*:*:processes' command 'ps -u $LOGNAME -o pid,user,command -w'
-zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#) ([0-9a-z-]#)*=01;36=0=01'
-zstyle ':completion:*:*:kill:*' menu yes select
-zstyle ':completion:*:*:kill:*' force-list always
-zstyle ':completion:*:*:kill:*' insert-ids single
-
-# Man
-zstyle ':completion:*:manuals' separate-sections true
-zstyle ':completion:*:manuals.(^1*)' insert-sections true
-
-# Media Players
-zstyle ':completion:*:*:mpg123:*' file-patterns '*.(mp3|MP3):mp3\ files *(-/):directories'
-zstyle ':completion:*:*:mpg321:*' file-patterns '*.(mp3|MP3):mp3\ files *(-/):directories'
-zstyle ':completion:*:*:ogg123:*' file-patterns '*.(ogg|OGG|flac):ogg\ files *(-/):directories'
-zstyle ':completion:*:*:mocp:*' file-patterns '*.(wav|WAV|mp3|MP3|ogg|OGG|flac):ogg\ files *(-/):directories'
-
-# Mutt
-if [[ -s "$HOME/.mutt/aliases" ]]; then
- zstyle ':completion:*:*:mutt:*' menu yes select
- zstyle ':completion:*:mutt:*' users ${${${(f)"$(<"$HOME/.mutt/aliases")"}#alias[[:space:]]}%%[[:space:]]*}
-fi
-
-# SSH/SCP/RSYNC
-zstyle ':completion:*:(ssh|scp|rsync):*' tag-order 'hosts:-host:host hosts:-domain:domain hosts:-ipaddr:ip\ address *'
-zstyle ':completion:*:(scp|rsync):*' group-order users files all-files hosts-domain hosts-host hosts-ipaddr
-zstyle ':completion:*:ssh:*' group-order users hosts-domain hosts-host users hosts-ipaddr
-zstyle ':completion:*:(ssh|scp|rsync):*:hosts-host' ignored-patterns '*(.|:)*' loopback ip6-loopback localhost ip6-localhost broadcasthost
-zstyle ':completion:*:(ssh|scp|rsync):*:hosts-domain' ignored-patterns '<->.<->.<->.<->' '^[-[:alnum:]]##(.[-[:alnum:]]##)##' '*@*'
-zstyle ':completion:*:(ssh|scp|rsync):*:hosts-ipaddr' ignored-patterns '^(<->.<->.<->.<->|(|::)([[:xdigit:].]##:(#c,2))##(|%*))' '127.0.0.<->' '255.255.255.255' '::1' 'fe80::*'
diff --git a/.config/zsh/user/functions.zsh b/.config/zsh/user/functions.zsh
deleted file mode 100644
index 75032ba..0000000
--- a/.config/zsh/user/functions.zsh
+++ /dev/null
@@ -1,813 +0,0 @@
-## Function to temporarily unset GIT_WORK_TREE
-function git_without_work_tree() {
- # Only proceed if a git command is being run
- if [ "$1" = "git" ]; then
- shift
- # Check if the current directory is inside a Git work tree
- if git rev-parse --is-inside-work-tree &>/dev/null; then
- # If inside a work tree, temporarily unset GIT_WORK_TREE
- GIT_WORK_TREE_OLD="$GIT_WORK_TREE"
- unset GIT_WORK_TREE
- git "$@"
- export GIT_WORK_TREE="$GIT_WORK_TREE_OLD"
- else
- # If not inside a work tree, call git command directly
- git "$@"
- fi
- else
- # If it's not a git command, just execute it normally
- command "$@"
- fi
-}
-
-# Set alias conditionally
-alias git='git_without_work_tree git'
-
-# Set bare dotfiles repository git environment variables dynamically
-function set_git_env_vars() {
- # Check if the current command is a package manager command
- if [[ "${(%)${(z)history[1]}}" =~ ^(pacman|yay|apt|dnf|brew|npm|pip|gem|go|cargo) ]]; then
- return
- fi
- local git_dir="$(git rev-parse --git-dir -C . 2>/dev/null)"
- if [[ -n "$git_dir" ]]; then
- local is_bare="$(git -C "$git_dir" rev-parse --is-bare-repository 2>/dev/null)"
- if [[ "$is_bare" == "true" ]]; then
- export GIT_DIR="$HOME/.cfg"
- export GIT_WORK_TREE=$(realpath $(eval echo ~))
- else
- unset GIT_DIR
- unset GIT_WORK_TREE
- fi
- else
- local root_dir="$(git rev-parse --show-toplevel 2>/dev/null)"
- if [[ -n "$root_dir" ]]; then
- unset GIT_DIR
- export GIT_WORK_TREE="$root_dir"
- else
- export GIT_DIR="$HOME/.cfg"
- export GIT_WORK_TREE=$(realpath $(eval echo ~))
- fi
- fi
-}
-
-# Define an auto_cd hook to automatically update Git environment variables
-#function chpwd() {
-# set_git_env_vars
-#}
-# Call the function to set Git environment variables when the shell starts up
-set_git_env_vars
-
-
-function gsp() {
- # Config file for subtrees
- #
- # Format:
- # <prefix>;<remote address>;<remote branch>
- # # Lines starting with '#' will be ignored
- GIT_SUBTREE_FILE="$PWD/.gitsubtrees"
-
- if [ ! -f "$GIT_SUBTREE_FILE" ]; then
- echo "Nothing to do - file <$GIT_SUBTREE_FILE> does not exist."
- return
- fi
-
- if ! command -v config &> /dev/null; then
- echo "Error: 'config' command not found. Make sure it's available in your PATH."
- return
- fi
-
- OLD_IFS=$IFS
- IFS=$'\n'
- for LINE in $(cat "$GIT_SUBTREE_FILE"); do
-
- # Skip lines starting with '#'.
- if [[ $LINE = \#* ]]; then
- continue
- fi
-
- # Parse the current line.
- PREFIX=$(echo "$LINE" | cut -d';' -f 1)
- REMOTE=$(echo "$LINE" | cut -d';' -f 2)
- BRANCH=$(echo "$LINE" | cut -d';' -f 3)
-
- # Pull from the remote.
- echo "Executing: git subtree pull --prefix=$PREFIX $REMOTE $BRANCH"
- if git subtree pull --prefix="$PREFIX" "$REMOTE" "$BRANCH"; then
- echo "Subtree pull successful for $PREFIX."
- else
- echo "Error: Subtree pull failed for $PREFIX."
- fi
- done
-
- IFS=$OLD_IFS
-}
-
-# Print previous command into a file
-getlast () {
- fc -nl $((HISTCMD - 1))
-}
-
-# Enter directory and list contents
-#cd() { builtin cd $@ && lsd }
-cd() {
- if [ -n "$1" ]; then
- builtin cd "$@" && ls
- else
- builtin cd ~ && ls
- fi
-}
-
-# cd using "up n" as a command up as many directories, example "up 3"
-up() {
- # default parameter to 1 if non provided
- declare -i d=${@:-1}
- # ensure given parameter is non-negative. Print error and return if it is
- (( $d < 0 )) && (>&2 echo "up: Error: negative value provided") && return 1;
- # remove last d directories from pwd, append "/" in case result is empty
- cd "$(pwd | sed -E 's;(/[^/]*){0,'$d'}$;;')/";
-}
-
-# cd into $XDG_CONFIG_HOME/$1 directory
-c() {
- local root=${XDG_CONFIG_HOME:-~/.config}
- local dname="$root/$1"
- if [[ ! -d "$dname" ]]; then
- return
- fi
- cd "$dname"
-}
-
-# Make and cd into directory and any parent directories
-mkcd () {
- if [[ -z "$1" ]]; then
- echo "Usage: mkcd <dir>" 1>&2
- return 1
- fi
- mkdir -p "$1"
- cd "$1"
-}
-
-bak() {
- if [[ -e "$1" ]]; then
- echo "Found: $1"
- mv "${1%.*}"{,.bak}
- elif [[ -e "$1.bak" ]]; then
- echo "Found: $1.bak"
- mv "$1"{.bak,}
- fi
-}
-
-back() {
- for file in "$@"; do
- cp -r "$file" "$file".bak
- done
-}
-
-# tre is a shorthand for tree
-tre() {
- tree -aC -I \
- '.git|.hg|.svn|.tmux|.backup|.vim-backup|.swap|.vim-swap|.undo|.vim-undo|*.bak|tags' \
- --dirsfirst "$@" \
- | less
-}
-
-# switch from/to project/package dir
-pkg() {
- if [ "$#" -eq 2 ]; then
- ln -s "$(readlink -f $1)" "$(readlink -f $2)"/._pkg
- ln -s "$(readlink -f $2)" "$(readlink -f $1)"/._pkg
- else
- cd "$(readlink -f ./._pkg)"
- fi
-}
-
-# Prepare C/C++ project for Language Server Protoco
-lsp-prep() {
- (cd build && cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=ON) \
- && ln -sf build/compile_commands.json
-}
-
-reposize() {
- url=`echo $1 \
- | perl -pe 's#(?:https?://github.com/)([\w\d.-]+\/[\w\d.-]+).*#\1#g' \
- | perl -pe 's#git\@github.com:([\w\d.-]+\/[\w\d.-]+)\.git#\1#g'
- `
- printf "https://github.com/$url => "
- curl -s https://api.github.com/repos/$url \
- | jq '.size' \
- | numfmt --to=iec --from-unit=1024
-}
-
-# Launch a program in a terminal without getting any output,
-# and detache the process from terminal
-# (can then close the terminal without terminating process)
--echo() {
- "$@" &> /dev/null & disown
-}
-
-# Reload shell
-function reload() {
- local compdump_files="$ZDOTDIR/.zcompdump*"
-
- if ls $compdump_files &> /dev/null; then
- rm -f $compdump_files
- fi
-
- exec $SHELL -l
-}
-
-#pom() {
-# local -r HOURS=${1:?}
-# local -r MINUTES=${2:-0}
-# local -r POMODORO_DURATION=${3:-25}
-#
-# bc <<< "(($HOURS * 60) + $MINUTES) / $POMODORO_DURATION"
-#}
-
-#mnt() {
-# local FILE="/mnt/external"
-# if [ ! -z $2 ]; then
-# FILE=$2
-# fi
-#
-# if [ ! -z $1 ]; then
-# sudo mount "$1" "$FILE" -o rw
-# echo "Device in read/write mounted in $FILE"
-# fi
-#
-# if [ $# = 0 ]; then
-# echo "You need to provide the device (/dev/sd*) - use lsblk"
-# fi
-#}
-#
-#umnt() {
-# local DIRECTORY="/mnt"
-# if [ ! -z $1 ]; then
-# DIRECTORY=$1
-# fi
-# MOUNTED=$(grep $DIRECTORY /proc/mounts | cut -f2 -d" " | sort -r)
-# cd "/mnt"
-# sudo umount $MOUNTED
-# echo "$MOUNTED unmounted"
-#}
-
-mntmtp() {
- local DIRECTORY="$HOME/mnt"
- if [ ! -z $2 ]; then
- local DIRECTORY=$2
- fi
- if [ ! -d $DIRECTORY ]; then
- mkdir $DIRECTORY
- fi
-
- if [ ! -z $1 ]; then
- simple-mtpfs --device "$1" "$DIRECTORY"
- echo "MTPFS device in read/write mounted in $DIRECTORY"
- fi
-
- if [ $# = 0 ]; then
- echo "You need to provide the device number - use simple-mtpfs -l"
- fi
-}
-
-umntmtp() {
- local DIRECTORY="$HOME/mnt"
- if ; then
- DIRECTORY=$1
- fi
- cd $HOME
- umount $DIRECTORY
- echo "$DIRECTORY with mtp filesystem unmounted"
-}
-duckduckgo() {
- lynx -vikeys -accept_all_cookies "https://lite.duckduckgo.com/lite/?q=$@"
-}
-
-wikipedia() {
- lynx -vikeys -accept_all_cookies "https://en.wikipedia.org/wiki?search=$@"
-}
-#function filesize() {
-# # Check if 'du' supports the -b option, which provides sizes in bytes.
-# if du -b /dev/null > /dev/null 2>&1; then
-# local arg=-sbh; # If supported, use -sbh options for 'du'.
-# else
-# local arg=-sh; # If not supported, use -sh options for 'du'.
-# fi
-#
-# # Check if no arguments are provided.
-# if [ "$#" -eq 0 ]; then
-# # Calculate and display sizes for all files and directories in cwd.
-# du $arg ./*
-# else
-# # Calculate and display sizes for the specified files and directories.
-# du $arg -- "$@"
-# fi
-#}
-#
-
-fgl() {
- git log --graph --color=always \
- --format="%C(auto)%h%d %s %C(black)%C(bold)%cr" "$@" |
- fzf --ansi --no-sort --reverse --tiebreak=index --bind=ctrl-s:toggle-sort \
- --bind "ctrl-m:execute:
- (grep -o '[a-f0-9]\{7\}' | head -1 |
- xargs -I % sh -c 'git show --color=always % | less -R') << 'FZF-EOF'
- {}
-FZF-EOF"
-}
-
-fgb() {
- local branches branch
- branches=$(git --no-pager branch -vv) &&
- branch=$(echo "$branches" | fzf +m) &&
- git checkout $(echo "$branch" | awk '{print $1}' | sed "s/.* //")
-}
-
-# +--------+
-# | Pacman |
-# +--------+
-
-# TODO can improve that with a bind to switch to what was installed
-fpac() {
- pacman -Slq | fzf --multi --reverse --preview 'pacman -Si {1}' | xargs -ro sudo pacman -S
-}
-
-fyay() {
- yay -Slq | fzf --multi --reverse --preview 'yay -Si {1}' | xargs -ro yay -S
-}
-
-# +------+
-# | tmux |
-# +------+
-
-fmux() {
- prj=$(find $XDG_CONFIG_HOME/tmuxp/ -execdir bash -c 'basename "${0%.*}"' {} ';' | sort | uniq | nl | fzf | cut -f 2)
- echo $prj
- [ -n "$prj" ] && tmuxp load $prj
-}
-
-# ftmuxp - propose every possible tmuxp session
-ftmuxp() {
- if [[ -n $TMUX ]]; then
- return
- fi
-
- # get the IDs
- ID="$(ls $XDG_CONFIG_HOME/tmuxp | sed -e 's/\.yml$//')"
- if [[ -z "$ID" ]]; then
- tmux new-session
- fi
-
- create_new_session="Create New Session"
-
- ID="${create_new_session}\n$ID"
- ID="$(echo $ID | fzf | cut -d: -f1)"
-
- if [[ "$ID" = "${create_new_session}" ]]; then
- tmux new-session
- elif [[ -n "$ID" ]]; then
- # Change name of urxvt tab to session name
- printf '\033]777;tabbedx;set_tab_name;%s\007' "$ID"
- tmuxp load "$ID"
- fi
-}
-
-# ftmux - help you choose tmux sessions
-ftmux() {
- if [[ ! -n $TMUX ]]; then
- # get the IDs
- ID="`tmux list-sessions`"
- if [[ -z "$ID" ]]; then
- tmux new-session
- fi
- create_new_session="Create New Session"
- ID="$ID\n${create_new_session}:"
- ID="`echo $ID | fzf | cut -d: -f1`"
- if [[ "$ID" = "${create_new_session}" ]]; then
- tmux new-session
- elif [[ -n "$ID" ]]; then
- printf '\033]777;tabbedx;set_tab_name;%s\007' "$ID"
- tmux attach-session -t "$ID"
- else
- : # Start terminal normally
- fi
- fi
-}
-
-# +-------+
-# | Other |
-# +-------+
-
-# List install files for dotfiles
-fdot() {
- file=$(find "$DOTFILES/install" -exec basename {} ';' | sort | uniq | nl | fzf | cut -f 2)
- [ -n "$file" ] && "$EDITOR" "$DOTFILES/install/$file"
-}
-
-# List projects
-fwork() {
- result=$(find ~/workspace/* -type d -prune -exec basename {} ';' | sort | uniq | nl | fzf | cut -f 2)
- [ -n "$result" ] && cd ~/workspace/$result
-}
-
-# Open pdf with Zathura
-fpdf() {
- result=$(find -type f -name '*.pdf' | fzf --bind "ctrl-r:reload(find -type f -name '*.pdf')" --preview "pdftotext {} - | less")
- [ -n "$result" ] && nohup zathura "$result" &> /dev/null & disown
-}
-
-# Open epubs with Zathura
-fepub() {
- result=$(find -type f -name '*.epub' | fzf --bind "ctrl-r:reload(find -type f -name '*.epub')")
- [ -n "$result" ] && nohup zathura "$result" &> /dev/null & disown
-}
-
-# Search and find directories in the dir stack
-fpop() {
- # Only work with alias d defined as:
-
- # alias d='dirs -v'
- # for index ({1..9}) alias "$index"="cd +${index}"; unset index
-
- d | fzf --height="20%" | cut -f 1 | source /dev/stdin
-}
-
-#ip() {
-# emulate -LR zsh
-#
-# if [[ $1 == 'get' ]]; then
-# res=$(curl -s ipinfo.io/ip)
-# echo -n $res | xsel --clipboard
-# echo "copied $res to clipboard"
-# # only run ip if it exists
-# elif (( $+commands[ip] )); then
-# command ip $*
-# fi
-#}
-
-ssh-create() {
- if [ ! -z "$1" ]; then
- ssh-keygen -f $HOME/.ssh/$1 -t rsa -N '' -C "$1"
- chmod 700 $HOME/.ssh/$1*
- fi
-}
-
-historystat() {
- history 0 | awk '{print $2}' | sort | uniq -c | sort -n -r | head
-}
-
-promptspeed() {
- for i in $(seq 1 10); do /usr/bin/time zsh -i -c exit; done
-}
-
-#matrix () {
-# local lines=$(tput lines)
-# cols=$(tput cols)
-#
-# awkscript='
-# {
-# letters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#$%^&*()"
-# lines=$1
-# random_col=$3
-# c=$4
-# letter=substr(letters,c,1)
-# cols[random_col]=0;
-# for (col in cols) {
-# line=cols[col];
-# cols[col]=cols[col]+1;
-# printf "\033[%s;%sH\033[2;32m%s", line, col, letter;
-# printf "\033[%s;%sH\033[1;37m%s\033[0;0H", cols[col], col, letter;
-# if (cols[col] >= lines) {
-# cols[col]=0;
-# }
-# }
-# }
-# '
-#
-# echo -e "\e[1;40m"
-# clear
-#
-# while :; do
-# echo $lines $cols $(( $RANDOM % $cols)) $(( $RANDOM % 72 ))
-# sleep 0.05
-# done | awk "$awkscript"
-#}
-
-matrix() {
- local lines=$(tput lines)
- cols=$(tput cols)
-
- # Check if tmux is available
- if command -v tmux > /dev/null; then
- # Save the current status setting
- local status_setting=$(tmux show -g -w -v status)
-
- # Turn off tmux status
- tmux set -g status off
- else
- echo "tmux is not available. Exiting."
- return 1
- fi
-
- # Function to restore terminal state
- restore_terminal() {
- # Clear the screen
- clear
-
- # Bring back tmux status to its original setting
- if command -v tmux > /dev/null; then
- tmux set -g status "$status_setting"
- fi
- }
-
- trap 'restore_terminal' INT
-
- awkscript='
- {
- letters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#$%^&*()"
- lines=$1
- random_col=$3
- c=$4
- letter=substr(letters,c,1)
- cols[random_col]=0;
- for (col in cols) {
- line=cols[col];
- cols[col]=cols[col]+1;
- printf "\033[%s;%sH\033[2;32m%s", line, col, letter;
- printf "\033[%s;%sH\033[1;37m%s\033[0;0H", cols[col], col, letter;
- if (cols[col] >= lines) {
- cols[col]=0;
- }
- }
- }
- '
-
- echo -e "\e[1;40m"
- clear
-
- while :; do
- echo $lines $cols $(( $RANDOM % $cols)) $(( $RANDOM % 72 ))
- sleep 0.05
- done | awk "$awkscript"
-
- # Restore terminal state
- restore_terminal
-}
-
-## Reload shell
-function reload() {
- local compdump_files="$ZDOTDIR/.zcompdump*"
-
- if ls $compdump_files &> /dev/null; then
- rm -f $compdump_files
- fi
-
- exec $SHELL -l
-}
-## Generate a secure password
-function passgen() {
- LC_ALL=C tr -dc ${1:-"[:graph:]"} < /dev/urandom | head -c ${2:-20}
-}
-## Encode/Decode string using base64
-function b64e() {
- echo "$@" | base64
-}
-
-function b64d() {
- echo "$@" | base64 -D
-}
-# Search through all man pages
-function fman() {
- man -k . | fzf -q "$1" --prompt='man> ' --preview $'echo {} | tr -d \'()\' | awk \'{printf "%s ", $2} {print $1}\' | xargs -r man' | tr -d '()' | awk '{printf "%s ", $2} {print $1}' | xargs -r man
-}
-# Back up a file. Usage "backupthis <filename>"
-backupthis() {
- cp -riv $1 ${1}-$(date +%Y%m%d%H%M).backup;
-}
-
-# Spawn a clone of current terminal
-putstate () {
- declare +x >~/environment.tmp
- declare -x >>~/environment.tmp
- echo cd "$PWD" >>~/environment.tmp
-}
-
-getstate () {
- . ~/environment.tmp
-}
-
-# use ctrl-z to toggle in and out of bg
-function toggle_fg_bg() {
- if [[ $#BUFFER -eq 0 ]]; then
- BUFFER="fg"
- zle accept-line
- else
- BUFFER=""
- zle clear-screen
- fi
-}
-zle -N toggle_fg_bg
-bindkey '^Z' toggle_fg_bg
-
-# Tmux layout
-openSession () {
- tmux split-window -h -t
- tmux split-window -v -t
- tmux resize-pane -U 5
-}
-
-# archive compress
-compress() {
- if [[ -n "$1" ]]; then
- local file=$1
- shift
- case "$file" in
- *.tar ) tar cf "$file" "$*" ;;
- *.tar.bz2 ) tar cjf "$file" "$*" ;;
- *.tar.gz ) tar czf "$file" "$*" ;;
- *.tgz ) tar czf "$file" "$*" ;;
- *.zip ) zip "$file" "$*" ;;
- *.rar ) rar "$file" "$*" ;;
- * ) tar zcvf "$file.tar.gz" "$*" ;;
- esac
- else
- echo 'usage: compress <foo.tar.gz> ./foo ./bar'
- fi
-}
-
-# archive extract
-extract() {
- if [[ -f "$1" ]] ; then
- local filename=$(basename "$1")
- local foldername=${filename%%.*}
- local fullpath=$(perl -e 'use Cwd "abs_path";print abs_path(shift)' "$1")
- local didfolderexist=false
- if [[ -d "$foldername" ]]; then
- didfolderexist=true
- read -p "$foldername already exists, do you want to overwrite it? (y/n) " -n 1
- echo
- if [[ "$REPLY" =~ ^[Nn]$ ]]; then
- return
- fi
- fi
- mkdir -p "$foldername" && cd "$foldername"
- case "$1" in
- *.tar.bz2) tar xjf "$fullpath" ;;
- *.tar.gz) tar xzf "$fullpath" ;;
- *.tar.xz) tar Jxvf "$fullpath" ;;
- *.tar.Z) tar xzf "$fullpath" ;;
- *.tar) tar xf "$fullpath" ;;
- *.taz) tar xzf "$fullpath" ;;
- *.tb2) tar xjf "$fullpath" ;;
- *.tbz) tar xjf "$fullpath" ;;
- *.tbz2) tar xjf "$fullpath" ;;
- *.tgz) tar xzf "$fullpath" ;;
- *.txz) tar Jxvf "$fullpath" ;;
- *.zip) unzip "$fullpath" ;;
- *) echo "'$1' cannot be extracted via extract()" \
- && cd .. \
- && ! "$didfolderexist" \
- && rm -r "$foldername" ;;
- esac
- else
- echo "'$1' is not a valid file"
- fi
-}
-## Extract with one command
-#extract () {
-# if [ -f $1 ] ; then
-# case $1 in
-# *.tar.bz2) tar xjf $1 ;;
-# *.tar.gz) tar xzf $1 ;;
-# *.bz2) bunzip2 $1 ;;
-# *.rar) rar x $1 ;;
-# *.gz) gunzip $1 ;;
-# *.tar) tar xf $1 ;;
-# *.tbz2) tar xjf $1 ;;
-# *.tgz) tar xzf $1 ;;
-# *.zip) unzip $1 ;;
-# *.Z) uncompress $1 ;;
-# *.7z) 7z x $1 ;;
-# *) echo "'$1' cannot be extracted via extract()" ;;
-# esac
-# else
-# echo "'$1' is not a valid file"
-# fi
-#}
-
-ports() {
- local result
- result=$(sudo netstat -tulpn | grep LISTEN)
- echo "$result" | fzf
-}
-
-trash() {
- case "$1" in
- --list)
- ls -A1 ~/.local/share/Trash/files/
- ;;
- --empty)
- ls -A1 ~/.local/share/Trash/files/ && \rm -rfv ~/.local/share/Trash/files/*
- ;;
- --restore)
- gio trash --restore "$(gio trash --list | fzf | cut -f 1)"
- ;;
- --delete)
- trash_files=$(ls -A ~/.local/share/Trash/files/ | fzf --multi); echo $trash_files | xargs -I {} rm -rf ~/.local/share/Trash/files/{}
- ;;
- *)
- gio trash "$@"
- ;;
- esac
-}
-
-# Git
-## Use gh instead of git (fast GitHub command line client).
-#if type gh >/dev/null; then
-# alias git=gh
-# if type compdef >/dev/null 2>/dev/null; then
-# compdef gh=git
-# fi
-#fi
-#check_gh_installed() {
-# if command -v gh &> /dev/null; then
-# return 0 # gh is installed
-# else
-# return 1 # gh is not installed
-# fi
-#}
-#
-## Set alias for git to gh if gh is installed
-#if check_gh_installed; then
-# alias git=gh
-#fi
-
-# No arguments: `git status`
-# With arguments: acts like `git`
-g() {
- if [ $# -gt 0 ]; then
- git "$@" # If arguments are provided, pass them to git
- else
- git status # Otherwise, show git status
- fi
-}
-
-# Complete g like git
-compdef g=git
-
-# Define functions for common Git commands
-ga() { g add "$@"; } # ga: Add files to the staging area
-gaw() { g add -A && g diff --cached -w | g apply --cached -R; } # gaw: Add all changes to the staging area and unstage whitespace changes
-grm() { g rm "$@"; }
-gb() { g branch "$@"; } # gb: List branches
-gbl() { g branch -l "$@"; } # gbl: List local branches
-gbD() { g branch -D "$@"; } # gbD: Delete a branch
-gbu() { g branch -u "$@"; } # gbu: Set upstream branch
-ge() { g clone "$@"; }
-gc() { g commit "$@"; } # gc: Commit changes
-gcm() { g commit -m "$@"; } # gcm: Commit with a message
-gca() { g commit -a "$@"; } # gca: Commit all changes
-gcaa() { g commit -a --amend "$@"; } # gcaa: Amend the last commit
-gcam() { g commit -a -m "$@"; } # gcam: Commit all changes with a message
-gce() { g commit -e "$@"; } # gce: Commit with message and allow editing
-gcfu() { g commit --fixup "$@"; } # gcfu: Commit fixes in the context of the previous commit
-gco() { g checkout "$@"; } # gco: Checkout a branch or file
-gcob() { g checkout -b "$@"; } # gcob: Checkout a new branch
-gcoB() { g checkout -B "$@"; } # gcoB: Checkout a new branch, even if it exists
-gcp() { g cherry-pick "$@"; } # gcp: Cherry-pick a commit
-gcpc() { g cherry-pick --continue "$@"; } # gcpc: Continue cherry-picking after resolving conflicts
-gd() { g diff "$@"; } # gd: Show changes
-#gd^() { g diff HEAD^ HEAD "$@"; } # gd^: Show changes between HEAD^ and HEAD
-gds() { g diff --staged "$@"; } # gds: Show staged changes
-gl() { g lg "$@"; } # gl: Show a customized log
-glg() { g log --graph --decorate --all "$@"; } # glg: Show a customized log with graph
-gls() { # Query `glog` with regex query.
- query="$1"
- shift
- glog --pickaxe-regex "-S$query" "$@"
-}
-gdc() { g diff --cached "$@"; } # gdc: Show changes between the working directory and the index
-gu() { g pull "$@"} # gu: Pull
-gp() { g push "$@"} # gp: Push
-gpom() { g push origin main "$@"; } # gpom: Push changes to origin main
-gr() { g remote "$@"; } # gr: Show remote
-gra() { g rebase --abort "$@"; } # gra: Abort a rebase
-grb() { g rebase --committer-date-is-author-date "$@"; } # grb: Rebase with the author date preserved
-grbom() { grb --onto master "$@"; } # grbom: Rebase onto master
-grbasi() { g rebase --autosquash --interactive "$@"; } # grbasi: Interactive rebase with autosquash
-grc() { g rebase --continue "$@"; } # grc: Continue a rebase
-grs() { g restore --staged "$@"; } # grs: Restore changes staged for the next commit
-grv() { g remote -v "$@"; } # grv: Show remote URLs after each name
-grh() { g reset --hard "$@"; } # grh: Reset the repository and the working directory
-grH() { g reset HEAD "$@"; } # grH: Reset the index but not the working directory
-#grH^() { g reset HEAD^ "$@"; } # grH^: Reset the index and working directory to the state of the HEAD's first parent
-gs() { g status -sb "$@"; } # gs: Show the status of the working directory and the index
-gsd() { g stash drop "$@"; } # gsd: Drop a stash
-gsl() { g stash list --date=relative "$@"; } # gsl: List all stashes
-gsp() { g stash pop "$@"; } # gsp: Apply and remove a single stash
-gss() { g stash show "$@"; } # gss: Show changes recorded in the stash as a diff
-gst() { g status "$@"; } # gst: Show the status of the working directory and the index
-gsu() { g standup "$@"; } # gsu: Customized standup command
-gforgotrecursive() { g submodule update --init --recursive --remote "$@"; } # gforgotrecursive: Update submodules recursively
-gfp() { g commit --amend --no-edit && g push --force-with-lease "$@"; } # gfp: Amending the last commit and force-pushing
diff --git a/.config/zsh/user/options.zsh b/.config/zsh/user/options.zsh
deleted file mode 100644
index 0e97fed..0000000
--- a/.config/zsh/user/options.zsh
+++ /dev/null
@@ -1,50 +0,0 @@
-
-# Let FZF use ripgrep by default
-if type rg &> /dev/null; then
- export FZF_DEFAULT_COMMAND='rg --files'
- export FZF_DEFAULT_OPTS='-m --height 50% --border'
-fi
-
-
-# Allow nnn filemanager to cd on quit
-nnn() {
- declare -x +g NNN_TMPFILE=$(mktemp --tmpdir $0.XXXX)
- trap "rm -f $NNN_TMPFILE" EXIT
- =nnn $@
- [ -s $NNN_TMPFILE ] && source $NNN_TMPFILE
-}
-
-
-# NVM
-#nvm() {
-# local green_color
-# green_color=$(tput setaf 2)
-# local reset_color
-# reset_color=$(tput sgr0)
-# echo -e "${green_color}nvm${reset_color} $@"
-#}
-if [ -s "$NVM_DIR/nvm.sh" ]; then
- nvm_cmds=(nvm node npm yarn)
- for cmd in "${nvm_cmds[@]}"; do
- alias "$cmd"="unalias ${nvm_cmds[*]} && unset nvm_cmds && . $NVM_DIR/nvm.sh && $cmd"
- done
-fi
-
-# Kubernetes
-# kubernetes aliases
-if command -v kubectl > /dev/null; then
- replaceNS() { kubectl config view --minify --flatten --context=$(kubectl config current-context) | yq ".contexts[0].context.namespace=\"$1\"" ; }
- alias kks='KUBECONFIG=<(replaceNS "kube-system") kubectl'
- alias kam='KUBECONFIG=<(replaceNS "authzed-monitoring") kubectl'
- alias kas='KUBECONFIG=<(replaceNS "authzed-system") kubectl'
- alias kar='KUBECONFIG=<(replaceNS "authzed-region") kubectl'
- alias kt='KUBECONFIG=<(replaceNS "tenant") kubectl'
-
- if command -v kubectl-krew > /dev/null; then
- path=($XDG_CONFIG_HOME/krew/bin $path)
- fi
-
- rmfinalizers() {
- kubectl get deployment "$1" -o json | jq '.metadata.finalizers = null' | kubectl apply -f -
- }
-fi
diff --git a/.config/zsh/user/prompt.zsh b/.config/zsh/user/prompt.zsh
deleted file mode 100644
index d9fc148..0000000
--- a/.config/zsh/user/prompt.zsh
+++ /dev/null
@@ -1,202 +0,0 @@
-#!/bin/zsh
-
-########## Prompt(s) ##########
-
-terminfo_down_sc=$terminfo[cud1]$terminfo[cuu1]$terminfo[sc]$terminfo[cud1]
-
-autoload -Uz vcs_info
-autoload -Uz add-zsh-hook
-autoload -U colors && colors
-
-precmd_vcs_info() { vcs_info }
-
-precmd_functions+=( precmd_vcs_info )
-
-setopt prompt_subst
-
-git_branch_test_color() {
- local ref=$(git symbolic-ref --short HEAD 2> /dev/null)
- if [ -n "${ref}" ]; then
- if [ -n "$(git status --porcelain)" ]; then
- local gitstatuscolor='%F{green}'
- else
- local gitstatuscolor='%F{82}'
- fi
- echo "${gitstatuscolor}${ref}"
- else
- echo ""
- fi
-}
-
-zstyle ':vcs_info:*' check-for-changes true
-zstyle ':vcs_info:*' stagedstr ' +%F{15}staged%f'
-zstyle ':vcs_info:*' unstagedstr ' -%F{15}unstaged%f'
-zstyle ':vcs_info:*' actionformats '%F{5}%F{2}%b%F{3}|%F{1}%a%F{5}%f '
-zstyle ':vcs_info:*' formats '%F{208} '$'\uE0A0'' %f$(git_branch_test_color)%f%F{76}%c%F{3}%u%f '
-zstyle ':vcs_info:git*+set-message:*' hooks git-untracked
-zstyle ':vcs_info:*' enable git
-
-+vi-git-untracked() {
- if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' ]] && \
- git status --porcelain | grep '??' &> /dev/null ; then
- hook_com[unstaged]+='%F{196} !%f%F{15}untracked%f'
- fi
-}
-
-ssh_name() {
- if [[ -n $SSH_CONNECTION ]]; then
- local ssh_info
- ssh_info="ssh:%F{green}%n$nc%f"
- if [[ -n $SSH_CONNECTION ]]; then
- local ip_address
- ip_address=$(echo $SSH_CONNECTION | awk '{print $3}')
- ssh_info="$ssh_info@%F{green}$ip_address%f"
- fi
- echo " ${ssh_info}"
- fi
-}
-
-function job_name() {
- job_name=""
- job_length=0
- if [ "${COLUMNS}" -gt 69 ]; then
- job_length=$((${COLUMNS}-70))
- [ "${job_length}" -lt "0" ] && job_length=0
- fi
-
- if [ "${job_length}" -gt 0 ]; then
- local job_count=$(jobs | wc -l)
- if [ "${job_count}" -gt 0 ]; then
- local title_jobs="jobs:"
- job_name="${title_jobs}"
- job_name+="%F{green}$(jobs | grep + | tr -s " " | cut -d " " -f 4- | cut -b 1-${job_length} | sed "s/\(.*\)/\1/")%f"
- fi
- fi
-
- echo "${job_name}"
-}
-
-function job_count() {
- local job_count
- job_count=$(jobs -s | grep -c "suspended")
- if [ "${job_count}" -gt 0 ]; then
- echo "(${job_count})"
- fi
-}
-
-current_jobs=' $(job_name)$(job_count)'
-user="%n"
-at="%F{15}at%{$reset_color%}"
-machine="%F{4}%m%{$reset_color%}"
-relative_home="%F{4}%~%{$reset_color%}"
-carriage_return=""$'\n'""
-empty_line_bottom="%r"
-chevron_right=""
-color_reset="%{$(tput sgr0)%}"
-color_yellow="%{$(tput setaf 226)%}"
-color_blink="%{$(tput blink)%}"
-prompt_symbol="$"
-dollar_sign="${color_yellow}${color_blink}${prompt_symbol}${color_reset}"
-dollar="%(?:%F{2}${dollar_sign}:%F{1}${dollar_sign})"
-space=" "
-cmd_prompt="%(?:%F{2}${chevron_right} :%F{1}${chevron_right} )"
-git_info="\$vcs_info_msg_0_"
-v1="%{┌─[%}"
-v2="%{]%}"
-v3="└─["
-v4="]"
-
-function insert-mode () { echo "-- INSERT --" }
-function normal-mode () { echo "-- NORMAL --" }
-
-vi-mode-indicator () {
- if [[ ${KEYMAP} == vicmd || ${KEYMAP} == vi-cmd-mode ]]; then
- echo -ne '\e[1 q'
- vi_mode=$(normal-mode)
- elif [[ ${KEYMAP} == main || ${KEYMAP} == viins || ${KEYMAP} == '' ]]; then
- echo -ne '\e[5 q'
- vi_mode=$(insert-mode)
- fi
-}
-
-function set-prompt () {
- vi-mode-indicator
- mode="%F{145}%{$terminfo_down_sc$vi_mode$terminfo[rc]%f%}"
- #PS1="${relative_home}${vcs_info_msg_0_}${current_jobs} ${carriage_return}${mode}${dollar}${space}"
- PS1="${v1}${user}${v2}${space}${relative_home}${vcs_info_msg_0_}${current_jobs}$(ssh_name) ${carriage_return}${mode}${v3}${dollar}${v4}${empty_line_bottom}"
- #RPROMPT="$(ssh_name)"
-}
-
-precmd () {
- print -rP
- vcs_info
- set-prompt
-}
-
-function update-mode-file() {
- set-prompt
- local current_mode=$(cat ~/.vi-mode)
- local new_mode="$vi_mode"
- if [[ "$new_mode" != "$current_mode" ]]; then
- echo "$new_mode" >| ~/.vi-mode
- fi
- if command -v tmux &>/dev/null && [[ -n "$TMUX" ]]; then
- tmux refresh-client -S
- fi
-}
-
-function check-nvim-running() {
- if pgrep -x "nvim" > /dev/null; then
- vi_mode=""
- update-mode-file
- if command -v tmux &>/dev/null && [[ -n "$TMUX" ]]; then
- tmux refresh-client -S
- fi
- else
- if [[ ${KEYMAP} == vicmd || ${KEYMAP} == vi-cmd-mode ]]; then
- vi_mode=$(normal-mode)
- elif [[ ${KEYMAP} == main || ${KEYMAP} == viins || ${KEYMAP} == '' ]]; then
- vi_mode=$(insert-mode)
- fi
- update-mode-file
- if command -v tmux &>/dev/null && [[ -n "$TMUX" ]]; then
- tmux refresh-client -S
- fi
- fi
-}
-
-function zle-line-init() {
- zle reset-prompt
- case "${KEYMAP}" in
- vicmd)
- echo -ne '\e[1 q'
- ;;
- main|viins|*)
- echo -ne '\e[5 q'
- ;;
- esac
-}
-
-function zle-keymap-select() {
- update-mode-file
- zle reset-prompt
- case "${KEYMAP}" in
- vicmd)
- echo -ne '\e[1 q'
- ;;
- main|viins|*)
- echo -ne '\e[5 q'
- ;;
- esac
-}
-
-preexec () { print -rn -- $terminfo[el]; echo -ne '\e[5 q' ; }
-
-zle -N zle-line-init
-zle -N zle-keymap-select
-
-TRAPWINCH() {
- update-mode-file
-}
-
-set-prompt