diff --git a/.aliases b/.aliases new file mode 100644 index 0000000..e7d7037 --- /dev/null +++ b/.aliases @@ -0,0 +1,5 @@ +alias pissh='ssh -Y pi@192.168.1.118' +alias share='mount -t cifs //192.168.4.53/pishare /share -o username=pi,iocharset=utf8,uid=sudacode,gid=sudacode' +alias lconf='lvim ~/.config/lvim/config.lua' +alias dcre='dc up -d --force-recreate' +alias lofi="nohup mpv 'https://www.youtube.com/watch?v=jfKfPfyJRdk' >/dev/null 2>&1 &" diff --git a/.bash_aliases b/.bash_aliases new file mode 100644 index 0000000..74d27e4 --- /dev/null +++ b/.bash_aliases @@ -0,0 +1,131 @@ +#!/usr/bin/env bash +alias sudo='sudo -v; sudo ' +alias suda='sudo' + +alias vi=nvim +alias vim=nvim + +alias nvidia-settings='nvidia-settings --config=~/nvidia/settings' + +alias qutebrowser="qutebrowser --qt-arg stylesheet ~/.local/share/qutebrowser/fix-tooltips.qss" + +# Aniwrapper +alias aniwrapper='aniwrapper -D 144' + +## Colorls +alias ls='eza -M --group-directories-first --icons --color=always --group --git' +alias ll='ls -l' +alias la='ls -la' + +alias vimf='vim $(fzf --height=45% --layout=reverse --preview="bat --style=numbers --color=always --line-range :500 {}")' + +# Kitty +alias kimg='kitty +kitten icat' +alias kdiff='kitty +kitten diff' + +## Pacman/Yay +# update without noconfirm +alias spu='sudo pacman -Syu' +# cleanup orphaned packages +alias cleanup='suda pacman -Rns $(pacman -Qtdq)' +# update everything +alias upall="paru -Syu --noconfirm" + +## Npm/Yarn +alias ns='npm start' +alias yb='yarn build' +alias ys='yarn start' +alias yi='yarn install' + +## Git +alias gst='git status' +alias gcmt='git commit' +alias gpush='git push' +alias gpull='git pull' + +## Helpful +alias count='ls -l | wc -l' +# use all cores +alias uac="sh ~/.bin/main/000*" +alias update-grub="sudo grub-mkconfig -o /boot/grub/grub.cfg" +alias update-fc="suda fc-cache -fv" +alias unlock-db='suda rm /var/lib/pacman/db.lck' +alias dn='deactivate_node' +alias logs='ksystemlog &' + +## youtube-dl +alias yta-best="youtube-dl --extract-audio --audio-format best" +alias yta-mp3="youtube-dl --extract-audio --audio-format mp3 --config-location ~/.config/youtube-dl/config.audio" +alias ytv-best="youtube-dl -f bestvideo+bestaudio" +# get error message from journalctl +alias jctl='journalctl -p 3 -xb' + +## This is specific to WSL 2. If the WSL 2 VM goes rogue and decides not to free +## up memory, this command will free your memory after about 20-30 seconds. +## Details: https://github.com/microsoft/WSL/issues/4166#issuecomment-628493643 +alias drop_cache="sudo sh -c \"echo 3 >'/proc/sys/vm/drop_caches' && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'\"" + +# mkdir +alias mkdir='mkdir -p' + +# wallpapers +alias mysan='feh --bg-scale ~/.wallpapers/MYSanGun-Inverted.png ~/.wallpapers/MYSanGun.png' + +## I'm Lazy +alias scripts='cd /home/sudacode/scripts' +alias freud='cd /home/sudacode/' +alias c=clear +alias open='xdg-open' +alias glow='glow -p' +alias jn='jupyter-notebook' +alias blog='cd ~/projects/React/github/Sudacode-Blog-V3' +alias venv='source env/bin/activate' +alias eecs484='cd ~/projects/eecs484/project4' +alias n=ncmpcpp +alias reload='source ~/.zshrc' +alias golf='cd ~/projects/Python/SudacodeGolf/ && source env/bin/activate' +alias prolog=swipl +alias chess='cd ~/projects/React/github/sudacode-chess/' +alias temps='curl wttr.in' +alias whatsmyip='http ipinfo.io' +alias edit='sudoedit' +alias ports='sudo netstat -tupln' +alias ncdu='ncdu --color dark' +alias updates='~/SudacodeRice/scripts/package-updates' +alias aliases='cat ~/.bash_aliases' +alias sauce='~/Videos/sauce/' +alias wmedit='emc ~/.config/i3/config' +alias ani='cd $HOME/Projects/Scripts/aniwrapper' +alias archvm='VBoxManage startvm "arch-vm"' +alias chrome='google-chrome-beta --profile-directory="Profile 1" &>/dev/null &' +alias bar='~/SudacodeRice/scripts/launch_desktop.sh' +alias nord=nordvpn +alias lzd=lazydocker +alias lzg=lazygit +alias mounts='sudo ~/scripts/mounts.sh' +alias dc=docker-compose # sorry calculator +alias vimconf='cd ~/.config/nvim && vim -c ":NvimTreeOpen" && cd -' +alias sctl=systemctl +alias pyex='python -m' +alias get='aria2c' +alias links="vim ~/.links" + +## Rice +alias config='/usr/bin/git --git-dir=$HOME/dotfiles/ --work-tree=$HOME' +alias pushdots='config push senpai' +alias commitdots='config commit' +alias cs='config status' +alias f=floaterm + +# wireguard +alias wgu='nmcli c up wg0' +alias wgd='nmcli c down wg0' + +alias tmux='TERM=xterm-256color tmux' +alias mpv='FONTCONFIG_FILE=$HOME/.config/mpv/mpv-fonts.conf mpv' +alias hypr='cd ~/.config/hypr && vim ~/.config/hypr/hyprland.conf && cd -' + +alias wlc='wl-copy' +alias wlp='wl-paste' +alias vn32='WINEPREFIX=/home/sudacode/S/lutris/wineprefix32 WINEARCH=win32' +alias impv='mpv --profile=immersion' diff --git a/.config/change-wallpaper/config.json b/.config/change-wallpaper/config.json deleted file mode 100644 index 2beffe9..0000000 --- a/.config/change-wallpaper/config.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "topics": [ - "132262 - Mobuseka", - "konosuba", - "79222 - bunny girl senpai", - "oshi no ko", - "kill la kill", - "lofi", - "139520 - eminence in shadow", - "132 - Monogatari Series" - ] -} diff --git a/.config/ghostty/config##os.Darwin b/.config/ghostty/config##os.Darwin index 3fc5c20..b54ed74 100644 --- a/.config/ghostty/config##os.Darwin +++ b/.config/ghostty/config##os.Darwin @@ -16,3 +16,4 @@ copy-on-select = clipboard app-notifications = no-clipboard-copy keybind = all:ctrl+enter=unbind keybind = all:ctrl+grave_accent=toggle_quick_terminal +shell-integration = zsh diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf index 0d4a642..f0d57f9 100644 --- a/.config/hypr/hyprland.conf +++ b/.config/hypr/hyprland.conf @@ -223,7 +223,7 @@ device { } render { - explicit_sync = true + # explicit_sync = true } misc { @@ -256,7 +256,9 @@ misc { # windowrulev2 = float, class:com.mitchellh.ghostty windowrule = float, class:discord windowrule = float, class:mpv +windowrule = float, class:steam windowrule = workspace 10 silent, class:discord +windowrule = workspace 9 silent, class:steam # windowruv2 = opacity 0.88, class:.* fullscreen:0 windowrule = opacity 0.88, class:.* fullscreen:0 # windowruv2 = opacity 1, class:.* fullscreen:0 @@ -269,6 +271,8 @@ windowrule = opacity 1, class:com.obsproject.Studio windowrule = opacity 1, title:(.*)(- YouTube(.*)) windowrule = opacity 1, class:zen, title:(.*)YouTube TV(.*) + + # Example windowrule v2 # windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ diff --git a/.config/hypr/keybindings.conf b/.config/hypr/keybindings.conf index 37b814f..dd1d686 100644 --- a/.config/hypr/keybindings.conf +++ b/.config/hypr/keybindings.conf @@ -1,6 +1,6 @@ # Set programs that you use $terminal = FONTCONFIG_FILE=/home/sudacode/.config/ghostty/ghostty-fonts.conf uwsm app -sa -- ghostty -$fileManager = uwsm app -sa -- dolphin +$fileManager = uwsm app -sa -- thunar # $menu = rofi -show drun # https://github.com/Vladimir-csp/uwsm#2-service-startup-notification-and-vars-set-by-compositor # $menu = rofi -show drun -run-command "uwsm app -- {cmd}" @@ -106,9 +106,9 @@ bind = SUPER, m, exec, ~/.local/bin/mpv-add.sh bind = SUPER SHIFT, s, exec, slurp | grim -g - - | wl-copy bind = ,code:107, exec, ~/.local/bin/screenshot bind = SUPER,code:107, exec, flameshot screen -bind = SUPER SHIFT, o, exec, ~/.local/bin/ocr.sh -bind = $mainMod, o, exec, ~/.local/bin/ocr.sh -bind = $mainMod SHIFT, o, exec, ~/.local/bin/rofi-open tab +bind = SUPER, o, exec, ~/.local/bin/ocr.sh +bind = $mainMod, o, exec, ~/.local/bin/rofi-open tab +bind = $mainMod SHIFT, o, exec, ~/.local/bin/rofi-open window # change wallpaper bind = $mainMod CTRL, n, exec, ~/.local/bin/change-wallpaper @@ -124,3 +124,5 @@ bind = CTRL ALT, F, exec, ~/.local/bin/favorite-wallpaper bind = $mainMod, z, exec, uwsm app -sb -- zen-browser +bind = $mainMod SHIFT, s, exec , rofi -show ssh -theme "$HOME/.config/rofi/launchers/type-2/style-2.rasi" -terminal -theme-str 'window{width: 25%;} listview {columns: 1; lines: 10;}' ghostty -ssh-command "ghostty --initial-command='TERM=kitty ssh {host}'" + diff --git a/.config/oh-my-posh/catppuccin_macchiato.omp.json##default b/.config/oh-my-posh/catppuccin_macchiato.omp.json##default new file mode 100644 index 0000000..e7d83b5 --- /dev/null +++ b/.config/oh-my-posh/catppuccin_macchiato.omp.json##default @@ -0,0 +1,112 @@ +{ + "$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json", + "palette": { + "os": "#ACB0BE", + "closer": "p:os", + "pink": "#F5BDE6", + "lavender": "#B7BDF8", + "blue": "#8AADF4" + }, + "blocks": [ + { + "type": "rprompt", + "alignment": "right", + "segments": [ + { + "type": "command", + "style": "plain", + "foreground": "p:os", + "properties": { + "shell": "bash", + "command": "ip -4 -o addr show dev tailscale0 up 2>/dev/null | awk '{print $4}' | cut -d/ -f1" + } + } + ] + }, + { + "alignment": "left", + "segments": [ + { + "foreground": "p:os", + "style": "plain", + "template": " ", + "type": "os" + }, + { + "foreground": "p:blue", + "style": "plain", + "template": "{{ .UserName }}@{{ .HostName }} ", + "type": "session" + }, + { + "foreground": "p:pink", + "properties": { + "folder_icon": "..\ue5fe..", + "home_icon": "~", + "style": "agnoster_full" + }, + "style": "plain", + "template": "{{ .Path }}", + "type": "path" + }, + { + "properties": { + "fetch_status": true, + "fetch_upstream_icon": true + }, + "foreground_templates": [ + "{{ if or (.Working.Changed) (.Staging.Changed) }}#EED49F{{ end }}", + "{{ if and (gt .Ahead 0) (gt .Behind 0) }}#EE99A0{{ end }}", + "{{ if gt .Ahead 0 }}#C6A0F6{{ end }}", + "{{ if gt .Behind 0 }}#C6A0F6{{ end }}" + ], + "style": "powerline", + "type": "git" + }, + { + "type": "python", + "style": "powerline", + "foreground": "#a6da95", + "display_default": false, + "display_mode": "environment", + "fetch_version": false, + "fetch_virtual_env": true, + "default_venv_names": ["venv", "env"], + "template": " {{ if .Error }}{{ .Error }}{{ else }}{{ if .Venv }}{{ .Venv }} {{ end }}{{ .Full }}{{ end }}" + }, + { + "type": "status", + "style": "powerline", + "foreground": "p:pink", + "properties": { + "always_enabled": false + } + } + ], + "type": "prompt" + } + ], + "tooltips": [ + { + "type": "git", + "tips": ["git", "g"], + "style": "diamond", + "foreground": "#a6da95", + "background": "#363a4f", + "leading_diamond": "", + "trailing_diamond": "", + "template": "{{ .HEAD }}{{ if .Staging.Changed }}  {{ .Staging.String }}{{ end }}{{ if and (.Working.Changed) (.Staging.Changed) }} |{{ end }}{{ if .Working.Changed }}  {{ .Working.String }}{{ end }}", + "properties": { + "fetch_status": true, + "fetch_upstream_icon": true + } + } + ], + "final_space": true, + "version": 3, + "transient_prompt": { + "background": "transparent", + "foreground": "#ACB0BE", + "template": "{{ .Shell }}> " + } +} diff --git a/.config/oh-my-posh/catppuccin_macchiato.omp.json##os.Darwin b/.config/oh-my-posh/catppuccin_macchiato.omp.json##os.Darwin new file mode 100644 index 0000000..2ce5939 --- /dev/null +++ b/.config/oh-my-posh/catppuccin_macchiato.omp.json##os.Darwin @@ -0,0 +1,111 @@ +{ + "$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json", + "palette": { + "os": "#ACB0BE", + "closer": "p:os", + "pink": "#F5BDE6", + "lavender": "#B7BDF8", + "blue": "#8AADF4" + }, + "blocks": [ + { + "type": "rprompt", + "alignment": "right", + "segments": [ + { + "type": "command", + "style": "plain", + "foreground": "p:os", + "properties": { + "shell": "bash", + "command": "ip -4 -o addr show dev tailscale0 up 2>/dev/null | awk '{print $4}' | cut -d/ -f1" + } + } + ] + }, + { + "alignment": "left", + "segments": [ + { + "foreground": "p:os", + "style": "plain", + "type": "os" + }, + { + "foreground": "p:blue", + "style": "plain", + "template": "{{ .UserName }}@{{ .HostName }} ", + "type": "session" + }, + { + "foreground": "p:pink", + "properties": { + "folder_icon": "..\ue5fe..", + "home_icon": "~", + "style": "agnoster_full" + }, + "style": "plain", + "template": "{{ .Path }}", + "type": "path" + }, + { + "properties": { + "fetch_status": true, + "fetch_upstream_icon": true + }, + "foreground_templates": [ + "{{ if or (.Working.Changed) (.Staging.Changed) }}#EED49F{{ end }}", + "{{ if and (gt .Ahead 0) (gt .Behind 0) }}#EE99A0{{ end }}", + "{{ if gt .Ahead 0 }}#C6A0F6{{ end }}", + "{{ if gt .Behind 0 }}#C6A0F6{{ end }}" + ], + "style": "powerline", + "type": "git" + }, + { + "type": "python", + "style": "powerline", + "foreground": "#a6da95", + "display_default": false, + "display_mode": "environment", + "fetch_version": false, + "fetch_virtual_env": true, + "default_venv_names": ["venv", "env"], + "template": " {{ if .Error }}{{ .Error }}{{ else }}{{ if .Venv }}{{ .Venv }} {{ end }}{{ .Full }}{{ end }}" + }, + { + "type": "status", + "style": "powerline", + "foreground": "p:pink", + "properties": { + "always_enabled": false + } + } + ], + "type": "prompt" + } + ], + "tooltips": [ + { + "type": "git", + "tips": ["git", "g"], + "style": "diamond", + "foreground": "#a6da95", + "background": "#363a4f", + "leading_diamond": "", + "trailing_diamond": "", + "template": "{{ .HEAD }}{{ if .Staging.Changed }}  {{ .Staging.String }}{{ end }}{{ if and (.Working.Changed) (.Staging.Changed) }} |{{ end }}{{ if .Working.Changed }}  {{ .Working.String }}{{ end }}", + "properties": { + "fetch_status": true, + "fetch_upstream_icon": true + } + } + ], + "final_space": true, + "version": 3, + "transient_prompt": { + "background": "transparent", + "foreground": "#ACB0BE", + "template": "{{ .Shell }}> " + } +} diff --git a/.config/rmpc/config.ron b/.config/rmpc/config.ron new file mode 100644 index 0000000..495fc42 --- /dev/null +++ b/.config/rmpc/config.ron @@ -0,0 +1,235 @@ +#![enable(implicit_some)] +#![enable(unwrap_newtypes)] +#![enable(unwrap_variant_newtypes)] +( + address: "127.0.0.1:6600", + password: None, + theme: None, + cache_dir: "/tmp/rmpc", + on_song_change: ["songinfo"], + volume_step: 5, + max_fps: 144, + scrolloff: 0, + wrap_navigation: false, + enable_mouse: true, + enable_config_hot_reload: true, + status_update_interval_ms: 1000, + rewind_to_start_sec: None, + reflect_changes_to_playlist: false, + select_current_song_on_change: false, + browser_song_sort: [Disc, Track, Artist, Title], + directories_sort: SortFormat(group_by_type: true, reverse: false), + keybinds: ( + global: { + ":": CommandMode, + ",": VolumeDown, + "s": Stop, + ".": VolumeUp, + "": NextTab, + "": PreviousTab, + "1": SwitchToTab("Queue"), + "2": SwitchToTab("Directories"), + "3": SwitchToTab("Artists"), + "4": SwitchToTab("Album Artists"), + "5": SwitchToTab("Albums"), + "6": SwitchToTab("Playlists"), + "7": SwitchToTab("Search"), + "q": Quit, + ">": NextTrack, + "p": TogglePause, + "<": PreviousTrack, + "f": SeekForward, + "z": ToggleRepeat, + "x": ToggleRandom, + "c": ToggleConsume, + "v": ToggleSingle, + "b": SeekBack, + "?": ShowHelp, + "u": Update, + "U": Rescan, + "I": ShowCurrentSongInfo, + "O": ShowOutputs, + "P": ShowDecoders, + "R": AddRandom, + }, + navigation: { + "k": Up, + "j": Down, + "h": Left, + "l": Right, + "": Up, + "": Down, + "": Left, + "": Right, + "": PaneUp, + "": PaneDown, + "": PaneLeft, + "": PaneRight, + "": UpHalf, + "N": PreviousResult, + "a": Add, + "A": AddAll, + "r": Rename, + "n": NextResult, + "g": Top, + "": Select, + "": InvertSelection, + "G": Bottom, + "": Confirm, + "i": FocusInput, + "J": MoveDown, + "": DownHalf, + "/": EnterSearch, + "": Close, + "": Close, + "K": MoveUp, + "D": Delete, + "B": ShowInfo, + }, + queue: { + "D": DeleteAll, + "": Play, + "": Save, + "a": AddToPlaylist, + "d": Delete, + "C": JumpToCurrent, + "X": Shuffle, + }, + ), + search: ( + case_sensitive: false, + mode: Contains, + tags: [ + (value: "any", label: "Any Tag"), + (value: "artist", label: "Artist"), + (value: "album", label: "Album"), + (value: "albumartist", label: "Album Artist"), + (value: "title", label: "Title"), + (value: "filename", label: "Filename"), + (value: "genre", label: "Genre"), + ], + ), + artists: ( + album_display_mode: SplitByDate, + album_sort_by: Date, + ), + default_album_art_path: None, + draw_borders: false, + show_song_table_header: false, + symbols: (song: "🎵", dir: "📁", playlist: "🎼", marker: "\u{e0b0}"), + layout: Split( + direction: Vertical, + panes: [ + ( + pane: Pane(Header), + size: "1", + ), + ( + pane: Pane(TabContent), + size: "100%", + ), + ( + pane: Pane(ProgressBar), + size: "1", + ), + ], + ), + progress_bar: ( + symbols: ["", "", "⭘", " ", " "], + track_style: (bg: "#1e2030"), + elapsed_style: (fg: "#c6a0f6", bg: "#1e2030"), + thumb_style: (fg: "#c6a0f6", bg: "#1e2030"), + ), + scrollbar: ( + symbols: ["│", "█", "▲", "▼"], + track_style: (), + ends_style: (), + thumb_style: (fg: "#b7bdf8"), + ), + browser_column_widths: [20, 38, 42], + text_color: "#cad3f5", + background_color: "#24273a", + header_background_color: "#1e2030", + modal_background_color: None, + modal_backdrop: false, + tab_bar: (active_style: (fg: "black", bg: "#c6a0f6", modifiers: "Bold"), inactive_style: ()), + borders_style: (fg: "#6e738d"), + highlighted_item_style: (fg: "#c6a0f6", modifiers: "Bold"), + current_item_style: (fg: "black", bg: "#b7bdf8", modifiers: "Bold"), + highlight_border_style: (fg: "#b7bdf8"), + song_table_format: [ + ( + prop: (kind: Property(Artist), style: (fg: "#b7bdf8"), default: (kind: Text("Unknown"))), + width: "50%", + alignment: Right, + ), + ( + prop: (kind: Text("-"), style: (fg: "#b7bdf8"), default: (kind: Text("Unknown"))), + width: "1", + alignment: Center, + ), + ( + prop: (kind: Property(Title), style: (fg: "#7dc4e4"), default: (kind: Text("Unknown"))), + width: "50%", + ), + ], + header: ( + rows: [ + ( + left: [ + (kind: Text("["), style: (fg: "#b7bdf8", modifiers: "Bold")), + (kind: Property(Status(State)), style: (fg: "#b7bdf8", modifiers: "Bold")), + (kind: Text("]"), style: (fg: "#b7bdf8", modifiers: "Bold")) + ], + center: [ + (kind: Property(Song(Artist)), style: (fg: "#eed49f", modifiers: "Bold"), + default: (kind: Text("Unknown"), style: (fg: "#eed49f", modifiers: "Bold")) + ), + (kind: Text(" - ")), + (kind: Property(Song(Title)), style: (fg: "#7dc4e4", modifiers: "Bold"), + default: (kind: Text("No Song"), style: (fg: "#7dc4e4", modifiers: "Bold")) + ) + ], + right: [ + (kind: Text("Vol: "), style: (fg: "#b7bdf8", modifiers: "Bold")), + (kind: Property(Status(Volume)), style: (fg: "#b7bdf8", modifiers: "Bold")), + (kind: Text("% "), style: (fg: "#b7bdf8", modifiers: "Bold")) + ] + ) + ], + ), + tabs: [ + ( + name: "Queue", + pane: Split( + direction: Horizontal, + panes: [(size: "60%", pane: Pane(Queue)), (size: "40%", pane: Pane(AlbumArt))], + ), + ), + ( + name: "Directories", + pane: Pane(Directories), + ), + ( + name: "Artists", + pane: Pane(Artists), + ), + ( + name: "Album Artists", + pane: Pane(AlbumArtists), + ), + ( + name: "Albums", + pane: Pane(Albums), + ), + ( + name: "Playlists", + pane: Pane(Playlists), + ), + ( + name: "Search", + pane: Pane(Search), + ), + ], +) + diff --git a/.config/uwsm/env b/.config/uwsm/env index 618946a..cfb3d5e 100644 --- a/.config/uwsm/env +++ b/.config/uwsm/env @@ -21,6 +21,7 @@ export GBM_BACKEND=nvidia-drm export __GLX_VENDOR_LIBRARY_NAME=nvidia export LIBVA_DRIVER_NAME=nvidia export __GL_GSYNC_ALLOWED=1 +export __GL_THREADED_OPTIMIZATIONS=0 export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx diff --git a/.config/waybar/catppuccin-macchiato/config.jsonc b/.config/waybar/catppuccin-macchiato/config.jsonc index ab10366..97c133b 100644 --- a/.config/waybar/catppuccin-macchiato/config.jsonc +++ b/.config/waybar/catppuccin-macchiato/config.jsonc @@ -157,13 +157,13 @@ "format-disconnected": "Disconnected ⚠", "on-click": "$HOME/.config/rofi/scripts/rofi-wifi-menu.sh", }, - "custom/weather": { - "interval": 600, - "exec": "~/.config/waybar/scripts/wttr.sh Los_Angeles", - "return-type": "json", - "format": "{}", - "tooltip": true, - }, + // "custom/weather": { + // "interval": 600, + // "exec": "~/.config/waybar/scripts/wttr.sh Los_Angeles", + // "return-type": "json", + // "format": "{}", + // "tooltip": true, + // }, "custom/kernel": { "exec": "uname -r | sed -E 's/^([0-9]+\\.[0-9]+\\.[0-9]+)-.*-([a-zA-Z0-9]+)/\\1-\\2/'", "format": "{} ", diff --git a/.config/waybar/catppuccin-macchiato/style.css b/.config/waybar/catppuccin-macchiato/style.css index e6c6def..44f1641 100644 --- a/.config/waybar/catppuccin-macchiato/style.css +++ b/.config/waybar/catppuccin-macchiato/style.css @@ -213,6 +213,7 @@ label:focus { /* background-color: @overlay0; */ background-color: @surface0; color: @mantle; + margin: 5px 3px 5px 1px; } #tray > .passive { @@ -273,7 +274,7 @@ label:focus { color: @mantle; background-color: @peach; padding: 0 10px; - margin: 5px 1px; + margin: 5px 5px 5px 1px; } #cava { @@ -310,7 +311,7 @@ label:focus { background-color: @flamingo; color: @base; padding: 0 10px; - margin: 5px 1px; + margin: 5px 5px 5px 1px; } #custom-notification { diff --git a/.zsh/.zshrc##default b/.zsh/.zshrc##default index af48827..28cc42e 100644 --- a/.zsh/.zshrc##default +++ b/.zsh/.zshrc##default @@ -46,7 +46,6 @@ bindkey -M vicmd '^[[A' history-substring-search-up bindkey -M vicmd '^[[B' history-substring-search-down bindkey '^ ' autosuggest-accept - # The following lines were added by compinstall zstyle ':completion:*' completer _complete _ignored _match _approximate @@ -63,4 +62,13 @@ zstyle :compinstall filename /home/sudacode/.zsh/.zshrc autoload -Uz compinit compinit -# End of lines added by compinstall + +# load both the URL‐quoting and paste‐magic widgets +autoload -Uz url-quote-magic bracketed-paste-magic + +# tell url-quote-magic which chars to escape +zstyle ':url-quote-magic:*' url-quotes '' + +# bind it to both typing and pasting +zle -N self-insert url-quote-magic +zle -N bracketed-paste bracketed-paste-magic diff --git a/.zsh/.zshrc##os.Darwin b/.zsh/.zshrc##os.Darwin index af3ac1d..9ec8942 100644 --- a/.zsh/.zshrc##os.Darwin +++ b/.zsh/.zshrc##os.Darwin @@ -48,4 +48,13 @@ zstyle :compinstall filename '/Users/sudacode/.zshrc' autoload -Uz compinit compinit -# End of lines added by compinstall + +# load both the URL‐quoting and paste‐magic widgets +autoload -Uz url-quote-magic bracketed-paste-magic + +# tell url-quote-magic which chars to escape +zstyle ':url-quote-magic:*' url-quotes '' + +# bind it to both typing and pasting +zle -N self-insert url-quote-magic +zle -N bracketed-paste bracketed-paste-magic diff --git a/README.md b/README.md index bf29a48..1d6f710 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ - [hyprland.conf](.config/hypr/hyprland.conf) - [keybindings.conf](.config/hypr/keybindings.conf) - Shell: [zsh (oh-my-posh)](https://ohmyposh.dev/) - - [.zshrc](.zsh/.zshrc) + - [.zshrc](.zsh/.zshrc##default) - Notification Server: [SwayNotificationCenter](https://github.com/ErikReider/SwayNotificationCenter) - [config.json](.config/swaync/config.json) - [style.css](.config/swaync/style.css) @@ -22,7 +22,7 @@ - Text Editor: [neovim](https://neovim.io/) - [config](.config/nvim) - Audio Player: [mpd](https://www.musicpd.org/) with [ncmpcpp](https://github.com/ncmpcpp/ncmpcpp) - - [mpd config](.config/mpd/mpd.conf) - - [ncmpcpp config](.config/ncmpcpp/config) + - [mpd config](.config/mpd/mpd.conf##default) + - [ncmpcpp config](.config/ncmpcpp/config##Default) - Audio Visualizer: [cava](https://github.com/karlstav/cava) - - [cava config](.config/cava/config) + - [cava config](.config/cava/config##default) diff --git a/projects/go/change-wallpaper/change-wallpaper.go b/projects/go/change-wallpaper/change-wallpaper.go index 9663ce9..819bb93 100644 --- a/projects/go/change-wallpaper/change-wallpaper.go +++ b/projects/go/change-wallpaper/change-wallpaper.go @@ -11,6 +11,7 @@ import ( "os/exec" "path/filepath" "regexp" + "sort" "strings" "time" ) @@ -21,29 +22,42 @@ const ( ) type Config struct { - Topics []string `json:"topics"` + Topics []string `json:"topics"` + Keep int `json:"keep"` // Number of wallpapers to keep (0 = never delete) + WallpaperDir string `json:"wallpaperDir"` // Directory to store wallpapers } var defaultTopics = []string{ "lofi", } -func loadConfig() []string { +const defaultKeep = 10 + +func loadConfig() (topics []string, keep int, wallpaperDir string) { homeDir, err := os.UserHomeDir() if err != nil { - return defaultTopics + return defaultTopics, defaultKeep, wallpaperDir } configPath := filepath.Join(homeDir, ".config", "change-wallpaper", "config.json") file, err := os.Open(configPath) if err != nil { - return defaultTopics + return defaultTopics, defaultKeep, wallpaperDir } defer file.Close() var cfg Config - if err := json.NewDecoder(file).Decode(&cfg); err != nil || len(cfg.Topics) == 0 { - return defaultTopics + if err := json.NewDecoder(file).Decode(&cfg); err != nil { + return defaultTopics, defaultKeep, wallpaperDir } - return cfg.Topics + if len(cfg.Topics) == 0 { + cfg.Topics = defaultTopics + } + if cfg.Keep < 0 { + cfg.Keep = defaultKeep + } + if cfg.WallpaperDir == "" { + cfg.WallpaperDir = wallpaperDir + } + return cfg.Topics, cfg.Keep, cfg.WallpaperDir } type WallhavenResponse struct { @@ -57,7 +71,7 @@ func main() { r := rand.New(rand.NewSource(time.Now().UnixNano())) // Load topics from config or use defaults - topics := loadConfig() + topics, keep, configWallpaperDir := loadConfig() // Check if a file path was provided as argument if len(os.Args) > 1 { @@ -75,14 +89,26 @@ func main() { os.Exit(1) } - wallpaperPath := filepath.Join(homeDir, wallpaperDir) + // Use config wallpaper directory if set, otherwise use default + var wallpaperPath string + if configWallpaperDir != "" { + if strings.HasPrefix(configWallpaperDir, "~/") { + wallpaperPath = filepath.Join(homeDir, configWallpaperDir[2:]) + } else if configWallpaperDir == "~" { + wallpaperPath = homeDir + } else { + wallpaperPath = configWallpaperDir + } + } else { + wallpaperPath = filepath.Join(homeDir, wallpaperDir) + } if err := os.MkdirAll(wallpaperPath, 0755); err != nil { fmt.Fprintf(os.Stderr, "Error creating wallpaper directory: %v\n", err) os.Exit(1) } // Download and set new wallpaper - newWallpaper, topic := downloadRandomWallpaper(wallpaperPath, r, topics) + newWallpaper, topic := downloadRandomWallpaper(wallpaperPath, r, topics, keep) if newWallpaper != "" { changeWallpaper(newWallpaper, topic) } else { @@ -91,7 +117,33 @@ func main() { } } -func downloadRandomWallpaper(wallpaperPath string, r *rand.Rand, topics []string) (string, string) { +func downloadRandomWallpaper(wallpaperPath string, r *rand.Rand, topics []string, keep int) (string, string) { + // Clean up old wallpapers before downloading a new one, if keep > 0 + if keep > 0 { + files, err := os.ReadDir(wallpaperPath) + if err == nil && len(files) > keep { + type fileInfo struct { + name string + mod int64 + } + var fileInfos []fileInfo + for _, f := range files { + if !f.IsDir() { + info, err := f.Info() + if err == nil { + fileInfos = append(fileInfos, fileInfo{f.Name(), info.ModTime().Unix()}) + } + } + } + // Sort by mod time, newest first + sort.Slice(fileInfos, func(i, j int) bool { return fileInfos[i].mod > fileInfos[j].mod }) + for _, f := range fileInfos[keep:] { + os.Remove(filepath.Join(wallpaperPath, f.name)) + } + } + } + // If keep == 0, never delete + // Select random topic topic := topics[r.Intn(len(topics))] var query string