├── .bashrc ├── .config ├── Kvantum │ ├── Layan │ │ ├── Layan.kvconfig │ │ ├── Layan.svg │ │ ├── LayanDark.kvconfig │ │ └── LayanDark.svg │ ├── LayanSolid │ │ ├── LayanSolid.kvconfig │ │ ├── LayanSolid.svg │ │ ├── LayanSolidDark.kvconfig │ │ └── LayanSolidDark.svg │ └── kvantum.kvconfig ├── MangoHud │ └── MangoHud.conf ├── aria2 │ └── aria2.conf ├── brave-flags.conf ├── bspwm │ └── bspwmrc ├── celluloid │ ├── script-opts │ │ └── youtube-quality.conf │ └── scripts │ │ ├── ftp-compat.lua │ │ ├── music-mode.lua │ │ ├── pause-indicator.lua │ │ └── youtube-quality.lua ├── chromium-flags ├── cmus │ ├── autosave │ ├── cache │ ├── command-history │ ├── lib.pl │ ├── playlists │ │ └── default │ └── search-history ├── dunst │ ├── dunst │ │ └── dunstrc │ └── dunstrc ├── environment.d │ └── firefox-wayland.conf ├── fastfetch │ ├── config.jsonc │ └── pngs │ │ └── sed.png ├── gtk-2.0 │ └── gtkfilechooser.ini ├── gtk-3.0 │ ├── colors.css │ ├── gtk.css │ ├── gtk.css.bak │ └── settings.ini ├── gtk-4.0 │ ├── colors.css │ ├── gtk.css │ ├── gtk.css.bak │ └── settings.ini ├── hypr │ ├── hypridle.conf │ ├── hyprland.conf │ ├── hyprlock.conf │ ├── hyprpaper.conf │ ├── keybinds.conf │ ├── multi-keybinds.conf │ ├── plugins │ │ └── hyprland-dwindle-group │ │ │ └── dwindle-autogroup.so │ ├── pyprland.toml │ └── wallpaper.conf ├── kitty │ ├── colors.conf │ ├── kitty.conf │ ├── kitty.conf.user │ ├── sed.conf │ └── tokyonight.conf ├── lf │ ├── clean │ ├── colors │ ├── icons │ ├── kitty_clean │ ├── lfrc │ └── scope ├── mako │ └── config ├── mpv │ ├── mpv.conf │ ├── script-opts │ │ └── youtube-quality.conf │ ├── scripts │ │ ├── ftp-compat.lua │ │ ├── mpris.so │ │ ├── music-mode.lua │ │ ├── pause-indicator.lua │ │ └── youtube-quality.lua │ └── watch_later │ │ ├── 1001CD91972AD0BFEBDE40DE070C2C52 │ │ ├── 1C03EC46408C0AC9AB60EDC0DD52FDD6 │ │ ├── 2F9D2CF6722DF51D33F3E4539ED4D4F0 │ │ ├── 301AA0E5831897CD935AF3CF8D50B8DF │ │ ├── 332020D77342F06F10949C5DE784360D │ │ ├── 405099E50B49A28B480ECA8761CF94E3 │ │ ├── 5F73DF00080288F2FC6C4B886EE09A6C │ │ ├── 603FA6CB2CFE839D188424DD9978B5CC │ │ ├── 617334BFE797FA9008CFBF9F95049D8E │ │ ├── 61AE8A680E7EC2AB93299C5FBE3AD15C │ │ ├── 7BE2BBCD5E10C8F7C3EC44BA0D40435D │ │ ├── 7EE4BFCF68C740BB07C7117A7B274087 │ │ ├── 80FEC9C0E62EA155FE80949870F01699 │ │ ├── 8976669FF64CDE6939CAE917311C58B5 │ │ ├── 8CC39C215D3DEB3C036E97FA170AB53F │ │ ├── 8D1C18CB3488083AA16C60A6E17CCED8 │ │ ├── A434265E18E00C76D821B13FBB24473C │ │ ├── A62D30ACE2E89FE6ADC9EF3D9E633C93 │ │ ├── C8ED29C959815C340CE974D53D30178F │ │ ├── DDA6F510D421BA4C14CB568291A7AAB6 │ │ ├── E199B4EE17F01CD20EEBE3377F53DC15 │ │ ├── E511A568B44DF29D9001F1FCA38AADEB │ │ ├── E7A7562B0D00C18246EAA8CC0DCBCA12 │ │ ├── EF342B5B471D92D9E606F7964DD7F397 │ │ └── FFDDD038CAA56E7C6BE793701A8E2EDA ├── ncspot │ ├── config.toml │ └── userstate.cbor ├── neofetch │ └── config.conf ├── nvim │ ├── .stylua.toml │ ├── LICENSE │ ├── README.md │ ├── init.lua │ ├── lazy-lock.json │ └── lua │ │ ├── chadrc.lua │ │ ├── configs │ │ ├── conform.lua │ │ ├── lazy.lua │ │ └── lspconfig.lua │ │ ├── highlights.lua │ │ ├── mappings.lua │ │ ├── myinit.lua │ │ ├── options.lua │ │ └── plugins │ │ └── init.lua ├── nvtop │ └── interface.ini ├── pipewire │ ├── pipewire-pulse.conf.d │ │ └── switch-on-connect.conf │ └── pipewire.conf.d │ │ └── 99-input-denoising.conf ├── polybar │ └── config.ini ├── qtile │ ├── __pycache__ │ │ ├── colors.cpython-39.pyc │ │ └── config.cpython-39.pyc │ ├── autostart.sh │ ├── config.py │ └── configdad.py ├── ranger │ ├── commands.py │ ├── commands_full.py │ ├── rc.conf │ ├── rifle.conf │ └── scope.sh ├── rofi │ ├── cat.rasi │ ├── catpuch.rasi │ ├── clip.rasi │ ├── emoji.rasi │ ├── launcher.rasi │ ├── shared │ │ ├── colors.rasi │ │ └── fonts.rasi │ └── wall.rasi ├── starship.toml ├── sway │ └── config ├── swaync │ ├── config.json │ └── style.css ├── sxhkd │ └── sxhkdrc ├── systemd │ └── user │ │ ├── aria2c.service │ │ └── sunshine.service ├── thorium-flags.conf ├── tmux │ ├── tmux.conf │ └── tmux_renumber.sh ├── waybar │ ├── config.jsonc │ └── style.css ├── wlogout │ ├── layout │ └── style.css ├── xdg-desktop-portal │ └── hyprland-portals.conf ├── yazi │ ├── keybinds.conf │ ├── theme.toml │ └── yazi.toml ├── zathura │ └── zathurarc └── zed │ ├── .tmp3KNyBK │ ├── .tmpCi2tQJ │ ├── .tmpG8NiLr │ ├── .tmpHcPNeU │ ├── .tmpMkffHP │ ├── .tmpMpKFMA │ ├── .tmpNRmI29 │ ├── .tmpP7a20T │ ├── .tmpQ8z6Nd │ ├── .tmpQaOfEB │ ├── .tmpQzjyN6 │ ├── .tmpThVuxK │ ├── .tmpTua96k │ ├── .tmpTvGa5B │ ├── .tmpTwbP3F │ ├── .tmpWjD73S │ ├── .tmpe182IJ │ ├── .tmpfkLAg1 │ ├── .tmphYEJnz │ ├── .tmpi7LpJO │ ├── .tmpm7gL1E │ ├── .tmpmRTXF9 │ ├── .tmpnuOk1M │ ├── .tmpoca0lH │ ├── .tmpq2ck3c │ ├── .tmprR6qnH │ ├── .tmputBCyT │ ├── .tmpyCL22x │ ├── .tmpyUpQ9F │ ├── keymap.json │ └── settings.json ├── .ignore ├── .prettierrc.toml ├── .scripts ├── a_good_screenshoting_method_unlike_shitty_gnome_shell_one.sh ├── adb.sh ├── battery.sh ├── border.sh ├── brightness_ctl.sh ├── clip.sh ├── dec.sh ├── decorations.sh ├── flickerborder.sh ├── grim_ocr.sh ├── grimblast.sh ├── gsettings ├── gsettings.sh ├── hyprland_floating_monitor.sh ├── iommu.sh ├── ipv6.sh ├── keybinds-rofi.sh ├── lfub ├── lock.sh ├── maim_ocr.sh ├── mic.sh ├── normal.sh ├── ocr.sh ├── pasters.sh ├── playerctl.sh ├── portals.sh ├── powerprofilecycle.sh ├── proton.sh ├── record-screen.sh ├── reddit-wallpaper-downloader.sh ├── rofi-network-manager.sh ├── sed ├── sleep.sh ├── start-windows.sh ├── status.sh ├── swap-workspace.sh ├── swaybg.sh ├── vfio.sh ├── volume_ctl.sh ├── wallpaper.sh └── wf-rec ├── .vimrc ├── .xbindkeysrc ├── .zshrc ├── README.md ├── binds.kksrc ├── gnome-settings.dconf ├── hmm ├── Google Sans Text │ ├── Google Sans Text Bold Italic.ttf │ ├── Google Sans Text Bold.ttf │ ├── Google Sans Text Italic.ttf │ ├── Google Sans Text Medium Italic.ttf │ ├── Google Sans Text Medium.ttf │ └── Google Sans Text Regular.ttf ├── JetBrains Mono Medium Nerd Font Complete.ttf ├── Product Sans Regular.ttf ├── bat └── black.qbtheme ├── init.lua ├── python plugins ├── academictorrents.py ├── anidex.py ├── bt4g.py ├── btetree.py ├── btmulu.py ├── cinecalidad.py ├── cpasbien.py ├── darklibria.py ├── dmhyorg.py ├── elitetorrent.py ├── ettv.py ├── extratorrent.py ├── glotorrents.py ├── ilcorsaronero.py ├── kickass_torrent.py ├── linuxtracker.py ├── magnetdl.py ├── maxitorrent.py ├── mejor.py ├── nyaapantsu.py ├── nyaasi.py ├── one337x.py ├── oxtorrent.py ├── pantsu.py ├── pctmix.py ├── pctreload.py ├── rutor.py ├── smallgames.py ├── snowfl.py ├── torrentfunk.py ├── yourbittorrent.py ├── yts.py └── yts_am.py ├── tilde.html └── win10.xml /.bashrc: -------------------------------------------------------------------------------- 1 | # .bashrc 2 | 3 | # Source global definitions 4 | if [ -f /etc/bashrc ]; then 5 | . /etc/bashrc 6 | fi 7 | 8 | # User specific environment 9 | if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]] 10 | then 11 | PATH="$HOME/.local/bin:$HOME/bin:$PATH" 12 | fi 13 | export PATH 14 | # EXPORTS 15 | export LANG=en_US.UTF-8 16 | export EDITOR='nvim' 17 | export VISUAL='nvim' 18 | export MANPAGER='nvim +Man!' 19 | export BROWSER='firefox' 20 | export TRUEBROWSER='firefox' 21 | export BAT_THEME='base16-256' 22 | export PATH 23 | 24 | # The prompt in a somewhat Terminal -type independent manner: 25 | cname="$(tput setf 3)" 26 | csgn="$(tput setf 4)" 27 | chost="$(tput setf 2)" 28 | cw="$(tput setf 6)" 29 | crst="$(tput sgr 0)" 30 | PS1="\[${cname}\]\u\[${csgn}\]@\[${chost}\]\h:\[${cw}\]\w\[${csgn}\]\$\[${crst}\] " 31 | 32 | 33 | #file extraction 34 | ex () 35 | { 36 | if [ -f $1 ] ; then 37 | case $1 in 38 | *.tar.bz2) tar xjf $1 ;; 39 | *.tar.gz) tar xzf $1 ;; 40 | *.bz2) bunzip2 $1 ;; 41 | *.rar) unrar x $1 ;; 42 | *.gz) gunzip $1 ;; 43 | *.tar) tar xf $1 ;; 44 | *.tbz2) tar xjf $1 ;; 45 | *.tgz) tar xzf $1 ;; 46 | *.zip) unzip $1 ;; 47 | *.Z) uncompress $1;; 48 | *.7z) 7z x $1 ;; 49 | *.deb) ar x $1 ;; 50 | *.tar.xz) tar xf $1 ;; 51 | *.tar.zst) unzstd $1 ;; 52 | *) echo "'$1' cannot be extracted" ;; 53 | esac 54 | else 55 | echo "'$1' is not a valid file" 56 | fi 57 | } 58 | 59 | # Uncomment the following line if you don't like systemctl's auto-paging feature: 60 | # Alias's for multiple directory listing commands 61 | alias ll='ls -Alh' # show hidden files 62 | alias la='ls -aFh --color=always' # add colors and file type extensions 63 | alias lx='ls -lXBh' # sort by extension 64 | alias lk='ls -lSrh' # sort by size 65 | alias lc='ls -lcrh' # sort by change time 66 | alias lu='ls -lurh' # sort by access time 67 | alias lr='ls -lRh' # recursive ls 68 | alias lt='ls -ltrh' # sort by date 69 | alias vim="nvim" 70 | alias topcpu="/bin/ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10" 71 | unset rc 72 | 73 | eval "$(starship init bash)" 74 | 75 | 76 | # BEGIN_KITTY_SHELL_INTEGRATION 77 | if test -n "$KITTY_INSTALLATION_DIR" -a -e "$KITTY_INSTALLATION_DIR/shell-integration/bash/kitty.bash"; then source "$KITTY_INSTALLATION_DIR/shell-integration/bash/kitty.bash"; fi 78 | # END_KITTY_SHELL_INTEGRATION 79 | export PATH="$HOME/bin:$PATH" 80 | -------------------------------------------------------------------------------- /.config/Kvantum/kvantum.kvconfig: -------------------------------------------------------------------------------- 1 | [General] 2 | theme=LayanDark 3 | -------------------------------------------------------------------------------- /.config/MangoHud/MangoHud.conf: -------------------------------------------------------------------------------- 1 | ################### File Generated by Goverlay ################### 2 | legacy_layout=false 3 | 4 | 5 | background_alpha=0.6 6 | round_corners=10 7 | background_alpha=0.6 8 | background_color=000000 9 | 10 | font_size=24 11 | text_color=FFFFFF 12 | position=top-left 13 | 14 | hud_compact 15 | 16 | table_columns=3 17 | gpu_text=GPU 18 | gpu_stats 19 | gpu_load_change 20 | gpu_load_value=50,90 21 | gpu_load_color=FFFFFF,FFAA7F,CC0000 22 | gpu_voltage 23 | throttling_status 24 | gpu_core_clock 25 | gpu_mem_clock 26 | gpu_temp 27 | gpu_mem_temp 28 | gpu_junction_temp 29 | gpu_fan 30 | gpu_power 31 | gpu_color=2E9762 32 | cpu_text=CPU 33 | cpu_stats 34 | core_load 35 | 36 | cpu_load_change 37 | cpu_load_value=50,90 38 | cpu_load_color=FFFFFF,FFAA7F,CC0000 39 | cpu_mhz 40 | cpu_temp 41 | cpu_power 42 | cpu_color=2E97CB 43 | io_stats 44 | io_read 45 | io_write 46 | swap 47 | vram 48 | vram_color=AD64C1 49 | ram 50 | ram_color=C26693 51 | procmem 52 | battery 53 | battery_color=00FF00 54 | battery_watt 55 | battery_time 56 | fps 57 | fps_metrics=avg,0.01 58 | engine_version 59 | engine_color=EB5B5B 60 | gpu_name 61 | vulkan_driver 62 | arch 63 | wine 64 | wine_color=EB5B5B 65 | frame_timing 66 | frametime_color=00FF00 67 | throttling_status_graph 68 | frame_count 69 | fps_limit_method=late 70 | toggle_fps_limit=Shift_L+F1 71 | show_fps_limit 72 | 73 | fps_limit=0 74 | resolution 75 | fsr 76 | hdr 77 | winesync 78 | present_mode 79 | refresh_rate 80 | gamemode 81 | vkbasalt 82 | device_battery=gamepad,mouse 83 | device_battery_icon 84 | custom_text=Arch Linux 85 | exec=lsb_release -a | grep Release | uniq | cut -c 10-26 86 | custom_text=Kernel 87 | exec=uname -r 88 | custom_text=Session: 89 | exec=echo $XDG_SESSION_TYPE 90 | fps_color_change 91 | fps_color=B22222,FDFD09,39F900 92 | fps_value=30,60 93 | #offset=0 94 | vsync=1 95 | 96 | 97 | 98 | 99 | time# 100 | version 101 | media_player 102 | media_player_color=FFFF00 103 | 104 | 105 | output_folder=/home/adharsh 106 | log_duration=30 107 | autostart_log=0 108 | log_interval=100 109 | toggle_logging=Shift_L+F2 110 | 111 | -------------------------------------------------------------------------------- /.config/aria2/aria2.conf: -------------------------------------------------------------------------------- 1 | dir=${HOME}/Downloads 2 | 3 | # log="${HOME}/.config/aria2/aria2.log" 4 | # input-file="${HOME}/.config/aria2/aria2.session" 5 | # save-session="${HOME}/.config/aria2/aria2.session" 6 | # dht-file-path6="${HOME}/.config/aria2/dht6.dat" 7 | # dht-file-path="${HOME}/.config/aria2/dht.dat" 8 | # load-cookies="${HOME}/.config/aria2/cookies.sqlite" 9 | 10 | #----------------------- 11 | disk-cache=32M 12 | file-allocation=none 13 | continue=true 14 | max-concurrent-downloads=10 15 | max-connection-per-server=16 16 | min-split-size=10M 17 | split=16 18 | disable-ipv6=true 19 | save-session-interval=60 20 | enable-rpc=true 21 | #rpc-secret= 22 | rpc-listen-port=6800 23 | rpc-allow-origin-all=true 24 | #rpc-listen-all=true 25 | follow-torrent=true 26 | listen-port=51413 27 | bt-max-peers=100 28 | enable-dht=true 29 | enable-dht6=true 30 | dht-listen-port=6966 31 | enable-peer-exchange=true 32 | peer-id-prefix=-TR2770- 33 | peer-agent=Transmission/2.77 34 | user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:119.0) Gecko/20100101 Firefox/119.0 35 | seed-ratio=0 36 | bt-hash-check-seed=true 37 | bt-seed-unverified=true 38 | bt-save-metadata=false 39 | 40 | -------------------------------------------------------------------------------- /.config/brave-flags.conf: -------------------------------------------------------------------------------- 1 | --enable-features=UseOzonePlatform 2 | --ozone-platform-hint=auto 3 | --enable-features=WebRTCPipeWireCapturer 4 | --enable-features=WaylandWindowDecorations 5 | --enable-features=TouchpadOverscrollHistoryNavigation 6 | --enable-features=AcceleratedVideoDecodeLinuxGL,AcceleratedVideoEncoder,VaapiVideoDecoder,VaapiIgnoreDriverChecks 7 | --password-store=basic 8 | --enable-gpu-rasterization 9 | -------------------------------------------------------------------------------- /.config/bspwm/bspwmrc: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | pgrep -x sxhkd > /dev/null || sxhkd & 4 | polybar & 5 | picom -b & 6 | libinput-gestures-setup start & 7 | # xcompmgr -c & 8 | xset r rate 300 50 & 9 | 10 | /usr/lib/polkit-kde-authentication-agent-1 & 11 | export _JAVA_AWT_WM_NONREPARENTING=1 & 12 | export _JAVA_AWT_WM_NONREPARENTING=1 & 13 | xsetroot -cursor_name left_ptr & 14 | feh --bg-scale ~/Pictures/aesthetic-wallpapers/images/moon.png & 15 | 16 | bspc monitor -d 1 2 3 4 5 6 7 8 9 17 | 18 | bspc config border_width 2 19 | bspc config window_gap 4 20 | 21 | bspc config split_ratio 0.52 22 | bspc config borderless_monocle true 23 | bspc config gapless_monocle true 24 | 25 | bspc config normal_border_color "#4c566a" 26 | bspc config active_border_color "#1e1e1e" 27 | bspc config focused_border_color "#5e81ac" 28 | bspc config presel_feedback_color "#5e81ac" 29 | bspc config urgent_border_color "#dd2727" 30 | 31 | 32 | bspc config pointer_modifier mod1 33 | bspc config pointer_action1 move 34 | bspc config pointer_action2 resize_side 35 | bspc config pointer_action2 resize_corner 36 | 37 | bspc rule -a WebCord desktop='^4' 38 | bspc rule -a mpv state=floating 39 | bspc rule -a vesktop='^5' 40 | -------------------------------------------------------------------------------- /.config/celluloid/script-opts/youtube-quality.conf: -------------------------------------------------------------------------------- 1 | # KEY BINDINGS 2 | 3 | # invoke or dismiss the quality menu 4 | toggle_menu_binding=ctrl+m 5 | # move the menu cursor up 6 | up_binding=UP 7 | # move the menu cursor down 8 | down_binding=DOWN 9 | # select menu entry 10 | select_binding=ENTER 11 | 12 | # formatting / cursors 13 | selected_and_active=▶ - 14 | selected_and_inactive=● - 15 | unselected_and_active=▷ - 16 | unselected_and_inactive=○ - 17 | 18 | # font size scales by window, if false requires larger font and padding sizes 19 | scale_playlist_by_window=no 20 | 21 | # playlist ass style overrides inside curly brackets, \keyvalue is one field, extra \ for escape in lua 22 | # example {\\fnUbuntu\\fs10\\b0\\bord1} equals: font=Ubuntu, size=10, bold=no, border=1 23 | # read http://docs.aegisub.org/3.2/ASS_Tags/ for reference of tags 24 | # undeclared tags will use default osd settings 25 | # these styles will be used for the whole playlist. More specific styling will need to be hacked in 26 | # 27 | # (a monospaced font is recommended but not required) 28 | style_ass_tags={\\fnmonospace} 29 | 30 | # paddings for top left corner 31 | text_padding_x=5 32 | text_padding_y=5 33 | 34 | # how many seconds until the quality menu times out 35 | menu_timeout=10 36 | 37 | #use youtube-dl to fetch a list of available formats (overrides quality_strings) 38 | fetch_formats=yes 39 | 40 | # list of ytdl-format strings to choose from 41 | quality_strings=[ {"4320p" : "bestvideo[height<=?4320p]+bestaudio/best"}, {"2160p" : "bestvideo[height<=?2160]+bestaudio/best"}, {"1440p" : "bestvideo[height<=?1440]+bestaudio/best"}, {"1080p" : "bestvideo[height<=?1080]+bestaudio/best"}, {"720p" : "bestvideo[height<=?720]+bestaudio/best"}, {"480p" : "bestvideo[height<=?480]+bestaudio/best"}, {"360p" : "bestvideo[height<=?360]+bestaudio/best"}, {"240p" : "bestvideo[height<=?240]+bestaudio/best"}, {"144p" : "bestvideo[height<=?144]+bestaudio/best"} ] 42 | -------------------------------------------------------------------------------- /.config/celluloid/scripts/ftp-compat.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | This script dynamically changes some settings at runtime while playing files over the ftp protocol 3 | available at: https://github.com/CogentRedTester/mpv-scripts 4 | 5 | Settings currently changed: 6 | 7 | - converts filepaths taken directly from a browser into a string format readable by mpv 8 | -e.g. "ftp://test%20ing" would become "ftp://test ing" 9 | 10 | - if a directory is loaded it attempts to open a playlist file inside it (default is .folder.m3u) 11 | ]]-- 12 | 13 | local mp = require 'mp' 14 | local opt = require 'mp.options' 15 | local msg = require 'mp.msg' 16 | 17 | --add options using script-opts=ftp_compat-option=value 18 | local o = { 19 | directory_playlist = '.folder.m3u', 20 | } 21 | 22 | opt.read_options(o, 'ftp_compat') 23 | 24 | local path 25 | 26 | --decodes a URL address 27 | --this piece of code was taken from: https://stackoverflow.com/questions/20405985/lua-decodeuri-luvit/20406960#20406960 28 | local decodeURI 29 | do 30 | local char, gsub, tonumber = string.char, string.gsub, tonumber 31 | local function _(hex) return char(tonumber(hex, 16)) end 32 | 33 | function decodeURI(s) 34 | msg.debug('decoding string: ' .. s) 35 | s = gsub(s, '%%(%x%x)', _) 36 | msg.debug('returning string: ' .. s) 37 | return s 38 | end 39 | end 40 | 41 | --runs all of the custom parsing operations for ftp filenames 42 | local function fixFtpPath() 43 | --converts the path into a valid string 44 | path = path:gsub([[\]],[[/]]) 45 | path = decodeURI(path) 46 | 47 | --if the path ends in a '/' then we consider it a directory 48 | if not path:match("/[^/]+$") then 49 | msg.info('directory loaded - attempting to load playlist file') 50 | path = path .. o.directory_playlist 51 | end 52 | 53 | mp.set_property('stream-open-filename', path) 54 | end 55 | 56 | --tests if the file being opened uses the ftp protocol to set custom settings 57 | local function testFTP() 58 | msg.verbose('checking for ftp protocol') 59 | path = mp.get_property('stream-open-filename') 60 | 61 | if path:find("ftp://") == 1 then 62 | msg.info('ftp protocol detected - attempting to fix path') 63 | fixFtpPath() 64 | end 65 | end 66 | 67 | --attempts to fix the path on mpv fail 68 | mp.add_hook('on_load_fail', 50, testFTP) 69 | 70 | --script messages for loading ftp tracks as external files 71 | mp.register_script_message('ftp/video-add', function(path, flags) 72 | if flags then 73 | mp.commandv('video-add', decodeURI(path), flags) 74 | else 75 | mp.commandv('video-add', decodeURI(path)) 76 | end 77 | end) 78 | 79 | mp.register_script_message('ftp/audio-add', function(path,flags) 80 | if flags then 81 | mp.commandv('audio-add', decodeURI(path), flags) 82 | else 83 | mp.commandv('audio-add', decodeURI(path)) 84 | end 85 | end) 86 | 87 | mp.register_script_message('ftp/sub-add', function(path,flags) 88 | if flags then 89 | mp.commandv('sub-add', decodeURI(path), flags) 90 | else 91 | mp.commandv('sub-add', decodeURI(path)) 92 | end 93 | end) -------------------------------------------------------------------------------- /.config/celluloid/scripts/pause-indicator.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | Prints a pause icon in the middle of the screen when mpv is paused 3 | available at: https://github.com/CogentRedTester/mpv-scripts 4 | ]]-- 5 | 6 | local mp = require 'mp' 7 | local ov = mp.create_osd_overlay('ass-events') 8 | ov.data = [[{\an5\p1\alpha&H79\1c&H0000&\3a&Hff}]] .. 9 | [[m30 15 b37 8 112 8 117 15 b125 22 125 75 118 82 b112 89 38 89 30 82 b23 75 23 22 30 15 m76 108]] .. 10 | [[{\alpha&H10\1c&Hffffff&\3a&Hff} m-45 -25 l 2 2 l -45 28{\p0}]] 11 | 12 | mp.observe_property('pause', 'bool', function(_, paused) 13 | mp.add_timeout(0.1, function() 14 | if paused then ov:update() 15 | else ov:remove() end 16 | end) 17 | end) 18 | -------------------------------------------------------------------------------- /.config/chromium-flags: -------------------------------------------------------------------------------- 1 | --ozone-platform-hint=auto 2 | --ignore-gpu-blocklist 3 | --enable-gpu-rasterization 4 | --enable-zero-copy 5 | --enable-features=VaapiVideoDecoder -------------------------------------------------------------------------------- /.config/cmus/cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/cmus/cache -------------------------------------------------------------------------------- /.config/cmus/command-history: -------------------------------------------------------------------------------- 1 | add ~/Music/ 2 | clear 3 | cleaer 4 | q 5 | r 6 | Add ~/Music/ 7 | add /mnt/1284DEF384DED875/setup/repacks/Kanye West, Ty Dolla $ign - VULTURES 1 (2024) [24Bit-48kHz] FLAC [PMEDIA] ⭐️/ 8 | add Music/spotify_playlist/ 9 | Q 10 | add *.mp3 11 | add Music/music/ 12 | live-filter 13 | -------------------------------------------------------------------------------- /.config/cmus/playlists/default: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/cmus/playlists/default -------------------------------------------------------------------------------- /.config/cmus/search-history: -------------------------------------------------------------------------------- 1 | tkt 2 | whi 3 | vivi 4 | ed shee 5 | hime 6 | ai hig 7 | jujui 8 | rise 9 | tkat 10 | takt 11 | op 12 | april 13 | you lie 14 | you lir 15 | gta 16 | zan 17 | noragami 18 | darli 19 | mei 20 | impa 21 | swor 22 | be pre 23 | fell 24 | army 25 | zank 26 | fell in 27 | ED 28 | your ba 29 | fell in 30 | mood 31 | doja 32 | gta 33 | love nwa 34 | camel 35 | redo of 36 | luv 37 | redo 38 | pink 39 | ace 40 | 2 41 | sandy 42 | sand 43 | cale 44 | kime 45 | Kime 46 | demon 47 | gta v 48 | mob 49 | jojo 50 | dive 51 | bar 52 | ba 53 | after 54 | you spin 55 | glass 56 | dark hors 57 | playbo 58 | lass 59 | for 60 | cry 61 | domestic 62 | minami 63 | kimi n 64 | katy 65 | katy 66 | dragostea 67 | holi 68 | lil 69 | lil nas 70 | luis 71 | came 72 | camel 73 | calel 74 | ca,e 75 | rihan 76 | mix1 77 | mix 78 | lusi 79 | -------------------------------------------------------------------------------- /.config/environment.d/firefox-wayland.conf: -------------------------------------------------------------------------------- 1 | # firefox wayland support 2 | # see: https://wiki.archlinux.org/title/firefox#Wayland 3 | MOZ_ENABLE_WAYLAND=1 4 | MOZ_DBUS_REMOTE=1 5 | 6 | # better scrolling 7 | MOZ_USE_XINPUT2=1 8 | 9 | # RDD sanboxing prevents vp8/vp9 VA-API decoding 10 | MOZ_DISABLE_RDD_SANDBOX=1 11 | -------------------------------------------------------------------------------- /.config/fastfetch/config.jsonc: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json", 3 | "display": { 4 | "separator": " : ", 5 | }, 6 | "modules": [ 7 | { 8 | "type": "custom", 9 | "format": " \u001b[90m \u001b[31m \u001b[32m \u001b[33m \u001b[34m \u001b[35m \u001b[36m \u001b[37m ", 10 | }, 11 | { 12 | "type": "custom", 13 | "format": "", 14 | }, 15 | { 16 | "type": "custom", 17 | "format": "", 18 | }, 19 | { 20 | "type": "os", 21 | "key": "  OS", 22 | "keyColor": "38;5;19", // Dark Blue 23 | }, 24 | { 25 | "type": "kernel", 26 | "key": "  Kernel", 27 | "keyColor": "97", // White 28 | }, 29 | { 30 | "type": "packages", 31 | "key": " 󰏗 Packages", 32 | "keyColor": "34", // Keeping the same 33 | }, 34 | { 35 | "type": "display", 36 | "key": " 󱍜 Display", 37 | "keyColor": "38;5;208", // Random: Bright Orange 38 | }, 39 | { 40 | "type": "wm", 41 | "key": "  WM", 42 | "keyColor": "38;5;81", // Light Blue 43 | }, 44 | { 45 | "type": "terminal", 46 | "key": "  Terminal", 47 | "keyColor": "90", // Grey 48 | }, 49 | { 50 | "type": "media", 51 | "key": " 󰝚 Music", 52 | "keyColor": "34", 53 | }, 54 | { 55 | "type": "command", 56 | "key": " 󱦟 OS Age ", 57 | "keyColor": "31", 58 | "text": "birth_install=$(stat -c %W /); current=$(date +%s); time_progression=$((current - birth_install)); days_difference=$((time_progression / 86400)); echo $days_difference days", 59 | }, 60 | { 61 | "type": "uptime", 62 | "key": " ", 63 | "keyColor": "34", 64 | }, 65 | { 66 | "type": "battery", 67 | "key": "  Battery", 68 | "keyColor": "38;5;228", // Light Yellow 69 | }, 70 | "break", 71 | { 72 | "type": "title", 73 | "key": "  User", 74 | "keyColor": "38;5;250", // Black 75 | }, 76 | { 77 | "type": "custom", 78 | "format": "", 79 | }, 80 | { 81 | "type": "cpu", 82 | "format": "{1}", 83 | "key": "  CPU", 84 | "keyColor": "38;5;118", // Bright Green 85 | }, 86 | { 87 | "type": "gpu", 88 | "format": "{2}", 89 | "key": "  GPU", 90 | "keyColor": "38;5;220", // Yellow 91 | }, 92 | { 93 | "type": "gpu", 94 | "format": "{3}", 95 | "key": "  GPU Driver", 96 | "keyColor": "38;5;27", // Cyan 97 | }, 98 | { 99 | "type": "memory", 100 | "key": "  Memory", 101 | "keyColor": "38;5;99", // Pinkish Purple 102 | }, 103 | { 104 | "type": "custom", 105 | "format": "", 106 | }, 107 | "break", 108 | { 109 | "type": "custom", 110 | "format": " \u001b[90m \u001b[31m \u001b[32m \u001b[33m \u001b[34m \u001b[35m \u001b[36m \u001b[37m ", 111 | }, 112 | "break", 113 | ], 114 | } 115 | -------------------------------------------------------------------------------- /.config/fastfetch/pngs/sed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/fastfetch/pngs/sed.png -------------------------------------------------------------------------------- /.config/gtk-2.0/gtkfilechooser.ini: -------------------------------------------------------------------------------- 1 | [Filechooser Settings] 2 | LocationMode=path-bar 3 | ShowHidden=false 4 | ShowSizeColumn=true 5 | GeometryX=0 6 | GeometryY=0 7 | GeometryWidth=780 8 | GeometryHeight=585 9 | SortColumn=name 10 | SortOrder=ascending 11 | StartupMode=recent 12 | -------------------------------------------------------------------------------- /.config/gtk-3.0/gtk.css: -------------------------------------------------------------------------------- 1 | @define-color accent_color #868bf5; 2 | @define-color accent_bg_color #5657f5; 3 | @define-color accent_fg_color #eaeaea; 4 | @define-color destructive_color #bf6567; 5 | @define-color destructive_bg_color #bf0303; 6 | @define-color destructive_fg_color #eaeaea; 7 | @define-color success_color #71de8b; 8 | @define-color success_bg_color #006e28; 9 | @define-color success_fg_color #eaeaea; 10 | @define-color warning_color #f8e45c; 11 | @define-color warning_bg_color #b08000; 12 | @define-color warning_fg_color rgba(0, 0, 0, 0.8); 13 | @define-color error_color #bf6567; 14 | @define-color error_bg_color #bf0303; 15 | @define-color error_fg_color #eaeaea; 16 | @define-color window_bg_color #31313a; 17 | @define-color window_fg_color #eaeaea; 18 | @define-color view_bg_color #31313a; 19 | @define-color view_fg_color #eaeaea; 20 | @define-color headerbar_bg_color #44454b; 21 | @define-color headerbar_fg_color #eaeaea; 22 | @define-color headerbar_border_color #44454b; 23 | @define-color headerbar_backdrop_color @window_bg_color; 24 | @define-color headerbar_shade_color rgba(0, 0, 0, 0.36); 25 | @define-color card_bg_color rgba(255, 255, 255, 0.08); 26 | @define-color card_fg_color #eaeaea; 27 | @define-color card_shade_color rgba(0, 0, 0, 0.36); 28 | @define-color dialog_bg_color #44454b; 29 | @define-color dialog_fg_color #eaeaea; 30 | @define-color popover_bg_color #44454b; 31 | @define-color popover_fg_color #eaeaea; 32 | @define-color shade_color rgb(56,56,56); 33 | @define-color scrollbar_outline_color rgba(0, 0, 0, 0.5); 34 | @define-color blue_1 #99c1f1; 35 | @define-color blue_2 #62a0ea; 36 | @define-color blue_3 #3584e4; 37 | @define-color blue_4 #1c71d8; 38 | @define-color blue_5 #1a5fb4; 39 | @define-color green_1 #8ff0a4; 40 | @define-color green_2 #57e389; 41 | @define-color green_3 #33d17a; 42 | @define-color green_4 #2ec27e; 43 | @define-color green_5 #26a269; 44 | @define-color yellow_1 #f9f06b; 45 | @define-color yellow_2 #f8e45c; 46 | @define-color yellow_3 #f6d32d; 47 | @define-color yellow_4 #f5c211; 48 | @define-color yellow_5 #e5a50a; 49 | @define-color orange_1 #ffbe6f; 50 | @define-color orange_2 #ffa348; 51 | @define-color orange_3 #ff7800; 52 | @define-color orange_4 #e66100; 53 | @define-color orange_5 #c64600; 54 | @define-color red_1 #f66151; 55 | @define-color red_2 #ed333b; 56 | @define-color red_3 #e01b24; 57 | @define-color red_4 #c01c28; 58 | @define-color red_5 #a51d2d; 59 | @define-color purple_1 #dc8add; 60 | @define-color purple_2 #c061cb; 61 | @define-color purple_3 #9141ac; 62 | @define-color purple_4 #813d9c; 63 | @define-color purple_5 #613583; 64 | @define-color brown_1 #cdab8f; 65 | @define-color brown_2 #b5835a; 66 | @define-color brown_3 #986a44; 67 | @define-color brown_4 #865e3c; 68 | @define-color brown_5 #63452c; 69 | @define-color light_1 #ffffff; 70 | @define-color light_2 #f6f5f4; 71 | @define-color light_3 #deddda; 72 | @define-color light_4 #c0bfbc; 73 | @define-color light_5 #9a9996; 74 | @define-color dark_1 #77767b; 75 | @define-color dark_2 #5e5c64; 76 | @define-color dark_3 #3d3846; 77 | @define-color dark_4 #241f31; 78 | @define-color dark_5 #000000; 79 | -------------------------------------------------------------------------------- /.config/gtk-3.0/gtk.css.bak: -------------------------------------------------------------------------------- 1 | @define-color accent_color #868bf5; 2 | @define-color accent_bg_color #5657f5; 3 | @define-color accent_fg_color #eaeaea; 4 | @define-color destructive_color #bf6567; 5 | @define-color destructive_bg_color #bf0303; 6 | @define-color destructive_fg_color #eaeaea; 7 | @define-color success_color #71de8b; 8 | @define-color success_bg_color #006e28; 9 | @define-color success_fg_color #eaeaea; 10 | @define-color warning_color #f8e45c; 11 | @define-color warning_bg_color #b08000; 12 | @define-color warning_fg_color rgba(0, 0, 0, 0.8); 13 | @define-color error_color #bf6567; 14 | @define-color error_bg_color #bf0303; 15 | @define-color error_fg_color #eaeaea; 16 | @define-color window_bg_color #31313a; 17 | @define-color window_fg_color #eaeaea; 18 | @define-color view_bg_color #31313a; 19 | @define-color view_fg_color #eaeaea; 20 | @define-color headerbar_bg_color #44454b; 21 | @define-color headerbar_fg_color #eaeaea; 22 | @define-color headerbar_border_color #44454b; 23 | @define-color headerbar_backdrop_color @window_bg_color; 24 | @define-color headerbar_shade_color rgba(0, 0, 0, 0.36); 25 | @define-color card_bg_color rgba(255, 255, 255, 0.08); 26 | @define-color card_fg_color #eaeaea; 27 | @define-color card_shade_color rgba(0, 0, 0, 0.36); 28 | @define-color dialog_bg_color #44454b; 29 | @define-color dialog_fg_color #eaeaea; 30 | @define-color popover_bg_color #44454b; 31 | @define-color popover_fg_color #eaeaea; 32 | @define-color shade_color rgb(56,56,56); 33 | @define-color scrollbar_outline_color rgba(0, 0, 0, 0.5); 34 | @define-color blue_1 #99c1f1; 35 | @define-color blue_2 #62a0ea; 36 | @define-color blue_3 #3584e4; 37 | @define-color blue_4 #1c71d8; 38 | @define-color blue_5 #1a5fb4; 39 | @define-color green_1 #8ff0a4; 40 | @define-color green_2 #57e389; 41 | @define-color green_3 #33d17a; 42 | @define-color green_4 #2ec27e; 43 | @define-color green_5 #26a269; 44 | @define-color yellow_1 #f9f06b; 45 | @define-color yellow_2 #f8e45c; 46 | @define-color yellow_3 #f6d32d; 47 | @define-color yellow_4 #f5c211; 48 | @define-color yellow_5 #e5a50a; 49 | @define-color orange_1 #ffbe6f; 50 | @define-color orange_2 #ffa348; 51 | @define-color orange_3 #ff7800; 52 | @define-color orange_4 #e66100; 53 | @define-color orange_5 #c64600; 54 | @define-color red_1 #f66151; 55 | @define-color red_2 #ed333b; 56 | @define-color red_3 #e01b24; 57 | @define-color red_4 #c01c28; 58 | @define-color red_5 #a51d2d; 59 | @define-color purple_1 #dc8add; 60 | @define-color purple_2 #c061cb; 61 | @define-color purple_3 #9141ac; 62 | @define-color purple_4 #813d9c; 63 | @define-color purple_5 #613583; 64 | @define-color brown_1 #cdab8f; 65 | @define-color brown_2 #b5835a; 66 | @define-color brown_3 #986a44; 67 | @define-color brown_4 #865e3c; 68 | @define-color brown_5 #63452c; 69 | @define-color light_1 #ffffff; 70 | @define-color light_2 #f6f5f4; 71 | @define-color light_3 #deddda; 72 | @define-color light_4 #c0bfbc; 73 | @define-color light_5 #9a9996; 74 | @define-color dark_1 #77767b; 75 | @define-color dark_2 #5e5c64; 76 | @define-color dark_3 #3d3846; 77 | @define-color dark_4 #241f31; 78 | @define-color dark_5 #000000; 79 | @import 'colors.css'; -------------------------------------------------------------------------------- /.config/gtk-3.0/settings.ini: -------------------------------------------------------------------------------- 1 | [Settings] 2 | gtk-theme-name=adw-gtk3 3 | gtk-icon-theme-name=Colloid-dark 4 | gtk-font-name=Product Sans 10 5 | gtk-cursor-theme-name=BreezeX-RosePine-Linux 6 | gtk-cursor-theme-size=24 7 | gtk-toolbar-style=3 8 | gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR 9 | gtk-button-images=0 10 | gtk-menu-images=0 11 | gtk-enable-event-sounds=1 12 | gtk-enable-input-feedback-sounds=0 13 | gtk-xft-antialias=1 14 | gtk-xft-hinting=1 15 | gtk-xft-hintstyle=hintslight 16 | gtk-xft-rgba=rgb 17 | gtk-application-prefer-dark-theme=1 18 | gtk-decoration-layout=:minimize,maximize,close 19 | gtk-enable-animations=true 20 | gtk-modules=\sappmenu-gtk-module:colorreload-gtk-module 21 | gtk-primary-button-warps-slider=true 22 | gtk-sound-theme-name=ocean 23 | gtk-xft-dpi=98304 24 | -------------------------------------------------------------------------------- /.config/gtk-4.0/gtk.css: -------------------------------------------------------------------------------- 1 | @define-color accent_color #868bf5; 2 | @define-color accent_bg_color #5657f5; 3 | @define-color accent_fg_color #eaeaea; 4 | @define-color destructive_color #bf6567; 5 | @define-color destructive_bg_color #bf0303; 6 | @define-color destructive_fg_color #eaeaea; 7 | @define-color success_color #71de8b; 8 | @define-color success_bg_color #006e28; 9 | @define-color success_fg_color #eaeaea; 10 | @define-color warning_color #f8e45c; 11 | @define-color warning_bg_color #b08000; 12 | @define-color warning_fg_color rgba(0, 0, 0, 0.8); 13 | @define-color error_color #bf6567; 14 | @define-color error_bg_color #bf0303; 15 | @define-color error_fg_color #eaeaea; 16 | @define-color window_bg_color #31313a; 17 | @define-color window_fg_color #eaeaea; 18 | @define-color view_bg_color #31313a; 19 | @define-color view_fg_color #eaeaea; 20 | @define-color headerbar_bg_color #44454b; 21 | @define-color headerbar_fg_color #eaeaea; 22 | @define-color headerbar_border_color #44454b; 23 | @define-color headerbar_backdrop_color @window_bg_color; 24 | @define-color headerbar_shade_color rgba(0, 0, 0, 0.36); 25 | @define-color card_bg_color rgba(255, 255, 255, 0.08); 26 | @define-color card_fg_color #eaeaea; 27 | @define-color card_shade_color rgba(0, 0, 0, 0.36); 28 | @define-color dialog_bg_color #44454b; 29 | @define-color dialog_fg_color #eaeaea; 30 | @define-color popover_bg_color #44454b; 31 | @define-color popover_fg_color #eaeaea; 32 | @define-color shade_color rgb(56,56,56); 33 | @define-color scrollbar_outline_color rgba(0, 0, 0, 0.5); 34 | @define-color blue_1 #99c1f1; 35 | @define-color blue_2 #62a0ea; 36 | @define-color blue_3 #3584e4; 37 | @define-color blue_4 #1c71d8; 38 | @define-color blue_5 #1a5fb4; 39 | @define-color green_1 #8ff0a4; 40 | @define-color green_2 #57e389; 41 | @define-color green_3 #33d17a; 42 | @define-color green_4 #2ec27e; 43 | @define-color green_5 #26a269; 44 | @define-color yellow_1 #f9f06b; 45 | @define-color yellow_2 #f8e45c; 46 | @define-color yellow_3 #f6d32d; 47 | @define-color yellow_4 #f5c211; 48 | @define-color yellow_5 #e5a50a; 49 | @define-color orange_1 #ffbe6f; 50 | @define-color orange_2 #ffa348; 51 | @define-color orange_3 #ff7800; 52 | @define-color orange_4 #e66100; 53 | @define-color orange_5 #c64600; 54 | @define-color red_1 #f66151; 55 | @define-color red_2 #ed333b; 56 | @define-color red_3 #e01b24; 57 | @define-color red_4 #c01c28; 58 | @define-color red_5 #a51d2d; 59 | @define-color purple_1 #dc8add; 60 | @define-color purple_2 #c061cb; 61 | @define-color purple_3 #9141ac; 62 | @define-color purple_4 #813d9c; 63 | @define-color purple_5 #613583; 64 | @define-color brown_1 #cdab8f; 65 | @define-color brown_2 #b5835a; 66 | @define-color brown_3 #986a44; 67 | @define-color brown_4 #865e3c; 68 | @define-color brown_5 #63452c; 69 | @define-color light_1 #ffffff; 70 | @define-color light_2 #f6f5f4; 71 | @define-color light_3 #deddda; 72 | @define-color light_4 #c0bfbc; 73 | @define-color light_5 #9a9996; 74 | @define-color dark_1 #77767b; 75 | @define-color dark_2 #5e5c64; 76 | @define-color dark_3 #3d3846; 77 | @define-color dark_4 #241f31; 78 | @define-color dark_5 #000000; 79 | -------------------------------------------------------------------------------- /.config/gtk-4.0/gtk.css.bak: -------------------------------------------------------------------------------- 1 | @define-color accent_color #868bf5; 2 | @define-color accent_bg_color #5657f5; 3 | @define-color accent_fg_color #eaeaea; 4 | @define-color destructive_color #bf6567; 5 | @define-color destructive_bg_color #bf0303; 6 | @define-color destructive_fg_color #eaeaea; 7 | @define-color success_color #71de8b; 8 | @define-color success_bg_color #006e28; 9 | @define-color success_fg_color #eaeaea; 10 | @define-color warning_color #f8e45c; 11 | @define-color warning_bg_color #b08000; 12 | @define-color warning_fg_color rgba(0, 0, 0, 0.8); 13 | @define-color error_color #bf6567; 14 | @define-color error_bg_color #bf0303; 15 | @define-color error_fg_color #eaeaea; 16 | @define-color window_bg_color #31313a; 17 | @define-color window_fg_color #eaeaea; 18 | @define-color view_bg_color #31313a; 19 | @define-color view_fg_color #eaeaea; 20 | @define-color headerbar_bg_color #44454b; 21 | @define-color headerbar_fg_color #eaeaea; 22 | @define-color headerbar_border_color #44454b; 23 | @define-color headerbar_backdrop_color @window_bg_color; 24 | @define-color headerbar_shade_color rgba(0, 0, 0, 0.36); 25 | @define-color card_bg_color rgba(255, 255, 255, 0.08); 26 | @define-color card_fg_color #eaeaea; 27 | @define-color card_shade_color rgba(0, 0, 0, 0.36); 28 | @define-color dialog_bg_color #44454b; 29 | @define-color dialog_fg_color #eaeaea; 30 | @define-color popover_bg_color #44454b; 31 | @define-color popover_fg_color #eaeaea; 32 | @define-color shade_color rgb(56,56,56); 33 | @define-color scrollbar_outline_color rgba(0, 0, 0, 0.5); 34 | @define-color blue_1 #99c1f1; 35 | @define-color blue_2 #62a0ea; 36 | @define-color blue_3 #3584e4; 37 | @define-color blue_4 #1c71d8; 38 | @define-color blue_5 #1a5fb4; 39 | @define-color green_1 #8ff0a4; 40 | @define-color green_2 #57e389; 41 | @define-color green_3 #33d17a; 42 | @define-color green_4 #2ec27e; 43 | @define-color green_5 #26a269; 44 | @define-color yellow_1 #f9f06b; 45 | @define-color yellow_2 #f8e45c; 46 | @define-color yellow_3 #f6d32d; 47 | @define-color yellow_4 #f5c211; 48 | @define-color yellow_5 #e5a50a; 49 | @define-color orange_1 #ffbe6f; 50 | @define-color orange_2 #ffa348; 51 | @define-color orange_3 #ff7800; 52 | @define-color orange_4 #e66100; 53 | @define-color orange_5 #c64600; 54 | @define-color red_1 #f66151; 55 | @define-color red_2 #ed333b; 56 | @define-color red_3 #e01b24; 57 | @define-color red_4 #c01c28; 58 | @define-color red_5 #a51d2d; 59 | @define-color purple_1 #dc8add; 60 | @define-color purple_2 #c061cb; 61 | @define-color purple_3 #9141ac; 62 | @define-color purple_4 #813d9c; 63 | @define-color purple_5 #613583; 64 | @define-color brown_1 #cdab8f; 65 | @define-color brown_2 #b5835a; 66 | @define-color brown_3 #986a44; 67 | @define-color brown_4 #865e3c; 68 | @define-color brown_5 #63452c; 69 | @define-color light_1 #ffffff; 70 | @define-color light_2 #f6f5f4; 71 | @define-color light_3 #deddda; 72 | @define-color light_4 #c0bfbc; 73 | @define-color light_5 #9a9996; 74 | @define-color dark_1 #77767b; 75 | @define-color dark_2 #5e5c64; 76 | @define-color dark_3 #3d3846; 77 | @define-color dark_4 #241f31; 78 | @define-color dark_5 #000000; 79 | @import 'colors.css'; -------------------------------------------------------------------------------- /.config/gtk-4.0/settings.ini: -------------------------------------------------------------------------------- 1 | [Settings] 2 | gtk-application-prefer-dark-theme=true 3 | gtk-cursor-theme-name=WhiteSur-cursors 4 | gtk-cursor-theme-size=24 5 | gtk-decoration-layout=:minimize,maximize,close 6 | gtk-enable-animations=true 7 | gtk-font-name=Product Sans, 10 8 | gtk-icon-theme-name=Colloid-light 9 | gtk-primary-button-warps-slider=true 10 | gtk-sound-theme-name=ocean 11 | gtk-theme-name=adw-gtk3 12 | gtk-xft-dpi=98304 13 | -------------------------------------------------------------------------------- /.config/hypr/hypridle.conf: -------------------------------------------------------------------------------- 1 | general { 2 | lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances. 3 | before_sleep_cmd = loginctl lock-session # lock before suspend. 4 | after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display. 5 | ignore_dbus_inhibit = false 6 | 7 | } 8 | 9 | listener { 10 | timeout = 180 # 3 min. 11 | on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor. 12 | on-resume = brightnessctl -r # monitor backlight restor. 13 | } 14 | 15 | listener { 16 | timeout = 150 # 2.5min. 17 | on-timeout = asusctl -k off # turn off keyboard backlight. 18 | # on-resume = asusctl -k high # turn on keyboard backlight. 19 | } 20 | 21 | listener { 22 | timeout = 300 # 5min 23 | on-timeout = loginctl lock-session # lock screen when timeout has passed 24 | } 25 | 26 | listener { 27 | timeout = 320 28 | on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed 29 | on-resume = hyprctl dispatch dpms on # screen on when activity is detected after timeout has fired. 30 | } 31 | 32 | listener { 33 | timeout = 1800 # 30min 34 | on-timeout = systemctl suspend # suspend pc 35 | on-resume = brightnessctl -r # set monitor backlight to minimum, avoid 0 on OLED monitor. 36 | 37 | } 38 | -------------------------------------------------------------------------------- /.config/hypr/hyprlock.conf: -------------------------------------------------------------------------------- 1 | $text_color = rgba(ede0deFF) 2 | $entry_background_color = rgba(130F0F11) 3 | $entry_border_color = rgba(a08c8955) 4 | $entry_color = rgba(d8c2bfFF) 5 | $font_family = Product Sans 6 | $font_family_clock = Product Sans 7 | 8 | background { 9 | monitor = 10 | path = screenshot 11 | color = rgba(130F0F77) 12 | blur_size = 4 13 | blur_passes = 4 # 0 disables blurring 14 | noise = 0.0117 15 | contrast = 1.3000 # Vibrant!!! 16 | brightness = 0.8000 17 | vibrancy = 0.2100 18 | vibrancy_darkness = 0.0 19 | } 20 | 21 | input-field { 22 | monitor = 23 | size = 250, 50 24 | outline_thickness = 3 25 | dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8 26 | dots_spacing = 0.64 # Scale of dots' absolute size, 0.0 - 1.0 27 | dots_center = true 28 | outer_color = $entry_border_color 29 | inner_color = $entry_background_color 30 | font_color = $text_color 31 | fade_on_empty = true 32 | placeholder_text = Password... # Text rendered in the input box when it's empty. 33 | fail_text = $FAIL ($ATTEMPTS) 34 | hide_input = false 35 | position = 0, 80 36 | halign = center 37 | valign = bottom 38 | } 39 | 40 | 41 | # Current time 42 | label { 43 | monitor = 44 | text = cmd[update:1000] echo " $(date +"%H:%M:%S") " 45 | color = $text_color 46 | font_size = 64 47 | font_family = JetBrains Mono Nerd Font 10 48 | shadow_passes = 3 49 | shadow_size = 4 50 | 51 | position = 0, 16 52 | halign = center 53 | valign = center 54 | } 55 | 56 | # Date 57 | label { 58 | monitor = 59 | text = cmd[update:18000000] echo " "$(date +'%A, %-d %B %Y')" " 60 | color = $text_color 61 | font_size = 24 62 | font_family = JetBrains Mono Nerd Font 10 63 | 64 | position = 0, 90 65 | halign = center 66 | valign = center 67 | } 68 | 69 | # User label 70 | label { 71 | monitor = 72 | text = Hi $USER !!! 73 | color = $text_color 74 | font_size = 12 75 | font_family = $font_family 76 | position = 0, -50 77 | halign = center 78 | valign = center 79 | } 80 | 81 | 82 | label { # Status 83 | monitor = 84 | text = cmd[update:5000] ~/.scripts/status.sh 85 | color = $text_color 86 | font_size = 14 87 | font_family = $font_family 88 | 89 | position = 30, -30 90 | halign = left 91 | valign = top 92 | } 93 | 94 | 95 | label { 96 | monitor = 97 | text = cmd[update:1000] echo "Up $(uptime -p | sed "s/up \(.*\)/\1/")" 98 | font_size = 14 99 | font_family = JetBrainsMono Nerd Font 100 | position = 0, -500 101 | halign = center 102 | valign = center 103 | } 104 | -------------------------------------------------------------------------------- /.config/hypr/hyprpaper.conf: -------------------------------------------------------------------------------- 1 | preload = ~/Pictures/sed.jpg 2 | wallpaper = eDP-1,~/Pictures/sed.jpg 3 | 4 | 5 | ipc = off 6 | -------------------------------------------------------------------------------- /.config/hypr/plugins/hyprland-dwindle-group/dwindle-autogroup.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/hypr/plugins/hyprland-dwindle-group/dwindle-autogroup.so -------------------------------------------------------------------------------- /.config/hypr/pyprland.toml: -------------------------------------------------------------------------------- 1 | [pyprland] 2 | plugins = ["expose", "magnify"] 3 | -------------------------------------------------------------------------------- /.config/hypr/wallpaper.conf: -------------------------------------------------------------------------------- 1 | $wall="/home/adharsh/Pictures/Wallpapers/1638597695178.jpg" 2 | -------------------------------------------------------------------------------- /.config/kitty/colors.conf: -------------------------------------------------------------------------------- 1 | 2 | # https://github.com/chriskempson/base16-xresources/blob/master/base16-summerfruit.dark.256.xresources 3 | # Base16 Summerfruit 4 | # Scheme: Christopher Corley (http://cscorley.github.io/) 5 | foreground #D0D0D0 6 | background #151515 7 | cursor #D0D0D0 8 | 9 | color0 #151515 10 | color1 #FF0086 11 | color2 #00C918 12 | color3 #ABA800 13 | color4 #3777E6 14 | color5 #AD00A1 15 | color6 #1faaaa 16 | color7 #D0D0D0 17 | color8 #505050 18 | color9 #FF0086 19 | color10 #00C918 20 | color11 #ABA800 21 | color12 #3777E6 22 | color13 #AD00A1 23 | color14 #1faaaa 24 | color15 #FFFFFF 25 | 26 | color16 #FD8900 27 | color17 #cc6633 28 | color18 #202020 29 | color19 #303030 30 | color20 #B0B0B0 31 | color21 #E0E0E0 32 | -------------------------------------------------------------------------------- /.config/kitty/sed.conf: -------------------------------------------------------------------------------- 1 | cursor #9966ff 2 | cursor_text_color background 3 | 4 | url_color #2392fb 5 | 6 | active_border_color #50fa7b 7 | inactive_border_color #242424 8 | bell_border_color #01fdb0 9 | 10 | active_tab_foreground #dbdbdb 11 | active_tab_background #000000 12 | 13 | inactive_tab_foreground #b6b6b6 14 | inactive_tab_background #000000 15 | 16 | foreground #dbdbdb 17 | background #000000 18 | 19 | selection_foreground #000000 20 | selection_background #2392fb 21 | 22 | color0 #000000 23 | color8 #6d6d6d 24 | 25 | color1 #ff5555 26 | color9 #FF7777 27 | 28 | color2 #50fa7b 29 | color10 #73FB95 30 | 31 | color3 #ffff66 32 | color11 #FFFF85 33 | 34 | color4 #2392fb 35 | color12 #4FA8FC 36 | 37 | color5 #ff77cc 38 | color13 #FF92D6 39 | 40 | color6 #00ffff 41 | color14 #33FFFF 42 | 43 | color7 #dbdbdb 44 | color15 #ffffff 45 | 46 | mark1_foreground #000000 47 | mark1_background #00ffff 48 | 49 | mark2_foreground #000000 50 | mark2_background #ff77cc 51 | 52 | mark3_foreground #000000 53 | mark3_background #ffff66 54 | -------------------------------------------------------------------------------- /.config/kitty/tokyonight.conf: -------------------------------------------------------------------------------- 1 | # vim:ft=kitty 2 | 3 | ## name: Tokyo Night 4 | ## license: MIT 5 | ## author: Folke Lemaitre 6 | ## upstream: https://github.com/folke/tokyonight.nvim/raw/main/extras/kitty_tokyonight_night.conf 7 | 8 | 9 | background #000000 10 | foreground #c0caf5 11 | selection_background #33467C 12 | selection_foreground #c0caf5 13 | url_color #73daca 14 | cursor #c0caf5 15 | 16 | # Tabs 17 | active_tab_background #7aa2f7 18 | active_tab_foreground #1f2335 19 | inactive_tab_background #292e42 20 | inactive_tab_foreground #545c7e 21 | #tab_bar_background #15161E 22 | 23 | # normal 24 | color0 #15161E 25 | color1 #f7768e 26 | color2 #9ece6a 27 | color3 #e0af68 28 | color4 #7aa2f7 29 | color5 #bb9af7 30 | color6 #7dcfff 31 | color7 #a9b1d6 32 | 33 | # bright 34 | color8 #414868 35 | color9 #f7768e 36 | color10 #9ece6a 37 | color11 #e0af68 38 | color12 #7aa2f7 39 | color13 #bb9af7 40 | color14 #7dcfff 41 | color15 #c0caf5 42 | 43 | # extended colors 44 | color16 #ff9e64 45 | color17 #db4b4b 46 | -------------------------------------------------------------------------------- /.config/lf/clean: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | ueberzugpp cmd -s $UB_SOCKET -a remove -i PREVIEW 4 | -------------------------------------------------------------------------------- /.config/lf/kitty_clean: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | kitty +icat --clear --silent --transfer-mode file 4 | -------------------------------------------------------------------------------- /.config/lf/scope: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | image() { 4 | FILE_PATH="$1" 5 | X=$4 6 | Y=$5 7 | MW=$(($2-1)) 8 | MH=$3 9 | ueberzugpp cmd -s $UB_SOCKET -a add -i PREVIEW -x $X -y $Y --max-width $MW --max-height $MH -f "$FILE_PATH" 10 | exit 1 11 | } 12 | 13 | batorcat() { 14 | file="$1" 15 | shift 16 | if command -v bat > /dev/null 2>&1 17 | then 18 | bat --color=always --style=plain --pager=never "$file" "$@" 19 | else 20 | cat "$file" 21 | fi 22 | } 23 | 24 | CACHE="$HOME/.cache/lf/$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | awk '{print $1}')" 25 | 26 | case "$(printf "%s\n" "$(readlink -f "$1")" | awk '{print tolower($0)}')" in 27 | *.tgz|*.tar.gz) tar tzf "$1" ;; 28 | *.tar.bz2|*.tbz2) tar tjf "$1" ;; 29 | *.tar.txz|*.txz) xz --list "$1" ;; 30 | *.tar) tar tf "$1" ;; 31 | *.zip|*.jar|*.war|*.ear|*.oxt) unzip -l "$1" ;; 32 | *.rar) unrar l "$1" ;; 33 | *.7z) 7z l "$1" ;; 34 | *.[1-8]) man "$1" | col -b ;; 35 | *.o) nm "$1";; 36 | *.torrent) transmission-show "$1" ;; 37 | *.iso) iso-info --no-header -l "$1" ;; 38 | *.odt|*.ods|*.odp|*.sxw) odt2txt "$1" ;; 39 | *.doc) catdoc "$1" ;; 40 | *.docx) docx2txt "$1" - ;; 41 | *.xls|*.xlsx) 42 | ssconvert --export-type=Gnumeric_stf:stf_csv "$1" "fd://1" | batorcat --language=csv 43 | ;; 44 | *.pdf) 45 | [ ! -f "${CACHE}.jpg" ] && \ 46 | pdftoppm -jpeg -f 1 -singlefile "$1" "$CACHE" 47 | image "${CACHE}.jpg" "$2" "$3" "$4" "$5" 48 | ;; 49 | *.epub) 50 | [ ! -f "${CACHE}.jpg" ] && \ 51 | gnome-epub-thumbnailer "$1" "$CACHE".jpg 52 | image "${CACHE}.jpg" "$2" "$3" "$4" "$5" 53 | ;; 54 | *.avi|*.mp4|*.gif|*.wmv|*.dat|*.3gp|*.ogv|*.mkv|*.mpg|*.mpeg|*.vob|*.fl[icv]|*.m2v|*.mov|*.webm|*.ts|*.mts|*.m4v|*.r[am]|*.qt|*.divx|*.wav|*.mp3|*.flac|*.m4a|*.wma|*.ape|*.ac3|*.og[agx]|*.spx|*.opus|*.as[fx]|*.mka) 55 | [ ! -f "${CACHE}.jpg" ] && \ 56 | ffmpegthumbnailer -i "$1" -o "${CACHE}.jpg" -m -s 0 -q 5 57 | image "${CACHE}.jpg" "$2" "$3" "$4" "$5" 58 | ;; 59 | *.bmp|*.jpg|*.jpeg|*.png|*.xpm|*.webp|*.jfif) 60 | image "$1" "$2" "$3" "$4" "$5" 61 | ;; 62 | *.svg) 63 | [ ! -f "${CACHE}.jpg" ] && \ 64 | convert "$1" "${CACHE}.jpg" 65 | image "${CACHE}.jpg" "$2" "$3" "$4" "$5" 66 | ;; 67 | *) 68 | batorcat "$1" 69 | ;; 70 | esac 71 | exit 0 72 | -------------------------------------------------------------------------------- /.config/mako/config: -------------------------------------------------------------------------------- 1 | 2 | sort=-time 3 | layer=overlay 4 | width=350 5 | border-size=2 6 | border-radius=10 7 | icons=1 8 | max-icon-size=24 9 | max-visible=3 10 | default-timeout=2000 11 | ignore-timeout=0 12 | font=Product Sans 11 13 | 14 | 15 | background-color=#1E1D2F 16 | text-color=#D9E0EE 17 | border-color=#96CDFB 18 | progress-color=over #302D41 19 | 20 | [urgency=high] 21 | border-color=#F8BD96 -------------------------------------------------------------------------------- /.config/mpv/mpv.conf: -------------------------------------------------------------------------------- 1 | no-keepaspect-window 2 | save-position-on-quit 3 | hwdec=auto 4 | -------------------------------------------------------------------------------- /.config/mpv/script-opts/youtube-quality.conf: -------------------------------------------------------------------------------- 1 | # KEY BINDINGS 2 | 3 | # invoke or dismiss the quality menu 4 | toggle_menu_binding=ctrl+f 5 | # move the menu cursor up 6 | up_binding=UP 7 | # move the menu cursor down 8 | down_binding=DOWN 9 | # select menu entry 10 | select_binding=ENTER 11 | 12 | # formatting / cursors 13 | selected_and_active=▶ - 14 | selected_and_inactive=● - 15 | unselected_and_active=▷ - 16 | unselected_and_inactive=○ - 17 | 18 | # font size scales by window, if false requires larger font and padding sizes 19 | scale_playlist_by_window=no 20 | 21 | # playlist ass style overrides inside curly brackets, \keyvalue is one field, extra \ for escape in lua 22 | # example {\\fnUbuntu\\fs10\\b0\\bord1} equals: font=Ubuntu, size=10, bold=no, border=1 23 | # read http://docs.aegisub.org/3.2/ASS_Tags/ for reference of tags 24 | # undeclared tags will use default osd settings 25 | # these styles will be used for the whole playlist. More specific styling will need to be hacked in 26 | # 27 | # (a monospaced font is recommended but not required) 28 | style_ass_tags={\\fnmonospace} 29 | 30 | # paddings for top left corner 31 | text_padding_x=5 32 | text_padding_y=5 33 | 34 | # how many seconds until the quality menu times out 35 | menu_timeout=10 36 | 37 | #use youtube-dl to fetch a list of available formats (overrides quality_strings) 38 | fetch_formats=yes 39 | 40 | # list of ytdl-format strings to choose from 41 | quality_strings=[ {"4320p" : "bestvideo[height<=?4320p]+bestaudio/best"}, {"2160p" : "bestvideo[height<=?2160]+bestaudio/best"}, {"1440p" : "bestvideo[height<=?1440]+bestaudio/best"}, {"1080p" : "bestvideo[height<=?1080]+bestaudio/best"}, {"720p" : "bestvideo[height<=?720]+bestaudio/best"}, {"480p" : "bestvideo[height<=?480]+bestaudio/best"}, {"360p" : "bestvideo[height<=?360]+bestaudio/best"}, {"240p" : "bestvideo[height<=?240]+bestaudio/best"}, {"144p" : "bestvideo[height<=?144]+bestaudio/best"} ] 42 | -------------------------------------------------------------------------------- /.config/mpv/scripts/ftp-compat.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | This script dynamically changes some settings at runtime while playing files over the ftp protocol 3 | available at: https://github.com/CogentRedTester/mpv-scripts 4 | 5 | Settings currently changed: 6 | 7 | - converts filepaths taken directly from a browser into a string format readable by mpv 8 | -e.g. "ftp://test%20ing" would become "ftp://test ing" 9 | 10 | - if a directory is loaded it attempts to open a playlist file inside it (default is .folder.m3u) 11 | ]]-- 12 | 13 | local mp = require 'mp' 14 | local opt = require 'mp.options' 15 | local msg = require 'mp.msg' 16 | 17 | --add options using script-opts=ftp_compat-option=value 18 | local o = { 19 | directory_playlist = '.folder.m3u', 20 | } 21 | 22 | opt.read_options(o, 'ftp_compat') 23 | 24 | local path 25 | 26 | --decodes a URL address 27 | --this piece of code was taken from: https://stackoverflow.com/questions/20405985/lua-decodeuri-luvit/20406960#20406960 28 | local decodeURI 29 | do 30 | local char, gsub, tonumber = string.char, string.gsub, tonumber 31 | local function _(hex) return char(tonumber(hex, 16)) end 32 | 33 | function decodeURI(s) 34 | msg.debug('decoding string: ' .. s) 35 | s = gsub(s, '%%(%x%x)', _) 36 | msg.debug('returning string: ' .. s) 37 | return s 38 | end 39 | end 40 | 41 | --runs all of the custom parsing operations for ftp filenames 42 | local function fixFtpPath() 43 | --converts the path into a valid string 44 | path = path:gsub([[\]],[[/]]) 45 | path = decodeURI(path) 46 | 47 | --if the path ends in a '/' then we consider it a directory 48 | if not path:match("/[^/]+$") then 49 | msg.info('directory loaded - attempting to load playlist file') 50 | path = path .. o.directory_playlist 51 | end 52 | 53 | mp.set_property('stream-open-filename', path) 54 | end 55 | 56 | --tests if the file being opened uses the ftp protocol to set custom settings 57 | local function testFTP() 58 | msg.verbose('checking for ftp protocol') 59 | path = mp.get_property('stream-open-filename') 60 | 61 | if path:find("ftp://") == 1 then 62 | msg.info('ftp protocol detected - attempting to fix path') 63 | fixFtpPath() 64 | end 65 | end 66 | 67 | --attempts to fix the path on mpv fail 68 | mp.add_hook('on_load_fail', 50, testFTP) 69 | 70 | --script messages for loading ftp tracks as external files 71 | mp.register_script_message('ftp/video-add', function(path, flags) 72 | if flags then 73 | mp.commandv('video-add', decodeURI(path), flags) 74 | else 75 | mp.commandv('video-add', decodeURI(path)) 76 | end 77 | end) 78 | 79 | mp.register_script_message('ftp/audio-add', function(path,flags) 80 | if flags then 81 | mp.commandv('audio-add', decodeURI(path), flags) 82 | else 83 | mp.commandv('audio-add', decodeURI(path)) 84 | end 85 | end) 86 | 87 | mp.register_script_message('ftp/sub-add', function(path,flags) 88 | if flags then 89 | mp.commandv('sub-add', decodeURI(path), flags) 90 | else 91 | mp.commandv('sub-add', decodeURI(path)) 92 | end 93 | end) -------------------------------------------------------------------------------- /.config/mpv/scripts/mpris.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/mpv/scripts/mpris.so -------------------------------------------------------------------------------- /.config/mpv/scripts/pause-indicator.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | Prints a pause icon in the middle of the screen when mpv is paused 3 | available at: https://github.com/CogentRedTester/mpv-scripts 4 | ]]-- 5 | 6 | local mp = require 'mp' 7 | local ov = mp.create_osd_overlay('ass-events') 8 | ov.data = [[{\an5\p1\alpha&H79\1c&H0000&\3a&Hff}]] .. 9 | [[m30 15 b37 8 112 8 117 15 b125 22 125 75 118 82 b112 89 38 89 30 82 b23 75 23 22 30 15 m76 108]] .. 10 | [[{\alpha&H10\1c&Hffffff&\3a&Hff} m-45 -25 l 2 2 l -45 28{\p0}]] 11 | 12 | mp.observe_property('pause', 'bool', function(_, paused) 13 | mp.add_timeout(0.1, function() 14 | if paused then ov:update() 15 | else ov:remove() end 16 | end) 17 | end) 18 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/1001CD91972AD0BFEBDE40DE070C2C52: -------------------------------------------------------------------------------- 1 | start=952.743000 2 | border=no 3 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/1C03EC46408C0AC9AB60EDC0DD52FDD6: -------------------------------------------------------------------------------- 1 | start=225.016667 2 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/2F9D2CF6722DF51D33F3E4539ED4D4F0: -------------------------------------------------------------------------------- 1 | start=1.801800 2 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/301AA0E5831897CD935AF3CF8D50B8DF: -------------------------------------------------------------------------------- 1 | start=9.709700 2 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/332020D77342F06F10949C5DE784360D: -------------------------------------------------------------------------------- 1 | start=51.866667 2 | border=no 3 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/405099E50B49A28B480ECA8761CF94E3: -------------------------------------------------------------------------------- 1 | start=21.033333 2 | border=no 3 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/5F73DF00080288F2FC6C4B886EE09A6C: -------------------------------------------------------------------------------- 1 | start=1309.016042 2 | fullscreen=yes 3 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/603FA6CB2CFE839D188424DD9978B5CC: -------------------------------------------------------------------------------- 1 | start=18.284000 2 | border=no 3 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/617334BFE797FA9008CFBF9F95049D8E: -------------------------------------------------------------------------------- 1 | start=2295.748479 2 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/61AE8A680E7EC2AB93299C5FBE3AD15C: -------------------------------------------------------------------------------- 1 | start=2.669000 2 | border=no 3 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/7BE2BBCD5E10C8F7C3EC44BA0D40435D: -------------------------------------------------------------------------------- 1 | start=244.344100 2 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/7EE4BFCF68C740BB07C7117A7B274087: -------------------------------------------------------------------------------- 1 | start=112.695917 2 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/80FEC9C0E62EA155FE80949870F01699: -------------------------------------------------------------------------------- 1 | start=11.345000 2 | border=no 3 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/8976669FF64CDE6939CAE917311C58B5: -------------------------------------------------------------------------------- 1 | start=208.950000 2 | fullscreen=yes 3 | panscan=1.000000 4 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/8CC39C215D3DEB3C036E97FA170AB53F: -------------------------------------------------------------------------------- 1 | start=6.974000 2 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/8D1C18CB3488083AA16C60A6E17CCED8: -------------------------------------------------------------------------------- 1 | start=13.304958 2 | sid=1 3 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/A434265E18E00C76D821B13FBB24473C: -------------------------------------------------------------------------------- 1 | start=122.489033 2 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/A62D30ACE2E89FE6ADC9EF3D9E633C93: -------------------------------------------------------------------------------- 1 | start=4.212542 2 | pause=yes 3 | sid=1 4 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/C8ED29C959815C340CE974D53D30178F: -------------------------------------------------------------------------------- 1 | start=1172.796625 2 | fullscreen=yes 3 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/DDA6F510D421BA4C14CB568291A7AAB6: -------------------------------------------------------------------------------- 1 | start=1224.807000 2 | fullscreen=yes 3 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/E199B4EE17F01CD20EEBE3377F53DC15: -------------------------------------------------------------------------------- 1 | start=14.700000 2 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/E511A568B44DF29D9001F1FCA38AADEB: -------------------------------------------------------------------------------- 1 | start=214.983333 2 | panscan=0.700000 3 | sub-visibility=no 4 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/E7A7562B0D00C18246EAA8CC0DCBCA12: -------------------------------------------------------------------------------- 1 | start=1245.410833 2 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/EF342B5B471D92D9E606F7964DD7F397: -------------------------------------------------------------------------------- 1 | start=477.376900 2 | -------------------------------------------------------------------------------- /.config/mpv/watch_later/FFDDD038CAA56E7C6BE793701A8E2EDA: -------------------------------------------------------------------------------- 1 | start=850.566667 2 | -------------------------------------------------------------------------------- /.config/ncspot/config.toml: -------------------------------------------------------------------------------- 1 | # Basic options 2 | default_keybindings = false 3 | use_nerdfont = true 4 | notify = true 5 | gapless = true 6 | flip_status_indicators=true 7 | 8 | [keybindings] 9 | ## unbinded: nN, eE, xX 10 | ###################################### 11 | # Song controls 12 | ###################################### 13 | 14 | ################## 15 | # Fast forward / rewind 16 | ################## 17 | 18 | "h" = "seek -5000" 19 | "l" = "seek +5000" 20 | "b" = "seek -1000" 21 | "f" = "seek +1000" 22 | "B" = "seek -10000" 23 | "F" = "seek +10000" 24 | 25 | ################## 26 | # Play / pause 27 | ################## 28 | "c" = "playpause" 29 | "Enter" = "play" 30 | "s" = "stop" 31 | 32 | ################## 33 | # Track manipulation 34 | ################## 35 | "H" = "previous" 36 | "L" = "next" 37 | "r" = "repeat" 38 | "z" = "shuffle" 39 | "D" = "delete" 40 | "S" = "save" 41 | # Open context menu 42 | "O" = "open current" 43 | "o" = "open selected" 44 | "A" = "goto artist" 45 | "a" = "goto album" 46 | 47 | ################## 48 | # Queue 49 | ################## 50 | # Add to queue 51 | " " = "queue" 52 | "Ctrl+s" = "save queue" 53 | # Move selected song up/down in the queue 54 | "J" = "shift down 1" 55 | "K" = "shift up 1" 56 | "C" = "clear" 57 | # Open the context menu for a Spotify link in the clipboard 58 | "Ctrl+v" = "insert" 59 | 60 | ###################################### 61 | # Sound 62 | ###################################### 63 | "plus" = "volup 5" 64 | "minus" = "voldown 5" 65 | "[" = "volup 5" 66 | "]" = "voldown 5" 67 | 68 | 69 | ###################################### 70 | # Movements 71 | ###################################### 72 | "F1" = "focus queue" 73 | "F2" = "focus library" 74 | "F3" = "focus search" 75 | "F4" = "focus cover" 76 | "Ctrl+q" = "focus queue" 77 | # Go to the playing track 78 | "." = "move playing" 79 | # Navigation 80 | "Down" = "move down 1" 81 | "G" = "move bottom" 82 | "g" = "move top" 83 | "Left" = "move left 1" 84 | "Right" = "move right 1" 85 | "Ctrl+d" = "move down 5" 86 | "Ctrl+u" = "move up 5" 87 | "Up" = "move up 1" 88 | "1" = "move left 1" 89 | "j" = "move down 1" 90 | "k" = "move up 1" 91 | "Ctrl+e" = "move down 1" 92 | "Ctrl+y" = "move up 1" 93 | "2" = "move right 1" 94 | "q" = "back" 95 | 96 | ###################################### 97 | # Sorting 98 | ###################################### 99 | "t" = "sort added d" 100 | "T" = "sort title a" 101 | 102 | ###################################### 103 | # Sharing 104 | ###################################### 105 | "Y" = "share selected" 106 | "y" = "share current" 107 | 108 | ###################################### 109 | # Other 110 | ###################################### 111 | "Q" = "quit" 112 | "Z" = "quit" 113 | "?" = "help" 114 | "U" = "update" 115 | 116 | [theme] 117 | background = "default" 118 | primary = "light white" 119 | secondary = "light black" 120 | title = "green" 121 | playing = "green" 122 | playing_selected = "light green" 123 | playing_bg = "black" 124 | highlight = "light white" 125 | highlight_bg = "#484848" 126 | error = "light white" 127 | error_bg = "red" 128 | statusbar = "black" 129 | statusbar_progress = "green" 130 | statusbar_bg = "green" 131 | cmdline = "light white" 132 | cmdline_bg = "black" 133 | -------------------------------------------------------------------------------- /.config/ncspot/userstate.cbor: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/ncspot/userstate.cbor -------------------------------------------------------------------------------- /.config/nvim/.stylua.toml: -------------------------------------------------------------------------------- 1 | column_width = 120 2 | line_endings = "Unix" 3 | indent_type = "Spaces" 4 | indent_width = 2 5 | quote_style = "AutoPreferDouble" 6 | call_parentheses = "None" 7 | -------------------------------------------------------------------------------- /.config/nvim/LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /.config/nvim/README.md: -------------------------------------------------------------------------------- 1 | **This repo is supposed to used as config by NvChad users!** 2 | 3 | - The main nvchad repo (NvChad/NvChad) is used as a plugin by this repo. 4 | - So you just import its modules , like `require "nvchad.options" , require "nvchad.mappings"` 5 | - So you can delete the .git from this repo ( when you clone it locally ) or fork it :) 6 | 7 | # Credits 8 | 9 | 1) Lazyvim starter https://github.com/LazyVim/starter as nvchad's starter was inspired by Lazyvim's . It made a lot of things easier! 10 | -------------------------------------------------------------------------------- /.config/nvim/init.lua: -------------------------------------------------------------------------------- 1 | vim.g.base46_cache = vim.fn.stdpath "data" .. "/base46/" 2 | vim.g.mapleader = " " 3 | 4 | -- bootstrap lazy and all plugins 5 | local lazypath = vim.fn.stdpath "data" .. "/lazy/lazy.nvim" 6 | 7 | if not vim.uv.fs_stat(lazypath) then 8 | local repo = "https://github.com/folke/lazy.nvim.git" 9 | vim.fn.system { "git", "clone", "--filter=blob:none", repo, "--branch=stable", lazypath } 10 | end 11 | 12 | vim.opt.rtp:prepend(lazypath) 13 | 14 | local lazy_config = require "configs.lazy" 15 | 16 | -- load plugins 17 | require("lazy").setup({ 18 | { 19 | "NvChad/NvChad", 20 | lazy = false, 21 | branch = "v2.5", 22 | import = "nvchad.plugins", 23 | }, 24 | 25 | { import = "plugins" }, 26 | }, lazy_config) 27 | 28 | -- load theme 29 | dofile(vim.g.base46_cache .. "defaults") 30 | dofile(vim.g.base46_cache .. "statusline") 31 | 32 | require "options" 33 | require "nvchad.autocmds" 34 | 35 | vim.schedule(function() 36 | require "mappings" 37 | end) 38 | -------------------------------------------------------------------------------- /.config/nvim/lazy-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "LuaSnip": { "branch": "master", "commit": "458560534a73f7f8d7a11a146c801db00b081df0" }, 3 | "NvChad": { "branch": "v2.5", "commit": "d4e5b8a10f01c06e18d2a8bb66761a3596562a67" }, 4 | "base46": { "branch": "v3.0", "commit": "80358ecdb5779b199130ed03031c34c0c2bca3fc" }, 5 | "blink.cmp": { "branch": "main", "commit": "4f38ce99a472932d5776337f08f7a8180f1f571a" }, 6 | "cellular-automaton.nvim": { "branch": "main", "commit": "1606e9d5d04ff254023c3f3c62842d065708d6d3" }, 7 | "conform.nvim": { "branch": "master", "commit": "374aaf384e2e841607b8e2fe63fa3ad01d111c91" }, 8 | "flutter-tools.nvim": { "branch": "main", "commit": "f33c5b2b94b7442c7b96a60e09319d71afb265bc" }, 9 | "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, 10 | "gitsigns.nvim": { "branch": "main", "commit": "43b0c856ae5f32a195d83f4a27fe21d63e6c966c" }, 11 | "indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" }, 12 | "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, 13 | "mason.nvim": { "branch": "main", "commit": "7c7318e8bae7e3536ef6b9e86b9e38e74f2e125e" }, 14 | "menu": { "branch": "main", "commit": "8adb036ec34c679050913864cbc98cc64eb91f6c" }, 15 | "minty": { "branch": "main", "commit": "aafc9e8e0afe6bf57580858a2849578d8d8db9e0" }, 16 | "nvim-autopairs": { "branch": "master", "commit": "4d74e75913832866aa7de35e4202463ddf6efd1b" }, 17 | "nvim-cmp": { "branch": "main", "commit": "059e89495b3ec09395262f16b1ad441a38081d04" }, 18 | "nvim-lspconfig": { "branch": "master", "commit": "61e5109c8cf24807e4ae29813a3a82b31821dd45" }, 19 | "nvim-tree.lua": { "branch": "master", "commit": "e7d1b7dadc62fe2eccc17d814354b0a5688621ce" }, 20 | "nvim-treesitter": { "branch": "master", "commit": "28d480e0624b259095e56f353ec911f9f2a0f404" }, 21 | "nvim-web-devicons": { "branch": "master", "commit": "f1420728f59843eb2ef084406b3d0201a0a0932d" }, 22 | "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" }, 23 | "telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" }, 24 | "telescope.nvim": { "branch": "master", "commit": "a4ed82509cecc56df1c7138920a1aeaf246c0ac5" }, 25 | "trouble.nvim": { "branch": "main", "commit": "85bedb7eb7fa331a2ccbecb9202d8abba64d37b3" }, 26 | "ui": { "branch": "v3.0", "commit": "12b997bb9434b159cb5c5b015278a8cab50de056" }, 27 | "vim-tmux-navigator": { "branch": "master", "commit": "33afa80db65113561dc53fa732b7f5e53d5ecfd0" }, 28 | "volt": { "branch": "main", "commit": "c45d5f48da8e802e608b5c6da471ca4d84276dfb" }, 29 | "which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" } 30 | } 31 | -------------------------------------------------------------------------------- /.config/nvim/lua/chadrc.lua: -------------------------------------------------------------------------------- 1 | -- First read our docs (completely) then check the example_config repo 2 | 3 | local M = {} 4 | 5 | M.base46 = { 6 | theme = "tokyodark", 7 | hl_add = {}, 8 | hl_override = {}, 9 | integrations = {}, 10 | changed_themes = {}, 11 | transparency = true, 12 | } 13 | 14 | 15 | -- M.ui = { 16 | -- tabufline = { 17 | -- lazyload = false 18 | -- } 19 | --} 20 | 21 | 22 | M.nvdash = { 23 | load_on_startup = true, 24 | header = { 25 | [[ ]], 26 | [[  ]], 27 | [[ ████ ██████ █████ ██ ]], 28 | [[ ███████████ █████  ]], 29 | [[ █████████ ███████████████████ ███ ███████████ ]], 30 | [[ █████████ ███ █████████████ █████ ██████████████ ]], 31 | [[ █████████ ██████████ █████████ █████ █████ ████ █████ ]], 32 | [[ ███████████ ███ ███ █████████ █████ █████ ████ █████ ]], 33 | [[ ██████ █████████████████████ ████ █████ █████ ████ ██████ ]], 34 | [[ ]], 35 | }, 36 | } 37 | 38 | return M 39 | 40 | 41 | -------------------------------------------------------------------------------- /.config/nvim/lua/configs/conform.lua: -------------------------------------------------------------------------------- 1 | local options = { 2 | formatters_by_ft = { 3 | lua = { "stylua" }, 4 | c = { "clang-format" }, 5 | cpp = { "clang-format" }, 6 | css = { "prettier" }, 7 | html = { "prettier" }, 8 | }, 9 | 10 | -- format_on_save = { 11 | -- -- These options will be passed to conform.format() 12 | -- timeout_ms = 500, 13 | -- lsp_fallback = true, 14 | -- }, 15 | } 16 | 17 | require("conform").setup(options) 18 | -------------------------------------------------------------------------------- /.config/nvim/lua/configs/lazy.lua: -------------------------------------------------------------------------------- 1 | return { 2 | defaults = { lazy = true }, 3 | install = { colorscheme = { "nvchad" } }, 4 | 5 | ui = { 6 | icons = { 7 | ft = "", 8 | lazy = "󰂠 ", 9 | loaded = "", 10 | not_loaded = "", 11 | }, 12 | }, 13 | 14 | performance = { 15 | rtp = { 16 | disabled_plugins = { 17 | "2html_plugin", 18 | "tohtml", 19 | "getscript", 20 | "getscriptPlugin", 21 | "gzip", 22 | "logipat", 23 | "netrw", 24 | "netrwPlugin", 25 | "netrwSettings", 26 | "netrwFileHandlers", 27 | "matchit", 28 | "tar", 29 | "tarPlugin", 30 | "rrhelper", 31 | "spellfile_plugin", 32 | "vimball", 33 | "vimballPlugin", 34 | "zip", 35 | "zipPlugin", 36 | "tutor", 37 | "rplugin", 38 | "syntax", 39 | "synmenu", 40 | "optwin", 41 | "compiler", 42 | "bugreport", 43 | "ftplugin", 44 | }, 45 | }, 46 | }, 47 | } 48 | -------------------------------------------------------------------------------- /.config/nvim/lua/configs/lspconfig.lua: -------------------------------------------------------------------------------- 1 | require("nvchad.configs.lspconfig").defaults() 2 | local servers = { 3 | "clangd", 4 | "html", 5 | "ruff", 6 | "pyright", 7 | "oxlint", 8 | "cssls", 9 | "html", 10 | "rust_analyzer", 11 | "marksman", 12 | "jsonls", 13 | } 14 | 15 | vim.lsp.enable(servers) 16 | 17 | local function on_attach(_, bufnr) 18 | local map = vim.keymap.set 19 | local opts = { buffer = bufnr } 20 | 21 | map("n", "gr", "Telescope lsp_references", opts) 22 | map("n", "gd", "Telescope lsp_definitions", opts) 23 | map("n", "gi", "Telescope lsp_implementations", opts) 24 | map("n", "gs", "Telescope lsp_document_symbols", opts) 25 | map("n", "gS", "Telescope lsp_workspace_symbols", opts) 26 | map("n", "gy", "Telescope lsp_type_definitions", opts) 27 | end 28 | 29 | vim.lsp.config("*", { 30 | on_attach = on_attach, 31 | }) 32 | 33 | vim.lsp.config("pyright", { 34 | settings = { 35 | pyright = { 36 | disableOrganizeImports = true, 37 | }, 38 | python = { 39 | analysis = { 40 | ignore = { "*" }, 41 | }, 42 | }, 43 | }, 44 | }) 45 | -------------------------------------------------------------------------------- /.config/nvim/lua/highlights.lua: -------------------------------------------------------------------------------- 1 | -- To find any highlight groups: " Telescope highlights" 2 | -- Each highlight group can take a table with variables fg, bg, bold, italic, etc 3 | -- base30 variable names can also be used as colors 4 | 5 | local M = {} 6 | 7 | ---@type HLTable 8 | M.override = { 9 | CursorLine = { 10 | bg = "black2", 11 | }, 12 | Comment = { 13 | italic = true, 14 | }, 15 | } 16 | 17 | ---@type HLTable 18 | M.add = { 19 | NvimTreeOpenedFolderName = { fg = "green", bold = true }, 20 | } 21 | 22 | return M 23 | -------------------------------------------------------------------------------- /.config/nvim/lua/mappings.lua: -------------------------------------------------------------------------------- 1 | require "nvchad.mappings" 2 | 3 | local map = vim.keymap.set 4 | 5 | map("n", "", ":TmuxNavigateLeft", { desc = "tmux_navigator Window left" }) 6 | map("n", "", ":TmuxNavigateRight", { desc = "tmux_navigator Window right" }) 7 | map("n", "", ":TmuxNavigateDown", { desc = "tmux_navigator Window down" }) 8 | map("n", "", ":TmuxNavigateUp", { desc = "tmux_navigator Window left" }) 9 | 10 | map("n", "tw", function() 11 | vim.wo.wrap = not vim.wo.wrap 12 | end, { 13 | desc = "Toggle wrap", 14 | }) 15 | 16 | map( 17 | "n", 18 | "tt", 19 | ":lua require('base46').toggle_transparency()", 20 | { noremap = true, silent = true, desc = "Toggle Background Transparency" } 21 | ) 22 | map("n", "ca", "lua vim.lsp.buf.code_action()", { desc = "code action" }) 23 | 24 | map("n", "cc", function() 25 | local file = vim.fn.expand "%:t" 26 | local fp = vim.fn.expand "%:p:h" 27 | local ft = vim.bo.filetype 28 | local supported_ft = { "python", "cpp", "c" } 29 | 30 | -- Check if it's a Dart file or part of a Flutter project 31 | local is_flutter_project = vim.fn.filereadable "pubspec.yaml" == 1 32 | and vim.fn.match(vim.fn.readfile "pubspec.yaml", "flutter") >= 0 33 | 34 | if is_flutter_project then 35 | vim.cmd "Telescope flutter commands" 36 | return 37 | end 38 | 39 | if not vim.tbl_contains(supported_ft, ft) then 40 | print "Error: Unsupported file type" 41 | return 42 | end 43 | require("nvchad.term").runner { 44 | id = "run", 45 | pos = "sp", 46 | cmd = function() 47 | local ft_cmds = { 48 | python = "python3 " .. file, 49 | cpp = "clear && g++ -o out " .. file .. " && ./out", 50 | c = "clear && gcc -o out " .. file .. " && ./out", 51 | } 52 | return "cd " .. fp .. " && clear && " .. ft_cmds[ft] 53 | end, 54 | } 55 | end, { desc = "Code Runner or Flutter Commands" }) 56 | 57 | -- mouse users + nvimtree users! 58 | map("n", "", function() 59 | vim.cmd.exec '"normal! \\"' 60 | 61 | local options = vim.bo.ft == "NvimTree" and "nvimtree" or "default" 62 | require("menu").open(options, { mouse = true }) 63 | end, {}) 64 | 65 | for i = 1, 9, 1 do 66 | map("n", string.format("", i), function() 67 | vim.api.nvim_set_current_buf(vim.t.bufs[i]) 68 | end) 69 | end 70 | 71 | for i = 1, 9, 1 do 72 | map("n", string.format("", i), function() 73 | vim.api.nvim_set_current_buf(vim.t.bufs[i]) 74 | end) 75 | end 76 | 77 | -- Call "CellularAutomaton make_it_rain" command 78 | map("n", "mk", "CellularAutomaton make_it_rain", { 79 | desc = "make it rain", 80 | }) 81 | 82 | -- Global variable to track inline diagnostic virtual text state (off by default) 83 | _G.diagnostics_virtual_text = false 84 | 85 | -- Toggle function for inline diagnostics (virtual_text) 86 | local function toggle_diagnostics() 87 | _G.diagnostics_virtual_text = not _G.diagnostics_virtual_text 88 | vim.diagnostic.config { 89 | virtual_text = _G.diagnostics_virtual_text, 90 | signs = true, 91 | underline = true, 92 | update_in_insert = false, 93 | } 94 | vim.notify( 95 | _G.diagnostics_virtual_text and "Inline diagnostics enabled" or "Inline diagnostics disabled", 96 | vim.log.levels.INFO, 97 | { title = "Diagnostics" } 98 | ) 99 | end 100 | 101 | map( 102 | { "n" }, 103 | "fa", 104 | "Telescope find_files no_ignore=false hidden=true", 105 | { desc = "telescope find all files" } 106 | ) 107 | 108 | -- manually overriding the mapping passing in the border style 109 | map({ "n" }, "K", function() 110 | vim.lsp.buf.hover { border = "rounded" } 111 | end, { desc = "LSP show details", silent = true }) 112 | 113 | -- Map s to toggle inline diagnostics 114 | map("n", "s", toggle_diagnostics, { desc = "Toggle inline diagnostics", silent = true }) 115 | -------------------------------------------------------------------------------- /.config/nvim/lua/myinit.lua: -------------------------------------------------------------------------------- 1 | require "plugins" 2 | require "options" 3 | -------------------------------------------------------------------------------- /.config/nvim/lua/options.lua: -------------------------------------------------------------------------------- 1 | require "nvchad.options" 2 | local opt = vim.opt 3 | 4 | -- Enable syntax highlight 5 | vim.cmd "syntax enable" 6 | 7 | -- Enable filetype plugins 8 | vim.cmd [[ 9 | filetype on 10 | filetype plugin on 11 | filetype indent on 12 | ]] 13 | 14 | -- Disable folder in diff mode 15 | vim.cmd [[ 16 | set diffopt+=context:99999,foldcolumn:0 17 | ]] 18 | 19 | vim.g["prettier#autoformat_options"] = "--tab-width 4 --use-tabs" 20 | 21 | -- disable swap file 22 | -- opt.swapfile = false 23 | -- Set utf8 as standard encoding and en_US as the standard language 24 | opt.encoding = "utf8" 25 | -- Use Unix as the standard file type 26 | opt.ffs = "unix,dos,mac" 27 | -- Turn on the wild menu 28 | opt.wildmenu = true 29 | -- configure backspace so it acts as it should act 30 | opt.backspace = "eol,start,indent" 31 | -- Ignore the case when the search pattern is all lowercase. 32 | opt.ignorecase = true 33 | opt.smartcase = true 34 | -- For regular expressions turn magic on 35 | opt.magic = true 36 | -- Show matching brackets when text indicator is over them 37 | opt.showmatch = true 38 | -- hide/show visible characters 39 | opt.list = false 40 | -- No annoying sound on errors 41 | opt.errorbells = false 42 | opt.visualbell = false 43 | opt.tm = 500 44 | opt.completeopt = "menu,menuone,noselect" 45 | -- Tab set to four 46 | opt.tabstop = 4 47 | opt.shiftwidth = 4 48 | -- opt.softtabstop = 4 49 | opt.expandtab = false 50 | opt.smarttab = true 51 | -- linebreak on 200 characters 52 | opt.lbr = true 53 | opt.tw = 200 54 | -- Auto indent 55 | opt.ai = true 56 | -- Smart indent 57 | opt.si = true 58 | -- Disable line wrapping 59 | opt.wrap = false 60 | -------------------------------------------------------------------------------- /.config/nvim/lua/plugins/init.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "stevearc/conform.nvim", 4 | -- event = 'BufWritePre', -- uncomment for format on save 5 | config = function() 6 | require "configs.conform" 7 | end, 8 | }, 9 | 10 | { 11 | "nvim-telescope/telescope.nvim", 12 | opts = { 13 | extensions = { 14 | fzf = { 15 | fuzzy = true, 16 | override_generic_sorter = true, 17 | override_file_sorter = true, 18 | case_mode = "smart_case", 19 | }, 20 | }, 21 | }, 22 | dependencies = { 23 | { "nvim-telescope/telescope-fzf-native.nvim", build = "make" }, 24 | }, 25 | }, 26 | 27 | { 28 | "neovim/nvim-lspconfig", 29 | config = function() 30 | require "configs.lspconfig" 31 | end, 32 | }, 33 | 34 | { 35 | "nvim-tree/nvim-tree.lua", 36 | opts = { 37 | filters = { 38 | dotfiles = true, 39 | custom = { "node_modules" }, 40 | }, 41 | 42 | git = { 43 | enable = true, 44 | }, 45 | 46 | renderer = { 47 | highlight_git = true, 48 | icons = { 49 | show = { 50 | git = true, 51 | }, 52 | }, 53 | }, 54 | }, 55 | }, 56 | 57 | { 58 | "nvim-treesitter/nvim-treesitter", 59 | opts = { 60 | ensure_installed = { 61 | "vim", 62 | "lua", 63 | "vimdoc", 64 | "html", 65 | "css", 66 | "javascript", 67 | "dart", 68 | "hyprlang", 69 | "json", 70 | "toml", 71 | "c", 72 | "markdown", 73 | "python", 74 | "cpp", 75 | "rust", 76 | "bash", 77 | "typescript", 78 | }, 79 | }, 80 | }, 81 | 82 | { 83 | "NvChad/base46", 84 | branch = "v3.0", 85 | }, 86 | 87 | { 88 | "NvChad/ui", 89 | branch = "v3.0", 90 | }, 91 | { import = "nvchad.blink.lazyspec" }, 92 | 93 | --------------------------------------------- custom plugins ---------------------------------------------- 94 | { 95 | "folke/trouble.nvim", 96 | opts = {}, -- for default options, refer to the configuration section for custom setup. 97 | cmd = "Trouble", 98 | keys = { 99 | { 100 | "pp", 101 | "Trouble diagnostics toggle", 102 | desc = "Diagnostics (Trouble)", 103 | }, 104 | { 105 | "pb", 106 | "Trouble diagnostics toggle filter.buf=0", 107 | desc = "Buffer Diagnostics (Trouble)", 108 | }, 109 | { 110 | "ps", 111 | "Trouble symbols toggle focus=false", 112 | desc = "Symbols (Trouble)", 113 | }, 114 | }, 115 | }, 116 | 117 | { 118 | "nvim-flutter/flutter-tools.nvim", 119 | lazy = false, 120 | dependencies = { 121 | "nvim-lua/plenary.nvim", 122 | }, 123 | config = true, 124 | opts = { 125 | lsp = { 126 | on_attach = function(_, bufnr) 127 | local map = vim.keymap.set 128 | local opts = { buffer = bufnr } 129 | 130 | map("n", "gr", "Telescope lsp_references", opts) 131 | map("n", "gd", "Telescope lsp_definitions", opts) 132 | map("n", "gi", "Telescope lsp_implementations", opts) 133 | map("n", "gs", "Telescope lsp_document_symbols", opts) 134 | map("n", "gS", "Telescope lsp_workspace_symbols", opts) 135 | map("n", "gy", "Telescope lsp_type_definitions", opts) 136 | end, 137 | }, 138 | }, 139 | }, 140 | { 141 | "christoomey/vim-tmux-navigator", 142 | lazy = false, 143 | }, 144 | { 145 | "eandrju/cellular-automaton.nvim", 146 | lazy = false, 147 | }, 148 | { "nvim-telescope/telescope-fzf-native.nvim", build = "make" }, 149 | { "nvzone/volt", lazy = true }, 150 | { "nvzone/menu", lazy = true }, 151 | } 152 | -------------------------------------------------------------------------------- /.config/nvtop/interface.ini: -------------------------------------------------------------------------------- 1 | ; Please do not edit this file. 2 | ; The file is automatically generated and modified by nvtop by pressing F12. 3 | ; If you wish to modify an option, use nvtop's setup window (F2) and follow up by saving the preference (F12). 4 | [GeneralOption] 5 | UseColor = true 6 | UpdateInterval = 1000 7 | ShowInfoMessages = false 8 | 9 | [HeaderOption] 10 | UseFahrenheit = false 11 | EncodeHideTimer = 3.000000e+01 12 | GPUInfoBar = false 13 | 14 | [ChartOption] 15 | ReverseChart = false 16 | 17 | [ProcessListOption] 18 | HideNvtopProcess = true 19 | SortOrder = descending 20 | SortBy = memory 21 | DisplayField = pId 22 | DisplayField = user 23 | DisplayField = gpuId 24 | DisplayField = type 25 | DisplayField = gpuRate 26 | DisplayField = memory 27 | DisplayField = cpuUsage 28 | DisplayField = cpuMem 29 | DisplayField = cmdline 30 | 31 | [Device] 32 | Pdev = 0000:01:00.0 33 | Monitor = true 34 | ShownInfo = gpuRate 35 | ShownInfo = gpuMemRate 36 | 37 | 38 | [Device] 39 | Pdev = 0000:00:02.0 40 | Monitor = true 41 | ShownInfo = gpuRate 42 | ShownInfo = gpuMemRate 43 | 44 | -------------------------------------------------------------------------------- /.config/pipewire/pipewire-pulse.conf.d/switch-on-connect.conf: -------------------------------------------------------------------------------- 1 | # override for pipewire-pulse.conf file 2 | pulse.cmd = [ 3 | { cmd = "load-module" args = "module-always-sink" flags = [ ] } 4 | { cmd = "load-module" args = "module-switch-on-connect" } 5 | ] 6 | -------------------------------------------------------------------------------- /.config/pipewire/pipewire.conf.d/99-input-denoising.conf: -------------------------------------------------------------------------------- 1 | context.modules = [ 2 | { name = libpipewire-module-filter-chain 3 | args = { 4 | node.description = "Noise Canceling source" 5 | media.name = "Noise Canceling source" 6 | filter.graph = { 7 | nodes = [ 8 | { 9 | type = ladspa 10 | name = rnnoise 11 | plugin = /usr/lib/ladspa/librnnoise_ladspa.so 12 | label = noise_suppressor_mono 13 | control = { 14 | "VAD Threshold (%)" 90.0 15 | "VAD Grace Period (ms)" 200 16 | "Retroactive VAD Grace (ms)" 0 17 | } 18 | } 19 | ] 20 | } 21 | capture.props = { 22 | node.name = "capture.rnnoise_source" 23 | node.passive = true 24 | audio.rate = 48000 25 | } 26 | playback.props = { 27 | node.name = "rnnoise_source" 28 | media.class = Audio/Source 29 | audio.rate = 48000 30 | } 31 | } 32 | } 33 | ] 34 | -------------------------------------------------------------------------------- /.config/qtile/__pycache__/colors.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/qtile/__pycache__/colors.cpython-39.pyc -------------------------------------------------------------------------------- /.config/qtile/__pycache__/config.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/qtile/__pycache__/config.cpython-39.pyc -------------------------------------------------------------------------------- /.config/qtile/autostart.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 & 3 | nitrogen --restore & 4 | picom --experimental-backends & 5 | dunst & 6 | xbindkeys & 7 | numlockx & 8 | nm-applet & 9 | -------------------------------------------------------------------------------- /.config/ranger/commands.py: -------------------------------------------------------------------------------- 1 | # This is a sample commands.py. You can add your own commands here. 2 | # 3 | # Please refer to commands_full.py for all the default commands and a complete 4 | # documentation. Do NOT add them all here, or you may end up with defunct 5 | # commands when upgrading ranger. 6 | 7 | # A simple command for demonstration purposes follows. 8 | # ----------------------------------------------------------------------------- 9 | 10 | from __future__ import (absolute_import, division, print_function) 11 | 12 | # You can import any python module as needed. 13 | import os 14 | 15 | # You always need to import ranger.api.commands here to get the Command class: 16 | from ranger.api.commands import Command 17 | 18 | 19 | # Any class that is a subclass of "Command" will be integrated into ranger as a 20 | # command. Try typing ":my_edit" in ranger! 21 | class my_edit(Command): 22 | # The so-called doc-string of the class will be visible in the built-in 23 | # help that is accessible by typing "?c" inside ranger. 24 | """:my_edit 25 | 26 | A sample command for demonstration purposes that opens a file in an editor. 27 | """ 28 | 29 | # The execute method is called when you run this command in ranger. 30 | def execute(self): 31 | # self.arg(1) is the first (space-separated) argument to the function. 32 | # This way you can write ":my_edit somefilename". 33 | if self.arg(1): 34 | # self.rest(1) contains self.arg(1) and everything that follows 35 | target_filename = self.rest(1) 36 | else: 37 | # self.fm is a ranger.core.filemanager.FileManager object and gives 38 | # you access to internals of ranger. 39 | # self.fm.thisfile is a ranger.container.file.File object and is a 40 | # reference to the currently selected file. 41 | target_filename = self.fm.thisfile.path 42 | 43 | # This is a generic function to print text in ranger. 44 | self.fm.notify("Let's edit the file " + target_filename + "!") 45 | 46 | # Using bad=True in fm.notify allows you to print error messages: 47 | if not os.path.exists(target_filename): 48 | self.fm.notify("The given file does not exist!", bad=True) 49 | return 50 | 51 | # This executes a function from ranger.core.acitons, a module with a 52 | # variety of subroutines that can help you construct commands. 53 | # Check out the source, or run "pydoc ranger.core.actions" for a list. 54 | self.fm.edit_file(target_filename) 55 | 56 | # The tab method is called when you press tab, and should return a list of 57 | # suggestions that the user will tab through. 58 | # tabnum is 1 for and -1 for by default 59 | def tab(self, tabnum): 60 | # This is a generic tab-completion function that iterates through the 61 | # content of the current directory. 62 | return self._tab_directory_content() 63 | -------------------------------------------------------------------------------- /.config/rofi/cat.rasi: -------------------------------------------------------------------------------- 1 | * { 2 | bg-col: #1e1e2e; 3 | bg-col-light: #1e1e2e; 4 | border-col: #1e1e2e; 5 | selected-col: #1e1e2e; 6 | blue: #89b4fa; 7 | fg-col: #cdd6f4; 8 | fg-col2: #f38ba8; 9 | grey: #6c7086; 10 | 11 | width: 600; 12 | font: "JetBrainsMono Nerd Font 14"; 13 | } 14 | 15 | element-text, element-icon , mode-switcher { 16 | background-color: inherit; 17 | text-color: inherit; 18 | } 19 | 20 | window { 21 | height: 360px; 22 | border: 3px; 23 | border-color: @border-col; 24 | background-color: @bg-col; 25 | } 26 | 27 | mainbox { 28 | background-color: @bg-col; 29 | } 30 | 31 | inputbar { 32 | children: [prompt,entry]; 33 | background-color: @bg-col; 34 | border-radius: 5px; 35 | padding: 2px; 36 | } 37 | 38 | prompt { 39 | background-color: @blue; 40 | padding: 6px; 41 | text-color: @bg-col; 42 | border-radius: 3px; 43 | margin: 20px 0px 0px 20px; 44 | } 45 | 46 | textbox-prompt-colon { 47 | expand: false; 48 | str: ":"; 49 | } 50 | 51 | entry { 52 | padding: 6px; 53 | margin: 20px 0px 0px 10px; 54 | text-color: @fg-col; 55 | background-color: @bg-col; 56 | } 57 | 58 | listview { 59 | border: 0px 0px 0px; 60 | padding: 6px 0px 0px; 61 | margin: 10px 0px 0px 20px; 62 | columns: 1; 63 | lines: 5; 64 | background-color: @bg-col; 65 | } 66 | 67 | element { 68 | padding: 5px; 69 | background-color: @bg-col; 70 | text-color: @fg-col ; 71 | } 72 | 73 | element-icon { 74 | size: 25px; 75 | } 76 | 77 | element selected { 78 | background-color: @selected-col ; 79 | text-color: @fg-col2 ; 80 | } 81 | 82 | mode-switcher { 83 | spacing: 0; 84 | } 85 | 86 | button { 87 | padding: 10px; 88 | background-color: @bg-col-light; 89 | text-color: @grey; 90 | vertical-align: 0.5; 91 | horizontal-align: 0.5; 92 | } 93 | 94 | button selected { 95 | background-color: @bg-col; 96 | text-color: @blue; 97 | } 98 | 99 | message { 100 | background-color: @bg-col-light; 101 | margin: 2px; 102 | padding: 2px; 103 | border-radius: 5px; 104 | } 105 | 106 | textbox { 107 | padding: 6px; 108 | margin: 20px 0px 0px 20px; 109 | text-color: @blue; 110 | background-color: @bg-col-light; 111 | } 112 | -------------------------------------------------------------------------------- /.config/rofi/clip.rasi: -------------------------------------------------------------------------------- 1 | configuration { 2 | font: "Product Sans 10"; 3 | show-icons: true; 4 | icon-theme: "Colloid-dark"; 5 | fullscreen: false; 6 | threads: 0; 7 | matching: "normal"; 8 | scroll-method: 0; 9 | monitor: "primary"; 10 | } 11 | 12 | * { 13 | transparent: #00000000; 14 | foreground: #F2F2F2EE; 15 | background-selected: #F2F2F245; 16 | background-active: #F2F2F230; 17 | background-white: #F2F2F211; 18 | background-black: #00000000; 19 | urgent: #E91E6366; 20 | urgent-selected: #E91E6377; 21 | border-radius: 18px; 22 | } 23 | 24 | window { 25 | transparency: "real"; 26 | background-color: #1917244D; 27 | text-color: #6e6a86; 28 | location: southeast; 29 | anchor: southeast; 30 | fullscreen: false; 31 | width: 500px; 32 | x-offset: -11px; 33 | y-offset: -11px; 34 | } 35 | 36 | prompt { 37 | enabled: false; 38 | } 39 | 40 | button { 41 | action: "ok"; 42 | str: " "; 43 | font: "FantasqueSansMono Nerd Font 16"; 44 | expand: false; 45 | text-color: #6e6a86; background-color: @transparent; vertical-align: 0.5; 46 | horizontal-align: 0.5; 47 | } 48 | 49 | entry { 50 | font: "Product sans 12"; 51 | background-color: @transparent; 52 | text-color: #6e6a86; 53 | expand: true; 54 | vertical-align: 0.5; 55 | horizontal-align: 0; 56 | placeholder: "Cliphist Search"; 57 | placeholder-color: @foreground; 58 | blink: true; 59 | } 60 | 61 | entry-wrapper { 62 | orientation: horizontal; 63 | margin: 0 12px 0 12px; 64 | spacing: 24px; 65 | vertical-align: 0.5; 66 | background-color: @transparent; 67 | children: [ button, entry ]; 68 | } 69 | 70 | inputbar { 71 | padding: 14px; 72 | margin: 10px 10px 14px 10px; 73 | background-color: #26233a; 74 | text-color: @foreground; 75 | expand: false; 76 | border-radius: 12px; 77 | position: north; 78 | children: [ entry-wrapper ]; 79 | } 80 | 81 | listview { 82 | background-color: @transparent; 83 | spacing: 0; 84 | cycle: true; 85 | dynamic: true; 86 | scrollbar: true; 87 | } 88 | 89 | mainbox { 90 | width: 200px; 91 | expand: true; 92 | spacing: 12px; 93 | padding: 5px; 94 | background-color: @background-black; 95 | children: [ inputbar, listview ]; 96 | } 97 | 98 | scrollbar { 99 | background-color: @background-white; 100 | handle-width: 0; 101 | margin: 0 0 5px 0; 102 | border-radius: 9px; 103 | } 104 | 105 | element { 106 | background-color: @transparent; 107 | text-color: @foreground; 108 | orientation: horizontal; 109 | border: 0; 110 | border-color: @background-white; 111 | border-radius: 9px; 112 | spacing: 24px; 113 | margin: 0px 12px 0px 12px; 114 | padding: 10px 24px 10px 24px; 115 | } 116 | 117 | element-icon { 118 | size: 24px; 119 | border: 0; 120 | border-color: @transparent; 121 | background-color: transparent; 122 | } 123 | 124 | element-text { 125 | font: "Product sans 11"; 126 | expand: true; 127 | horizontal-align: 0; 128 | vertical-align: 0.5; 129 | color: #FAF9F6; 130 | background-color: transparent; 131 | } 132 | 133 | element normal.urgent, 134 | element alternate.urgent { 135 | background-color: @urgent; 136 | text-color: @foreground; 137 | border-radius: 9px; 138 | } 139 | 140 | element normal.active, 141 | element alternate.active { 142 | background-color: @background-active; 143 | text-color: @foreground; 144 | } 145 | 146 | element selected { 147 | background-color: #403d5220; 148 | text-color: @foreground; 149 | } 150 | 151 | element selected.urgent { 152 | background-color: @urgent-selected; 153 | text-color: @foreground; 154 | } 155 | 156 | element selected.active { 157 | background-color: #403d5220; 158 | color: @foreground-selected; 159 | } 160 | -------------------------------------------------------------------------------- /.config/rofi/emoji.rasi: -------------------------------------------------------------------------------- 1 | configuration { 2 | display-emoji: ""; 3 | show-icons: false; 4 | me-select-entry: ""; 5 | me-accept-entry: "MousePrimary"; 6 | } 7 | 8 | * { 9 | font: "Noto Sans 11"; 10 | text-color: #eff0eb; 11 | background-color: #1917244D; 12 | border-color: #00000000; 13 | width: 684px; 14 | height: 477px; 15 | border-radius: 12px; 16 | location: 0; 17 | } 18 | 19 | inputbar { 20 | border: 0 0 1px 0; 21 | children: [prompt,entry]; 22 | } 23 | 24 | prompt { 25 | font: "Noto Sans 18"; 26 | vertical-align: 0.5; 27 | padding: 0px 9px 0px 9px; 28 | border: 0 1px 0 0; 29 | } 30 | 31 | entry { 32 | padding: 12px; 33 | } 34 | 35 | textbox { 36 | background-color: #1917244D; 37 | border-color: #1917244D; 38 | padding: 13px 13px; 39 | } 40 | 41 | listview { 42 | cycle: false; 43 | scrollbar: false; 44 | columns: 9; 45 | cycle: false; 46 | dynamic: false; 47 | layout: vertical; 48 | padding: 8px 10px 10px 10px; 49 | } 50 | 51 | element { 52 | border-radius: 3px; 53 | padding: 14px 0px 14px 0px; 54 | } 55 | 56 | element-text { 57 | font: "Noto Color Emoji 27"; 58 | expand: false; 59 | text-color: #333333; 60 | horizontal-align: 1; 61 | vertical-align: 0.5; 62 | margin: 0px 0px 0px 13px; 63 | width: 1px; 64 | padding: 1px 0px 16px; 65 | } 66 | 67 | element selected { 68 | background-color: #191724; 69 | } 70 | -------------------------------------------------------------------------------- /.config/rofi/launcher.rasi: -------------------------------------------------------------------------------- 1 | configuration { 2 | font: "Product Sans 10"; 3 | show-icons: true; 4 | icon-theme: "Colloid-dark"; 5 | fullscreen: false; 6 | threads: 0; 7 | matching: "fuzzy"; 8 | scroll-method: 0; 9 | monitor: "primary"; 10 | } 11 | 12 | * { 13 | transparent: #00000000; 14 | foreground: #F2F2F2EE; 15 | background-selected: #F2F2F245; 16 | background-active: #F2F2F230; 17 | background-white: #F2F2F211; 18 | background-black: #00000000; 19 | urgent: #E91E6366; 20 | urgent-selected: #E91E6377; 21 | border-radius: 18px; 22 | } 23 | 24 | window { 25 | transparency: "real"; 26 | background-color: #1917244D; 27 | text-color: #6e6a86; 28 | x-offset: 5px; 29 | y-offset: -50px; 30 | } 31 | 32 | prompt { 33 | enabled: false; 34 | } 35 | 36 | button { 37 | action: "ok"; 38 | str: " "; 39 | font: "FantasqueSansMono Nerd Font 16"; 40 | expand: false; 41 | text-color: #6e6a86; background-color: @transparent; vertical-align: 0.5; 42 | horizontal-align: 0.5; 43 | } 44 | 45 | entry { 46 | font: "Product sans 12"; 47 | background-color: @transparent; 48 | text-color: #6e6a86; 49 | expand: true; 50 | vertical-align: 0.5; 51 | horizontal-align: 0; 52 | placeholder: "Global Search"; 53 | placeholder-color: @foreground; 54 | blink: true; 55 | } 56 | 57 | entry-wrapper { 58 | orientation: horizontal; 59 | margin: 0 12px 0 12px; 60 | spacing: 24px; 61 | vertical-align: 0.5; 62 | background-color: @transparent; 63 | children: [ button, entry ]; 64 | } 65 | 66 | inputbar { 67 | padding: 14px; 68 | margin: 10px 10px 14px 10px; 69 | background-color: #26233a; 70 | text-color: @foreground; 71 | expand: false; 72 | border-radius: 12px; 73 | position: north; 74 | children: [ entry-wrapper ]; 75 | } 76 | 77 | listview { 78 | background-color: @transparent; 79 | spacing: 0; 80 | cycle: true; 81 | dynamic: true; 82 | scrollbar: true; 83 | } 84 | 85 | mainbox { 86 | width: 200px; 87 | expand: true; 88 | spacing: 12px; 89 | padding: 5px; 90 | background-color: @background-black; 91 | children: [ inputbar, listview ]; 92 | } 93 | 94 | scrollbar { 95 | background-color: @background-white; 96 | handle-width: 0; 97 | margin: 0 0 5px 0; 98 | border-radius: 9px; 99 | } 100 | 101 | element { 102 | background-color: @transparent; 103 | text-color: @foreground; 104 | orientation: horizontal; 105 | border: 0; 106 | border-color: @background-white; 107 | border-radius: 9px; 108 | spacing: 24px; 109 | margin: 0px 12px 0px 12px; 110 | padding: 10px 24px 10px 24px; 111 | } 112 | 113 | element-icon { 114 | size: 24px; 115 | border: 0; 116 | border-color: @transparent; 117 | background-color: transparent; 118 | } 119 | 120 | element-text { 121 | font: "Product sans 11"; 122 | expand: true; 123 | horizontal-align: 0; 124 | vertical-align: 0.5; 125 | color: #4AA19B; 126 | background-color: transparent; 127 | } 128 | 129 | element normal.urgent, 130 | element alternate.urgent { 131 | background-color: @urgent; 132 | text-color: @foreground; 133 | border-radius: 9px; 134 | } 135 | 136 | element normal.active, 137 | element alternate.active { 138 | background-color: @background-active; 139 | text-color: @foreground; 140 | } 141 | 142 | element selected { 143 | background-color: #403d5220; 144 | text-color: @foreground; 145 | } 146 | 147 | element selected.urgent { 148 | background-color: @urgent-selected; 149 | text-color: @foreground; 150 | } 151 | 152 | element selected.active { 153 | background-color: #403d5220; 154 | color: @foreground-selected; 155 | } 156 | -------------------------------------------------------------------------------- /.config/rofi/shared/colors.rasi: -------------------------------------------------------------------------------- 1 | * { 2 | transparent: #00000000; 3 | foreground: #F2F2F2EE; 4 | background: #1E1E2E; 5 | background-alt: #45475A; 6 | foreground: #dee6e7; 7 | selected: #F0719B; 8 | active: #2ce592; 9 | urgent: #f02e6e; 10 | } 11 | -------------------------------------------------------------------------------- /.config/rofi/shared/fonts.rasi: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020-2022 Aditya Shakya */ 2 | 3 | /* Text Font */ 4 | 5 | * { 6 | font: "Jetbrains mono 10"; 7 | } 8 | -------------------------------------------------------------------------------- /.config/rofi/wall.rasi: -------------------------------------------------------------------------------- 1 | configuration { 2 | font: "Product Sans 10"; 3 | show-icons: true; 4 | icon-theme: "Colloid-dark"; 5 | fullscreen: false; 6 | threads: 0; 7 | matching: "normal"; 8 | scroll-method: 0; 9 | monitor: "primary"; 10 | } 11 | 12 | * { 13 | transparent: #00000000; 14 | foreground: #F2F2F2EE; 15 | background-selected: #F2F2F245; 16 | background-active: #F2F2F230; 17 | background-white: #F2F2F211; 18 | background-black: #00000000; 19 | urgent: #E91E6366; 20 | urgent-selected: #E91E6377; 21 | border-radius: 18px; 22 | } 23 | 24 | window { 25 | transparency: "real"; 26 | background-color: #1917244D; 27 | text-color: #6e6a86; 28 | location: northwest; 29 | anchor: northwest; 30 | fullscreen: false; 31 | width: 500px; 32 | x-offset: 11px; 33 | y-offset: 11px; 34 | } 35 | 36 | prompt { 37 | enabled: false; 38 | } 39 | 40 | button { 41 | action: "ok"; 42 | str: " "; 43 | font: "FantasqueSansMono Nerd Font 16"; 44 | expand: false; 45 | text-color: #6e6a86; background-color: @transparent; vertical-align: 0.5; 46 | horizontal-align: 0.5; 47 | } 48 | 49 | entry { 50 | font: "Product sans 12"; 51 | background-color: @transparent; 52 | text-color: #6e6a86; 53 | expand: true; 54 | vertical-align: 0.5; 55 | horizontal-align: 0; 56 | placeholder: "Wallpaper Search"; 57 | placeholder-color: @foreground; 58 | blink: true; 59 | } 60 | 61 | entry-wrapper { 62 | orientation: horizontal; 63 | margin: 0 12px 0 12px; 64 | spacing: 24px; 65 | vertical-align: 0.5; 66 | background-color: @transparent; 67 | children: [ button, entry ]; 68 | } 69 | 70 | inputbar { 71 | padding: 14px; 72 | margin: 10px 10px 14px 10px; 73 | background-color: #26233a; 74 | text-color: @foreground; 75 | expand: false; 76 | border-radius: 12px; 77 | position: north; 78 | children: [ entry-wrapper ]; 79 | } 80 | 81 | listview { 82 | background-color: @transparent; 83 | spacing: 0; 84 | cycle: true; 85 | dynamic: true; 86 | scrollbar: true; 87 | } 88 | 89 | mainbox { 90 | width: 200px; 91 | expand: true; 92 | spacing: 12px; 93 | padding: 5px; 94 | background-color: @background-black; 95 | children: [ inputbar, listview ]; 96 | } 97 | 98 | scrollbar { 99 | background-color: @background-white; 100 | handle-width: 0; 101 | margin: 0 0 5px 0; 102 | border-radius: 9px; 103 | } 104 | 105 | element { 106 | background-color: @transparent; 107 | text-color: @foreground; 108 | orientation: horizontal; 109 | border: 0; 110 | border-color: @background-white; 111 | border-radius: 9px; 112 | spacing: 24px; 113 | margin: 0px 12px 0px 12px; 114 | padding: 10px 24px 10px 24px; 115 | } 116 | 117 | element-icon { 118 | size: 24px; 119 | border: 0; 120 | border-color: @transparent; 121 | background-color: transparent; 122 | } 123 | 124 | element-text { 125 | font: "Product sans 11"; 126 | expand: true; 127 | horizontal-align: 0; 128 | vertical-align: 0.5; 129 | color: #FAF9F6; 130 | background-color: transparent; 131 | } 132 | 133 | element normal.urgent, 134 | element alternate.urgent { 135 | background-color: @urgent; 136 | text-color: @foreground; 137 | border-radius: 9px; 138 | } 139 | 140 | element normal.active, 141 | element alternate.active { 142 | background-color: @background-active; 143 | text-color: @foreground; 144 | } 145 | 146 | element selected { 147 | background-color: #403d5220; 148 | text-color: @foreground; 149 | } 150 | 151 | element selected.urgent { 152 | background-color: @urgent-selected; 153 | text-color: @foreground; 154 | } 155 | 156 | element selected.active { 157 | background-color: #403d5220; 158 | color: @foreground-selected; 159 | } 160 | -------------------------------------------------------------------------------- /.config/starship.toml: -------------------------------------------------------------------------------- 1 | ## ░█▀▀░▀█▀░█▀█░█▀▄░█▀▀░█░█░▀█▀░█▀█ 2 | ## ░▀▀█░░█░░█▀█░█▀▄░▀▀█░█▀█░░█░░█▀▀ 3 | ## ░▀▀▀░░▀░░▀░▀░▀░▀░▀▀▀░▀░▀░▀▀▀░▀░░ 4 | 5 | format = "$directory$all" 6 | right_format = """$git_branch$git_status$cmd_duration""" 7 | 8 | # Disable the blank line at the start of the prompt 9 | add_newline = false 10 | 11 | [line_break] 12 | disabled = true 13 | 14 | [character] 15 | success_symbol = "[➜](bold green)" 16 | error_symbol = " [✖](#df5b61)" 17 | vicmd_symbol = "[  ](#78b892)" 18 | 19 | [hostname] 20 | ssh_only = true 21 | format = "[$hostname](bold blue) " 22 | disabled = false 23 | 24 | [cmd_duration] 25 | min_time = 1 26 | format = "[](fg:#1c252c bg:none)[$duration]($style)[](fg:#1c252c bg:#1c252c)[](fg:#bc83e3 bg:#1c252c)[ ](fg:#1c252c bg:#bc83e3)[](fg:#bc83e3 bg:none) " 27 | disabled = false 28 | style = "fg:#d9d7d6 bg:#1c252c" 29 | 30 | [git_branch] 31 | format = "[](fg:#1c252c bg:none)[$branch]($style)[](fg:#1c252c bg:#1c252c)[](fg:#78b892 bg:#1c252c)[](fg:#282c34 bg:#78b892)[](fg:#78b892 bg:none) " 32 | style = "fg:#d9d7d6 bg:#1c252c" 33 | 34 | [git_status] 35 | format="[](fg:#1c252c bg:none)[$all_status$ahead_behind]($style)[](fg:#1c252c bg:#1c252c)[](fg:#67afc1 bg:#1c252c)[ ](fg:#1c252c bg:#67afc1)[](fg:#67afc1 bg:none) " 36 | style = "fg:#d9d7d6 bg:#1c252c" 37 | conflicted = "=" 38 | ahead = "⇡${count}" 39 | behind = "⇣${count}" 40 | diverged = "⇕⇡${ahead_count}⇣${behind_count}" 41 | up_to_date = "" 42 | untracked = "?${count}" 43 | stashed = "" 44 | modified = "!${count}" 45 | staged = "+${count}" 46 | renamed = "»${count}" 47 | deleted = "${count}" 48 | 49 | [git_commit] 50 | format = "[\\($hash\\)]($style) [\\($tag\\)]($style)" 51 | style = "green" 52 | 53 | [git_state] 54 | rebase = "REBASING" 55 | merge = "MERGING" 56 | revert = "REVERTING" 57 | cherry_pick = "CHERRY-PICKING" 58 | bisect = "BISECTING" 59 | am = "AM" 60 | am_or_rebase = "AM/REBASE" 61 | style = "yellow" 62 | format = '\([$state( $progress_current/$progress_total)]($style)\) ' 63 | -------------------------------------------------------------------------------- /.config/swaync/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "/etc/xdg/swaync/configSchema.json", 3 | 4 | "positionX": "right", 5 | "positionY": "top", 6 | "control-center-margin-top": 8, 7 | "control-center-margin-bottom": 8, 8 | "control-center-margin-right": 8, 9 | "control-center-margin-left": 8, 10 | "control-center-width": 500, 11 | "control-center-height": 600, 12 | "fit-to-screen": false, 13 | 14 | "layer": "overlay", 15 | "cssPriority": "user", 16 | "notification-icon-size": 64, 17 | "notification-body-image-height": 100, 18 | "notification-body-image-width": 200, 19 | "timeout": 10, 20 | "timeout-low": 5, 21 | "timeout-critical": 0, 22 | "notification-window-width": 500, 23 | "keyboard-shortcuts": true, 24 | "image-visibility": "when-available", 25 | "transition-time": 200, 26 | "hide-on-clear": true, 27 | "hide-on-action": true, 28 | "script-fail-notify": true, 29 | 30 | "widgets": [ 31 | "title", 32 | "dnd", 33 | "mpris", 34 | "notifications" 35 | ], 36 | "widget-config": { 37 | "title": { 38 | "text": "Notifications", 39 | "clear-all-button": true, 40 | "button-text": "Clear All" 41 | }, 42 | "dnd": { 43 | "text": "Do Not Disturb" 44 | }, 45 | "label": { 46 | "max-lines": 5, 47 | "text": "Label Text" 48 | }, 49 | "mpris": { 50 | "image-size": 96, 51 | "image-radius": 12 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /.config/systemd/user/aria2c.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Aria2c download manager 3 | After=network.target network.service 4 | 5 | [Service] 6 | ExecStart=/usr/bin/aria2c --conf-path=/home/adharsh/.config/aria2/aria2.conf 7 | ExecReload=/usr/bin/kill -HUP $MAINPID 8 | ExecStop=/usr/bin/kill -TERM $MAINPID 9 | RestartSec=1min 10 | Restart=on-failure 11 | 12 | [Install] 13 | WantedBy=default.target 14 | -------------------------------------------------------------------------------- /.config/systemd/user/sunshine.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Sunshine self-hosted game stream host for Moonlight. 3 | StartLimitIntervalSec=500 4 | StartLimitBurst=5 5 | 6 | [Service] 7 | ExecStart= 8 | Restart=on-failure 9 | RestartSec=5s 10 | #Flatpak Only 11 | #ExecStop=flatpak kill dev.lizardbyte.sunshine 12 | 13 | [Install] 14 | WantedBy=graphical-session.target 15 | -------------------------------------------------------------------------------- /.config/thorium-flags.conf: -------------------------------------------------------------------------------- 1 | --ignore-gpu-blocklist 2 | --enable-gpu-rasterization 3 | --enable-zero-copy 4 | --enable-features=VaapiVideoDecoder 5 | --enable-features=TouchpadOverscrollHistoryNavigation 6 | --force-dark-mode 7 | --enable-features=WebUIDarkMode 8 | -------------------------------------------------------------------------------- /.config/tmux/tmux.conf: -------------------------------------------------------------------------------- 1 | unbind C-b 2 | set -g prefix M-a 3 | bind M-a send-prefix 4 | set -g history-limit 10000 5 | set -g default-terminal "${TERM}" 6 | set -g default-terminal "screen-256color" 7 | set-option -sg escape-time 10 8 | set-option -gw xterm-keys on 9 | set-option -g focus-events on 10 | set-option -g status-keys vi 11 | set-option -g automatic-rename on 12 | set-option -g status-interval 1 13 | set-window-option -g mode-keys vi 14 | set-option -sa terminal-features ',${TERM}:RGB' 15 | set -s copy-command 'wl-copy' 16 | 17 | 18 | set -g allow-passthrough all 19 | set -ga update-environment TERM 20 | set -ga update-environment TERM_PROGRAM 21 | 22 | # Vim style pane selection 23 | bind h select-pane -L 24 | bind j select-pane -D 25 | bind k select-pane -U 26 | bind l select-pane -R 27 | 28 | set -g allow-rename on 29 | set -g set-titles on 30 | setw -g monitor-activity on 31 | set -as terminal-overrides ',*:Smulx=\E[4::%p1%dm' 32 | set -as terminal-overrides ',*:Setulc=\E[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m' 33 | 34 | 35 | bind-key x kill-pane 36 | bind-key & kill-window 37 | bind-key R source-file ~/.config/tmux/tmux.conf \; display-message "Config successfully reloaded!" 38 | bind-key W choose-tree -Zw "swap-window -t '%%'" 39 | bind-key P choose-tree -Zw "swap-pane -t '%%'" 40 | bind C-l send-keys 'C-l' 41 | bind c new-window -c "#{pane_current_path}" 42 | bind '"' split-window -c "#{pane_current_path}" 43 | bind % split-window -h -c "#{pane_current_path}" 44 | bind-key -n C-right next-window 45 | bind-key -n C-left previous-window 46 | bind-key -n C-k next-window 47 | bind-key -n C-j previous-window 48 | 49 | set -g mouse on 50 | set-option -g status-left-length 50 51 | set-option -g status-right-length 10 52 | set-option -g status-justify centre 53 | 54 | set-option -g status-style "fg=#7C7D83 bg=default" # default will set the background to transparent 55 | 56 | set-option -g window-status-format "#{window_index}:#{window_name}#{window_flags} " # window_name -> pane_current_command 57 | set-option -g window-status-current-format "#{window_index}:#{window_name}#{window_flags} " 58 | set-option -g window-status-current-style "fg=#dcc7a0" 59 | set-option -g window-status-activity-style none 60 | set -g status-right '#[fg=#7C7D83,bold] %H:%M:%S %p ' 61 | set-option -g status-left "#[fg=#7C7D83,bold][#{session_name}]#[fg=#7C7D83,bold]:#[fg=#7C7D83]#(whoami) " 62 | set -g pane-active-border-style fg='#EE6D85' 63 | set -wg mode-style bg='#FFFFFF',fg='#01011f' 64 | set -g message-style bg='#000000',fg='#FFFFFF' 65 | 66 | 67 | # Smart pane switching with awareness of Vim splits. 68 | # See: https://github.com/christoomey/vim-tmux-navigator 69 | is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ 70 | | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|l?n?vim?x?)(diff)?$'" 71 | bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L' 72 | bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D' 73 | bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U' 74 | bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' 'select-pane -R' 75 | tmux_version='$(tmux -V | sed -En "s/^tmux ([0-9]+(.[0-9]+)?).*/\1/p")' 76 | if-shell -b '[ "$(echo "$tmux_version < 3.0" | bc)" = 1 ]' \ 77 | "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\' 'select-pane -l'" 78 | if-shell -b '[ "$(echo "$tmux_version >= 3.0" | bc)" = 1 ]' \ 79 | "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\\\' 'select-pane -l'" 80 | 81 | bind-key -T copy-mode-vi 'C-h' select-pane -L 82 | bind-key -T copy-mode-vi 'C-j' select-pane -D 83 | bind-key -T copy-mode-vi 'C-k' select-pane -U 84 | bind-key -T copy-mode-vi 'C-l' select-pane -R 85 | bind-key -T copy-mode-vi 'C-\' select-pane -l 86 | bind-key -T copy-mode-vi v send-keys -X begin-selection 87 | bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle 88 | bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel 89 | 90 | -------------------------------------------------------------------------------- /.config/tmux/tmux_renumber.sh: -------------------------------------------------------------------------------- 1 | sessions=$(tmux list-sessions -F '#S' | grep '^[0-9]\+$' | sort -n) 2 | new=0 3 | for old in $sessions 4 | do 5 | tmux rename -t $old $new 6 | ((new++)) 7 | done 8 | -------------------------------------------------------------------------------- /.config/waybar/style.css: -------------------------------------------------------------------------------- 1 | * { 2 | /* `otf-font-awesome` is required to be installed for icons */ 3 | border: none; 4 | font-family: 5 | Product Sans, 6 | FontAwesome, 7 | JetBrainsMono Nerd Font; 8 | font-size: 14px; 9 | padding: 0; 10 | /*margin: 0;*/ 11 | /* border-radius: 20px; */ 12 | } 13 | 14 | window#waybar { 15 | background: rgba(8, 8, 8, 0.45); 16 | border-radius: 8px; 17 | transition-property: background-color; 18 | transition-duration: 0.5s; 19 | /* background: transparent; */ 20 | } 21 | 22 | /*-----module groups----*/ 23 | .modules-right { 24 | /* background-color: rgba(8,8,8,0.85); */ 25 | background: transparent; 26 | margin: 0 -12px 0 0; 27 | border-radius: 20px; 28 | } 29 | 30 | .modules-center { 31 | background: transparent; 32 | margin: 0 0 0 0; 33 | border-radius: 20px; 34 | } 35 | 36 | .modules-left { 37 | background: transparent; 38 | margin: 0 0 0 -12px; 39 | border-radius: 20px; 40 | } 41 | 42 | tooltip { 43 | background: #323437; 44 | color: #cdd6f4; 45 | border-radius: 12px; 46 | } 47 | 48 | #workspaces { 49 | padding: 0 14px; 50 | } 51 | 52 | #workspaces button { 53 | padding: 1px 5px; 54 | background: transparent; 55 | color: #4c566a; 56 | } 57 | 58 | #workspaces button:hover { 59 | box-shadow: inherit; 60 | text-shadow: inherit; 61 | color: #d8dee9; 62 | } 63 | 64 | #workspaces button.active { 65 | /* color: #BC83E3; */ 66 | color: #cdd6f4; 67 | transition: all 0.2s cubic-bezier(0.55, -0.68, 0.48, 1.682); 68 | } 69 | 70 | #workspaces button.urgent { 71 | color: #11111b; 72 | background: #fab387; 73 | border-radius: 10px; 74 | } 75 | 76 | #custom-sep { 77 | color: #313244; 78 | font-size: 18px; 79 | } 80 | 81 | #window { 82 | color: #cdd6f4; 83 | font-family: JetbrainsMono Nerd Font; 84 | font-size: 10px; 85 | } 86 | 87 | #custom-recorder { 88 | font-size: 10px; 89 | margin: 2px 7px 0px 7px; 90 | } 91 | 92 | #clock { 93 | margin: 2px 0 0 0; 94 | padding: 2px; 95 | border-radius: 10px; 96 | font-family: JetbrainsMono Nerd Font; 97 | } 98 | 99 | #battery, 100 | #cpu, 101 | #memory, 102 | #temperature, 103 | #network #pulseaudio, 104 | #tray, 105 | #mode, 106 | #custom-power, 107 | #custom-menu, 108 | #idle_inhibitor { 109 | padding: 0 5px; 110 | } 111 | 112 | #mode { 113 | color: #cc3436; 114 | font-weight: bold; 115 | } 116 | 117 | /*-----Indicators----*/ 118 | #network.disconnected { 119 | color: #ff5454; 120 | } 121 | 122 | #network.disabled { 123 | color: #e3c78a; 124 | } 125 | 126 | #idle_inhibitor.activated { 127 | color: #2dcc36; 128 | } 129 | 130 | #backlight-slider slider, 131 | #pulseaudio-slider slider { 132 | background: #A1BDCE; 133 | background-color: transparent; 134 | box-shadow: none; 135 | margin-right: 7px; 136 | } 137 | 138 | #backlight-slider trough, 139 | #pulseaudio-slider trough { 140 | min-width: 90px; 141 | min-height: 10px; 142 | border-radius: 8px; 143 | background: #343434; 144 | } 145 | 146 | #backlight-slider highlight, 147 | #pulseaudio-slider highlight { 148 | border-radius: 8px; 149 | background-color: #d8dee9; 150 | } 151 | 152 | #pulseaudio.muted { 153 | color: #e3c78a; 154 | } 155 | 156 | #battery.charging { 157 | color: #8cc85f; 158 | } 159 | 160 | #battery.warning:not(.charging) { 161 | color: #e3c78a; 162 | } 163 | 164 | #battery.critical:not(.charging) { 165 | color: #ff5454; 166 | } 167 | -------------------------------------------------------------------------------- /.config/wlogout/layout: -------------------------------------------------------------------------------- 1 | { 2 | "label" : "lock", 3 | "action" : "hyprlock", 4 | "text" : "Lock", 5 | "keybind" : "l" 6 | } 7 | { 8 | "label" : "hibernate", 9 | "action" : "systemctl hibernate", 10 | "text" : "Hibernate", 11 | "keybind" : "h" 12 | } 13 | { 14 | "label" : "logout", 15 | "action" : "loginctl kill-session $XDG_SESSION_ID", 16 | "text" : "Logout", 17 | "keybind" : "e" 18 | } 19 | { 20 | "label" : "reboot", 21 | "action" : "systemctl reboot", 22 | "text" : "Reboot", 23 | "keybind" : "r" 24 | } 25 | { 26 | "label" : "shutdown", 27 | "action" : "systemctl poweroff", 28 | "text" : "Shutdown", 29 | "keybind" : "s" 30 | } 31 | { 32 | "label" : "suspend", 33 | "action" : "systemctl suspend", 34 | "text" : "Suspend", 35 | "keybind" : "x" 36 | } 37 | -------------------------------------------------------------------------------- /.config/wlogout/style.css: -------------------------------------------------------------------------------- 1 | @define-color background rgba(0, 0, 0, 0.65); 2 | @define-color foreground rgb(220, 220, 220); 3 | @define-color outline rgba(255, 255, 255, 0.15); 4 | @define-color accent rgb(226, 204, 219); 5 | @define-color button rgba(0, 0, 0, 0.5); 6 | @define-color highlight rgba(255, 255, 255, 0.1); 7 | 8 | * { 9 | background-image: none; 10 | background:none; 11 | border:none; 12 | border-radius: 0; 13 | } 14 | window { 15 | background-color: @background; 16 | margin:5em; 17 | } 18 | button { 19 | margin: .25rem; 20 | font-weight:normal; 21 | box-shadow: inset 0rem 0px rgba(0, 0, 0, 0); 22 | transition: box-shadow .30s ease-in-out, background-color .30s ease-in-out; 23 | background-color: @button; 24 | background-repeat: no-repeat; 25 | background-position: center; 26 | background-size: 20%; 27 | } 28 | 29 | button:focus, button:active, button:hover { 30 | background-color: @highlight; 31 | border: 1px solid @outline; 32 | box-shadow: inset 0rem -0.2em @accent; 33 | } 34 | 35 | #lock { 36 | background-image: image(url("/usr/share/wlogout/icons/lock.png"), url("/usr/local/share/wlogout/icons/lock.png")); 37 | } 38 | 39 | #logout { 40 | background-image: image(url("/usr/share/wlogout/icons/logout.png"), url("/usr/local/share/wlogout/icons/logout.png")); 41 | } 42 | 43 | #suspend { 44 | background-image: image(url("/usr/share/wlogout/icons/suspend.png"), url("/usr/local/share/wlogout/icons/suspend.png")); 45 | } 46 | 47 | #hibernate { 48 | background-image: image(url("/usr/share/wlogout/icons/hibernate.png"), url("/usr/local/share/wlogout/icons/hibernate.png")); 49 | } 50 | 51 | #shutdown { 52 | background-image: image(url("/usr/share/wlogout/icons/shutdown.png"), url("/usr/local/share/wlogout/icons/shutdown.png")); 53 | } 54 | 55 | #reboot { 56 | background-image: image(url("/usr/share/wlogout/icons/reboot.png"), url("/usr/local/share/wlogout/icons/reboot.png")); 57 | } 58 | -------------------------------------------------------------------------------- /.config/xdg-desktop-portal/hyprland-portals.conf: -------------------------------------------------------------------------------- 1 | [preferred] 2 | default=hyprland;kde 3 | 4 | -------------------------------------------------------------------------------- /.config/yazi/yazi.toml: -------------------------------------------------------------------------------- 1 | [manager] 2 | ratio = [ 1, 4, 3 ] 3 | sort_by = "alphabetical" 4 | sort_sensitive = false 5 | sort_reverse = false 6 | sort_dir_first = false 7 | linemode = "none" 8 | show_hidden = true 9 | show_symlink = true 10 | scrolloff = 5 11 | 12 | [preview] 13 | tab_size = 2 14 | max_width = 600 15 | max_height = 900 16 | cache_dir = "" 17 | image_filter = "triangle" 18 | image_quality = 75 19 | sixel_fraction = 15 20 | ueberzug_scale = 1 21 | ueberzug_offset = [ 0, 0, 0, 0 ] 22 | 23 | [opener] 24 | edit = [ 25 | { run = '${EDITOR:=nvim} "$@"', desc = "$EDITOR", block = true, for = "unix" }, 26 | { run = 'code "%*"', orphan = true, desc = "code", for = "windows" }, 27 | { run = 'code -w "%*"', block = true, desc = "code (block)", for = "windows" }, 28 | ] 29 | open = [ 30 | { run = 'xdg-open "$@"', desc = "Open", for = "linux" }, 31 | { run = 'open "$@"', desc = "Open", for = "macos" }, 32 | { run = 'start "" "%1"', orphan = true, desc = "Open", for = "windows" }, 33 | ] 34 | reveal = [ 35 | { run = 'open -R "$1"', desc = "Reveal", for = "macos" }, 36 | { run = 'explorer /select, "%1"', orphan = true, desc = "Reveal", for = "windows" }, 37 | { run = '''exiftool "$1"; echo "Press enter to exit"; read _''', block = true, desc = "Show EXIF", for = "unix" }, 38 | ] 39 | extract = [ 40 | { run = 'unar "$1"', desc = "Extract here", for = "unix" }, 41 | { run = 'unar "%1"', desc = "Extract here", for = "windows" }, 42 | ] 43 | play = [ 44 | { run = 'mpv "$@"', orphan = true, for = "unix" }, 45 | { run = 'mpv "%1"', orphan = true, for = "windows" }, 46 | { run = '''mediainfo "$1"; echo "Press enter to exit"; read _''', block = true, desc = "Show media info", for = "unix" }, 47 | ] 48 | 49 | [open] 50 | rules = [ 51 | { name = "*/", use = [ "edit", "open", "reveal" ] }, 52 | 53 | { mime = "text/*", use = [ "edit", "reveal" ] }, 54 | { mime = "image/*", use = [ "open", "reveal" ] }, 55 | { mime = "video/*", use = [ "play", "reveal" ] }, 56 | { mime = "audio/*", use = [ "play", "reveal" ] }, 57 | { mime = "inode/x-empty", use = [ "edit", "reveal" ] }, 58 | 59 | { mime = "application/json", use = [ "edit", "reveal" ] }, 60 | { mime = "*/javascript", use = [ "edit", "reveal" ] }, 61 | 62 | { mime = "application/zip", use = [ "extract", "reveal" ] }, 63 | { mime = "application/gzip", use = [ "extract", "reveal" ] }, 64 | { mime = "application/x-tar", use = [ "extract", "reveal" ] }, 65 | { mime = "application/x-bzip", use = [ "extract", "reveal" ] }, 66 | { mime = "application/x-bzip2", use = [ "extract", "reveal" ] }, 67 | { mime = "application/x-7z-compressed", use = [ "extract", "reveal" ] }, 68 | { mime = "application/x-rar", use = [ "extract", "reveal" ] }, 69 | { mime = "application/xz", use = [ "extract", "reveal" ] }, 70 | 71 | { mime = "*", use = [ "open", "reveal" ] }, 72 | ] 73 | 74 | [tasks] 75 | micro_workers = 10 76 | macro_workers = 25 77 | bizarre_retry = 5 78 | image_alloc = 536870912 # 512MB 79 | image_bound = [ 0, 0 ] 80 | suppress_preload = false 81 | -------------------------------------------------------------------------------- /.config/zathura/zathurarc: -------------------------------------------------------------------------------- 1 | Zathura configuration file 2 | # See man `man zathurarc' 3 | 4 | # Open document in fit-width mode by default 5 | set adjust-open "width" 6 | 7 | # One page per row by default 8 | set pages-per-row 1 9 | 10 | #stop at page boundries 11 | set scroll-page-aware "true" 12 | set smooth-scroll "true" 13 | set scroll-full-overlap 0.01 14 | set scroll-step 100 15 | 16 | #zoom settings 17 | set zoom-min 10 18 | set guioptions "hv" 19 | 20 | # zathurarc-dark 21 | 22 | set font " Product Sans 12" 23 | set default-bg rgba(0,0,0,0.6) #00 24 | set default-fg "#F7F7F6" #01 25 | 26 | set statusbar-fg "#B0B0B0" #04 27 | set statusbar-bg "#202020" #01 28 | 29 | set inputbar-bg "#151515" #00 currently not used 30 | set inputbar-fg "#FFFFFF" #02 31 | 32 | set notification-error-bg "#AC4142" #08 33 | set notification-error-fg "#151515" #00 34 | 35 | set notification-warning-bg "#AC4142" #08 36 | set notification-warning-fg "#151515" #00 37 | 38 | set highlight-color "#F4BF75" #0A 39 | set highlight-active-color "#6A9FB5" #0D 40 | 41 | set completion-highlight-fg "#151515" #02 42 | set completion-highlight-bg "#90A959" #0C 43 | 44 | set completion-bg "#303030" #02 45 | set completion-fg "#E0E0E0" #0C 46 | 47 | set notification-bg "#90A959" #0B 48 | set notification-fg "#151515" #00 49 | 50 | set recolor "true" 51 | set recolor-lightcolor rgba(0,0,0,0) #00 52 | set recolor-darkcolor "#E0E0E0" #06 53 | set recolor-reverse-video "true" 54 | set recolor-keephue "true" 55 | 56 | set selection-clipboard clipboard 57 | 58 | set render-loading "false" 59 | set scroll-step 50 60 | 61 | unmap f 62 | unmap d 63 | unmap s 64 | unmap w 65 | unmap a 66 | map f toggle_fullscreen 67 | map [fullscreen] f toggle_fullscreen 68 | map w scroll up 69 | map s scroll down 70 | map a scroll left 71 | map d scroll right 72 | map i recolor 73 | 74 | -------------------------------------------------------------------------------- /.config/zed/.tmp3KNyBK: -------------------------------------------------------------------------------- 1 | {"signed_in":false,"milliseconds_since_first_event":0,"type":"App","operation":"first open"} 2 | {"signed_in":false,"milliseconds_since_first_event":31,"type":"Setting","setting":"theme","value":"One Dark"} 3 | {"signed_in":false,"milliseconds_since_first_event":31,"type":"Setting","setting":"keymap","value":"VSCode"} 4 | {"signed_in":false,"milliseconds_since_first_event":0,"type":"App","operation":"welcome page: toggle vim"} 5 | {"signed_in":false,"milliseconds_since_first_event":3282,"type":"App","operation":"welcome page: toggle metric telemetry"} 6 | {"signed_in":false,"milliseconds_since_first_event":3283,"type":"Setting","setting":"metric telemetry","value":"false"} 7 | -------------------------------------------------------------------------------- /.config/zed/.tmpCi2tQJ: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpCi2tQJ -------------------------------------------------------------------------------- /.config/zed/.tmpG8NiLr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpG8NiLr -------------------------------------------------------------------------------- /.config/zed/.tmpHcPNeU: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpHcPNeU -------------------------------------------------------------------------------- /.config/zed/.tmpMkffHP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpMkffHP -------------------------------------------------------------------------------- /.config/zed/.tmpMpKFMA: -------------------------------------------------------------------------------- 1 | {"signed_in":false,"milliseconds_since_first_event":0,"type":"App","operation":"open"} 2 | {"signed_in":false,"milliseconds_since_first_event":29,"type":"Setting","setting":"theme","value":"One Dark"} 3 | {"signed_in":false,"milliseconds_since_first_event":29,"type":"Setting","setting":"keymap","value":"VSCode"} 4 | -------------------------------------------------------------------------------- /.config/zed/.tmpNRmI29: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpNRmI29 -------------------------------------------------------------------------------- /.config/zed/.tmpP7a20T: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpP7a20T -------------------------------------------------------------------------------- /.config/zed/.tmpQ8z6Nd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpQ8z6Nd -------------------------------------------------------------------------------- /.config/zed/.tmpQaOfEB: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpQaOfEB -------------------------------------------------------------------------------- /.config/zed/.tmpQzjyN6: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpQzjyN6 -------------------------------------------------------------------------------- /.config/zed/.tmpThVuxK: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpThVuxK -------------------------------------------------------------------------------- /.config/zed/.tmpTua96k: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpTua96k -------------------------------------------------------------------------------- /.config/zed/.tmpTvGa5B: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpTvGa5B -------------------------------------------------------------------------------- /.config/zed/.tmpTwbP3F: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpTwbP3F -------------------------------------------------------------------------------- /.config/zed/.tmpWjD73S: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpWjD73S -------------------------------------------------------------------------------- /.config/zed/.tmpe182IJ: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpe182IJ -------------------------------------------------------------------------------- /.config/zed/.tmpfkLAg1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpfkLAg1 -------------------------------------------------------------------------------- /.config/zed/.tmphYEJnz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmphYEJnz -------------------------------------------------------------------------------- /.config/zed/.tmpi7LpJO: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpi7LpJO -------------------------------------------------------------------------------- /.config/zed/.tmpm7gL1E: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpm7gL1E -------------------------------------------------------------------------------- /.config/zed/.tmpmRTXF9: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpmRTXF9 -------------------------------------------------------------------------------- /.config/zed/.tmpnuOk1M: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpnuOk1M -------------------------------------------------------------------------------- /.config/zed/.tmpoca0lH: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpoca0lH -------------------------------------------------------------------------------- /.config/zed/.tmpq2ck3c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpq2ck3c -------------------------------------------------------------------------------- /.config/zed/.tmprR6qnH: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmprR6qnH -------------------------------------------------------------------------------- /.config/zed/.tmputBCyT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmputBCyT -------------------------------------------------------------------------------- /.config/zed/.tmpyCL22x: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpyCL22x -------------------------------------------------------------------------------- /.config/zed/.tmpyUpQ9F: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/.tmpyUpQ9F -------------------------------------------------------------------------------- /.config/zed/keymap.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/.config/zed/keymap.json -------------------------------------------------------------------------------- /.config/zed/settings.json: -------------------------------------------------------------------------------- 1 | // Zed settings 2 | // 3 | // For information on how to configure Zed, see the Zed 4 | // documentation: https://zed.dev/docs/configuring-zed 5 | // 6 | // To see all of Zed's default settings without changing your 7 | // custom settings, run the `open default settings` command 8 | // from the command palette or from `Zed` application menu. 9 | { 10 | "assistant": { 11 | "default_model": { 12 | "provider": "copilot_chat", 13 | "model": "gpt-4o" 14 | }, 15 | "version": "2" 16 | }, 17 | "features": { 18 | "inline_completion_provider": "copilot" 19 | }, 20 | "languages": { 21 | "CSS": { 22 | "show_inline_completions": true 23 | } 24 | }, 25 | "base_keymap": "VSCode", 26 | "theme": "Tokyo Night", 27 | "buffer_font_family": "JetBrains Mono", 28 | "project_panel": { 29 | "dock": "right" 30 | }, 31 | "telemetry": { 32 | "diagnostics": false, 33 | "metrics": false 34 | }, 35 | "vim_mode": true, 36 | "ui_font_size": 16, 37 | "buffer_font_size": 16 38 | } 39 | -------------------------------------------------------------------------------- /.ignore: -------------------------------------------------------------------------------- 1 | # File types to ignore 2 | *.mp3 3 | *.png 4 | *.jpg 5 | *.jpeg 6 | *.pdf 7 | *.mkv 8 | *.mp4 9 | *.zip 10 | *.ods 11 | *.m3u 12 | *.flac 13 | 14 | # Directories to ignore 15 | .git/ 16 | git/ 17 | node_modules/ 18 | Android/ 19 | .cache/ 20 | vendor/ 21 | teams-for-linux/ 22 | .local/lib/ 23 | .local/share/ 24 | BraveSoftware/ 25 | chromium/ 26 | chrome/ 27 | firefox/ 28 | .vim/sessions/ 29 | .vim/tmp/ 30 | .vim/backup/ 31 | Signal/ 32 | .ib-tws/ 33 | .java/ 34 | .hwid/ 35 | .zcompcache/ 36 | .pki/ 37 | tmp/ 38 | -------------------------------------------------------------------------------- /.prettierrc.toml: -------------------------------------------------------------------------------- 1 | trailingComma = "es5" 2 | tabWidth = 4 3 | semi = false 4 | useTabs = true 5 | -------------------------------------------------------------------------------- /.scripts/a_good_screenshoting_method_unlike_shitty_gnome_shell_one.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | gnome-screenshot -acf /tmp/test && cat /tmp/test | wl-copy 3 | -------------------------------------------------------------------------------- /.scripts/adb.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Function to check if a command exists 4 | command_exists() { 5 | command -v "$1" &> /dev/null 6 | } 7 | 8 | # Check if ADB is installed 9 | if ! command_exists adb; then 10 | echo "ADB is not installed or not in your PATH. Please install ADB and ensure it's accessible." 11 | exit 1 12 | fi 13 | 14 | # Get the list of devices connected via USB 15 | usb_devices=$(adb devices | awk '$2 == "device" && $1 !~ /:5555$/ {print $1}') 16 | 17 | # Get the list of devices connected via Wi-Fi 18 | wifi_devices=$(adb devices | awk '$2 == "device" && $1 ~ /:5555$/ {print $1}') 19 | 20 | # Check if any USB-connected devices are present 21 | if [ -z "$usb_devices" ]; then 22 | echo "No USB-connected devices found. Please connect a device via USB and try again." 23 | exit 1 24 | fi 25 | 26 | # Process each USB-connected device 27 | for device in $usb_devices; do 28 | echo "Processing device: $device" 29 | 30 | # Retrieve the device's IP address 31 | ip_address=$(adb -s "$device" shell ip -f inet addr show wlan0 | awk '/inet / {print $2}' | cut -d/ -f1) 32 | 33 | if [ -z "$ip_address" ]; then 34 | echo "Failed to retrieve IP address for device $device. Ensure the device is connected to Wi-Fi." 35 | continue 36 | fi 37 | 38 | echo "Device IP address: $ip_address" 39 | 40 | # Check if the device is already connected via Wi-Fi 41 | if echo "$wifi_devices" | grep -q "$ip_address:5555"; then 42 | echo "Device $device is already connected via Wi-Fi." 43 | continue 44 | fi 45 | 46 | # Restart ADB daemon to listen on TCP/IP 47 | adb -s "$device" tcpip 5555 48 | if [ $? -ne 0 ]; then 49 | echo "Failed to set device $device to TCP/IP mode." 50 | continue 51 | fi 52 | 53 | # Wait to ensure the device is ready 54 | sleep 2 55 | 56 | # Connect to the device over Wi-Fi 57 | adb connect "$ip_address:5555" 58 | if [ $? -eq 0 ]; then 59 | echo "Successfully connected to $device at $ip_address over Wi-Fi." 60 | else 61 | echo "Failed to connect to $device at $ip_address over Wi-Fi." 62 | fi 63 | done 64 | -------------------------------------------------------------------------------- /.scripts/battery.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | bash -c "echo 2 > /sys/devices/platform/asus-nb-wmi/throttle_thermal_policy" -------------------------------------------------------------------------------- /.scripts/border.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | i=1 3 | 4 | export colors="rgba(F48FB1FF) rgba(A1EFD3FF) rgba(F1FA8CFF) rgba(92B6F4FF) rgba(BD99FFFF) rgba(87DFEBFF)" 5 | 6 | while [[ $i -gt 0 ]]; do 7 | if [[ $i -lt 360 ]]; then 8 | hyprctl keyword general:col.active_border "$colors $((i))deg" 9 | sleep 0.01 10 | i=$((i+1)) 11 | else 12 | hyprctl keyword general:col.active_border "$colors $((i))deg" 13 | sleep 0.01 14 | i=1 15 | fi 16 | done 17 | -------------------------------------------------------------------------------- /.scripts/brightness_ctl.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # You can call this script like this: 4 | # $ ./brightnessControl.sh up 5 | # $ ./brightnessControl.sh down 6 | 7 | # Script inspired by these wonderful people: 8 | # https://github.com/dastorm/volume-notification-dunst/blob/master/volume.sh 9 | # https://gist.github.com/sebastiencs/5d7227f388d93374cebdf72e783fbd6a 10 | 11 | NotificationID_File=/tmp/brightness_notification_id 12 | 13 | function get_brightness { 14 | brightnessctl -m | awk -F, '{print substr($4, 0, length($4)-1)}' 15 | } 16 | 17 | function get_notification_id { 18 | if [ -s "$NotificationID_File" ]; then 19 | cat $NotificationID_File 20 | else 21 | echo 0 22 | fi 23 | } 24 | 25 | function send_notification { 26 | icon="preferences-system-brightness-lock" 27 | brightness=$(get_brightness) 28 | # Make the bar with the special character ─ (it's not dash -) 29 | # https://en.wikipedia.org/wiki/Box-drawing_character 30 | bar=$(seq -s "─" 0 $(((brightness - 1) / 4)) | sed 's/[0-9]//g') 31 | space=$(seq --separator=" " 0 "$(((100 - brightness) / 4))" | sed 's/[0-9]//g') 32 | nid=$(get_notification_id) 33 | # Send the notification 34 | notify-send -i "$icon" -p -r $nid -u normal "|$bar$space| $brightness%" > $NotificationID_File 35 | } 36 | 37 | 38 | case $1 in 39 | up) 40 | # increase the backlight by 5% 41 | brightnessctl set 5%+ 42 | send_notification 43 | ;; 44 | down) 45 | # decrease the backlight by 5% 46 | brightnessctl set 5%- 47 | send_notification 48 | ;; 49 | max) 50 | brightnessctl set 100% 51 | send_notification 52 | ;; 53 | blank) 54 | brightnessctl set 0% 55 | send_notification 56 | ;; 57 | esac -------------------------------------------------------------------------------- /.scripts/clip.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | cliphist list | rofi -dmenu -theme ~/.config/rofi/clip.rasi | cliphist decode | wl-copy 4 | -------------------------------------------------------------------------------- /.scripts/dec.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}') 3 | if [ "$HYPRGAMEMODE" = 1 ] ; then 4 | hyprctl --batch "\ 5 | keyword animations:enabled 0;\ 6 | keyword decoration:drop_shadow 0;\ 7 | keyword decoration:blur:enabled 0;\ 8 | keyword general:border_size 1;\ 9 | keyword decoration:rounding 0" 10 | exit 11 | fi 12 | hyprctl reload 13 | -------------------------------------------------------------------------------- /.scripts/decorations.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | TOGGLE=/tmp/.toggle_anim 4 | 5 | if [ ! -e $TOGGLE ]; then 6 | touch $TOGGLE 7 | hyprctl keyword animations:enabled 0 8 | hyprctl keyword decoration:rounding 0 9 | hyprctl keyword decoration:blur 0 10 | hyprctl keyword misc:vfr 1 11 | hyprctl keyword misc:vrr 1 12 | notify-send "Decorations Disabled" 13 | 14 | else 15 | rm $TOGGLE 16 | hyprctl keyword animations:enabled 1 17 | hyprctl keyword decoration:rounding 10 18 | hyprctl keyword decoration:blur 1 19 | hyprctl keyword misc:vfr 1 20 | hyprctl keyword misc:vrr 2 21 | notify-send "Decorations Enabled" 22 | fi 23 | -------------------------------------------------------------------------------- /.scripts/flickerborder.sh: -------------------------------------------------------------------------------- 1 | 2 | #! /bin/bash 3 | #Active window border flickers periodically 4 | 5 | while pgrep Hyprland; do 6 | delay=$(( RANDOM % 10 + 3 )) #Time between flickers 7 | flicker=$(( RANDOM % 15 + 5 )) #Number of flickers 8 | sleep $delay 9 | while [ $flicker -gt 0 ]; do 10 | hyprctl --batch "keyword decoration:col.shadow 0x55F51D00 ; keyword general:col.active_border 0x66FFF898" 11 | sleep 0.02 12 | hyprctl --batch "keyword decoration:col.shadow 0xFFF51D00 ; keyword general:col.active_border 0x99FFF898" 13 | sleep 0.02 14 | ((flicker=flicker-1)) 15 | done 16 | hyprctl --batch "keyword decoration:col.shadow 0xFFF51D00 ; keyword general:col.active_border 0xFFFFF898" 17 | done 18 | -------------------------------------------------------------------------------- /.scripts/grim_ocr.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Dependencies: tesseract-ocr imagemagick scrot xsel/x11 wl-clipboard/wayland 3 | 4 | SCR_IMG=$(mktemp) 5 | trap 'rm -f "$SCR_IMG"*' EXIT 6 | 7 | # Capture screenshot with grim, increase image quality with option -q from default 75 to 100 8 | grim -l 9 -g "$(slurp)" "$SCR_IMG.png" 9 | 10 | # Enhance the image quality before OCR 11 | mogrify -modulate 100,0 -resize 400% "$SCR_IMG.png" 12 | 13 | # Use Tesseract to perform OCR on the screenshot, discard stderr 14 | tesseract "$SCR_IMG.png" "$SCR_IMG" 2>/dev/null 15 | 16 | wl-copy < "$SCR_IMG.txt" 17 | 18 | exit 19 | -------------------------------------------------------------------------------- /.scripts/gsettings: -------------------------------------------------------------------------------- 1 | gsettings reset org.gnome.desktop.wm.preferences button-layout ##FOR RESET 2 | gsettings set org.gnome.desktop.wm.preferences button-layout : ##FOR DISABLING WINDOW CONTROL BUTTONS -------------------------------------------------------------------------------- /.scripts/gsettings.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # usage: import-gsettings 4 | config="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-3.0/settings.ini" 5 | if [ ! -f "$config" ]; then exit 1; fi 6 | 7 | gnome_schema="org.gnome.desktop.interface" 8 | gtk_theme="$(grep 'gtk-theme-name' "$config" | sed 's/.*\s*=\s*//')" 9 | icon_theme="$(grep 'gtk-icon-theme-name' "$config" | sed 's/.*\s*=\s*//')" 10 | cursor_theme="$(grep 'gtk-cursor-theme-name' "$config" | sed 's/.*\s*=\s*//')" 11 | font_name="$(grep 'gtk-font-name' "$config" | sed 's/.*\s*=\s*//')" 12 | gsettings set "$gnome_schema" gtk-theme "$gtk_theme" 13 | gsettings set "$gnome_schema" icon-theme "$icon_theme" 14 | gsettings set "$gnome_schema" cursor-theme "$cursor_theme" 15 | gsettings set "$gnome_schema" font-name "$font_name" 16 | -------------------------------------------------------------------------------- /.scripts/hyprland_floating_monitor.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | is_floating=$(hyprctl activewindow -j | jq -r '.floating') 4 | 5 | if [ "$is_floating" == "1" ]; then 6 | hyprctl dispatch togglefloating yolo 7 | hyprctl keyword decoration:rounding $(grep rounding ~/.config/hypr/hyprland.conf | cut -d '=' -f2) 8 | hyprctl keyword decoration:active_opacity $(grep active_opacity ~/.config/hypr/hyprland.conf | cut -d '=' -f2) 9 | else 10 | hyprctl dispatch togglefloating yolo 11 | hyprctl keyword decoration:rounding 0 12 | hyprctl keyword decoration:active_opacity 1.0 13 | 14 | width=$(hyprctl monitors -j | jq -r 'map(.x+.width) | max') 15 | height=$(hyprctl monitors -j | jq -r 'map(.y+.height) | max') 16 | 17 | hyprctl dispatch moveactive "exact 0 0" 18 | hyprctl dispatch resizeactive "exact $width $height" 19 | fi -------------------------------------------------------------------------------- /.scripts/iommu.sh: -------------------------------------------------------------------------------- 1 | #!/bin/env bash 2 | shopt -s nullglob 3 | for g in `find /sys/kernel/iommu_groups/* -maxdepth 0 -type d | sort -V`; do 4 | echo "IOMMU Group ${g##*/}:" 5 | for d in $g/devices/*; do 6 | echo -e "\t$(lspci -nns ${d##*/})" 7 | done; 8 | done; 9 | -------------------------------------------------------------------------------- /.scripts/ipv6.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Check if IPv6 is currently enabled or disabled 4 | ipv6_status=$(cat /proc/sys/net/ipv6/conf/all/disable_ipv6) 5 | 6 | # Toggle the IPv6 status 7 | if [ "$ipv6_status" -eq "0" ]; then 8 | sudo bash -c "echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6" 9 | notify-send "IPv6 disabled" 10 | else 11 | sudo bash -c "echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6" 12 | notify-send "IPv6 enabled" 13 | fi 14 | -------------------------------------------------------------------------------- /.scripts/keybinds-rofi.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | config_file=~/.config/hypr/keybinds.conf 3 | keybinds=$(grep -oP '(?<=bind = ).*' $config_file) 4 | keybinds=$(echo "$keybinds" | sed 's/,\([^,]*\)$/ = \1/' | sed 's/, exec//g' | sed 's/^,//g') 5 | rofi -dmenu -p "Keybinds" -theme ~/.config/rofi/themes/catppuccin-mocha.rasi <<< "$keybinds" 6 | -------------------------------------------------------------------------------- /.scripts/lfub: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # This is a wrapper script for lf that allows it to create image previews with 4 | # ueberzug. This works in concert with the lf configuration file and the 5 | # lf-cleaner script. 6 | 7 | set -e 8 | 9 | UB_PID=0 10 | UB_SOCKET="" 11 | 12 | cleanup() { 13 | exec 3>&- 14 | ueberzugpp cmd -s $UB_SOCKET -a exit 15 | } 16 | 17 | if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then 18 | lf "$@" 19 | else 20 | [ ! -d "$HOME/.cache/lf" ] && mkdir --parents "$HOME/.cache/lf" 21 | UB_PID_FILE="/tmp/.$(uuidgen)" 22 | ueberzugpp layer --silent --no-stdin --use-escape-codes --pid-file $UB_PID_FILE 23 | UB_PID=$(cat $UB_PID_FILE) 24 | rm $UB_PID_FILE 25 | UB_SOCKET="/tmp/ueberzugpp-${UB_PID}.socket" 26 | export UB_PID UB_SOCKET 27 | trap cleanup HUP INT QUIT TERM PWR EXIT 28 | lf "$@" 3>&- 29 | fi 30 | -------------------------------------------------------------------------------- /.scripts/lock.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | swaylock \ 3 | --screenshots \ 4 | --indicator \ 5 | --clock \ 6 | --inside-wrong-color f38ba8 \ 7 | --ring-wrong-color 11111b \ 8 | --inside-clear-color a6e3a1 \ 9 | --ring-clear-color 11111b \ 10 | --inside-ver-color 89b4fa \ 11 | --ring-ver-color 11111b \ 12 | --text-color f5c2e7 \ 13 | --indicator-radius 120 \ 14 | --indicator-thickness 6 \ 15 | --effect-blur 10x7 \ 16 | --effect-vignette 0.2:0.2 \ 17 | --ring-color 11111b \ 18 | --key-hl-color f5c2e7 \ 19 | --line-color 313244 \ 20 | --inside-color 0011111b \ 21 | --font="Jetbrains mono" \ 22 | --datestr="%d.%m" \ 23 | --ignore-empty-password \ 24 | --separator-color 00000000 \ 25 | --fade-in 0.1 & 26 | -------------------------------------------------------------------------------- /.scripts/maim_ocr.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Dependencies: tesseract-ocr imagemagick scrot xsel/x11 wl-clipboard/wayland 3 | 4 | SCR_IMG=`mktemp` 5 | trap "rm $SCR_IMG*" EXIT 6 | 7 | maim -s --format=png $SCR_IMG.png 8 | # increase image quality with option -q from default 75 to 100 9 | 10 | mogrify -modulate 100,0 -resize 400% $SCR_IMG.png 11 | 12 | tesseract $SCR_IMG.png $SCR_IMG &> /dev/null 13 | cat $SCR_IMG.txt | xclip -selection clipboard 14 | 15 | exit 16 | -------------------------------------------------------------------------------- /.scripts/mic.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # script used to toggle between two conditions 3 | 4 | TOGGLE=/tmp/.toggle_Mic 5 | 6 | if [ ! -e $TOGGLE ]; then 7 | touch $TOGGLE 8 | pactl set-source-mute @DEFAULT_SOURCE@ on 9 | notify-send "Internal Microphone Muted" 10 | else 11 | rm $TOGGLE 12 | # pactl set-source-port alsa_input.pci-0000_00_1f.3.analog-stereo analog-input-headset-mic 13 | pactl set-source-mute @DEFAULT_SOURCE@ off 14 | notify-send "Internal Microphone Unmuted" 15 | fi 16 | -------------------------------------------------------------------------------- /.scripts/normal.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | bash -c "echo 1 > /sys/devices/platform/asus-nb-wmi/throttle_thermal_policy" 3 | echo 1 |sudo tee /sys/bus/platform/devices/asus-nb-wmi/dgpu_disable 4 | 5 | 6 | -------------------------------------------------------------------------------- /.scripts/ocr.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Dependencies: tesseract-ocr imagemagick scrot xsel/x11 wl-clipboard/wayland 3 | 4 | SCR_IMG=`mktemp` 5 | trap "rm $SCR_IMG*" EXIT 6 | 7 | gnome-screenshot -a -f $SCR_IMG.png 8 | # increase image quality with option -q from default 75 to 100 9 | 10 | mogrify -modulate 100,0 -resize 400% $SCR_IMG.png 11 | 12 | tesseract $SCR_IMG.png $SCR_IMG &> /dev/null 13 | cat $SCR_IMG.txt | wl-copy 14 | 15 | exit -------------------------------------------------------------------------------- /.scripts/pasters.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Define default options 4 | HIGHLIGHT_COLOR='\e[32m' # Green 5 | NC='\e[0m' # No Color 6 | SHOW_OUTPUT=true 7 | COPY_TO_CLIPBOARD=true 8 | 9 | # Detect display server 10 | if [ "$WAYLAND_DISPLAY" ]; then 11 | DISPLAY_SERVER='wayland' 12 | elif [ "$DISPLAY" ]; then 13 | DISPLAY_SERVER='xorg' 14 | fi 15 | 16 | # Detect clipboard manager 17 | if command -v xclip >/dev/null 2>&1 && [ "$DISPLAY_SERVER" == "xorg" ]; then 18 | CLIPBOARD_MANAGER='xclip -selection clipboard' 19 | elif command -v wl-copy >/dev/null 2>&1 && [ "$DISPLAY_SERVER" == "wayland" ]; then 20 | CLIPBOARD_MANAGER='wl-copy' 21 | else 22 | CLIPBOARD_MANAGER='echo' 23 | fi 24 | 25 | # Define usage function 26 | function usage { 27 | echo "Usage: $0 [OPTIONS] FILE" 28 | echo "Options:" 29 | echo " -c, --color COLOR Set the highlight color (default: green)" 30 | exit 1 31 | } 32 | 33 | # Parse command-line options 34 | while [[ $# -gt 0 ]]; do 35 | key="$1" 36 | case $key in 37 | -c|--color) 38 | HIGHLIGHT_COLOR="$2" 39 | shift 40 | shift 41 | ;; 42 | -h|--help) 43 | usage 44 | ;; 45 | *) 46 | FILE="$1" 47 | shift 48 | ;; 49 | esac 50 | done 51 | 52 | # Check if a filename was provided 53 | if [ -z "$FILE" ]; then 54 | usage 55 | fi 56 | 57 | # Check if the file exists 58 | if [ ! -f "$FILE" ]; then 59 | echo "Error: File $FILE not found" 60 | exit 1 61 | fi 62 | 63 | # Upload the contents of the file to paste.rs using curl 64 | OUTPUT=$(curl -X POST -s -d "$(cat $FILE)" https://paste.rs) 65 | 66 | # Highlight the paste.rs link in the specified color 67 | if [ "$SHOW_OUTPUT" = true ]; then 68 | LINK=$(echo "$OUTPUT" | grep -o 'https://paste.rs/[a-zA-Z0-9]\+') 69 | if [ -n "$LINK" ]; then 70 | echo -e "${OUTPUT//$LINK/${HIGHLIGHT_COLOR}$LINK${NC}}" 71 | else 72 | echo "Error: No paste.rs link found in output" 73 | exit 1 74 | fi 75 | fi 76 | 77 | # Copy the paste.rs link to clipboard if requested 78 | if [ "$COPY_TO_CLIPBOARD" = true ]; then 79 | echo "$LINK" | $CLIPBOARD_MANAGER 80 | echo "Paste.rs link copied to clipboard" 81 | fi 82 | -------------------------------------------------------------------------------- /.scripts/playerctl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cmd="$1" 4 | 5 | if [ -z "$cmd" ]; then 6 | echo "Usage: $0 play-pause|next|previous" 7 | exit 1 8 | fi 9 | 10 | # Highest to lowest priority 11 | playerctl --player=spotify,ncspot,mpv,cmus,vlc,firefox "$cmd" 12 | -------------------------------------------------------------------------------- /.scripts/portals.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | sleep 1 3 | killall -e xdg-desktop-portal-hyprland 4 | killall -e xdg-desktop-portal-wlr 5 | killall -e xdg-desktop-portal-gtk 6 | killall -e xdg-desktop-portal-kde 7 | killall xdg-desktop-portal 8 | /usr/lib/xdg-desktop-portal-hyprland & 9 | sleep 2 10 | /usr/lib/xdg-desktop-portal & 11 | -------------------------------------------------------------------------------- /.scripts/powerprofilecycle.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Script to cycle through power-profiles-daemon profiles. Handy for integration 4 | # with waybar, i3blocks and others. When run it will cycle to next profile and 5 | # output a corresponding fa-icon for displaying in a bar. With the -m toggle, 6 | # the script will not cycle profiles, rather just print fa-icon corresponding to 7 | # current profile. 8 | # 9 | 10 | PSET="powerprofilesctl set" 11 | PGET="powerprofilesctl get" 12 | 13 | while getopts "mh" opt; do 14 | case $opt in 15 | m) 16 | case $($PGET) in 17 | performance) 18 | echo "  " && exit 0 19 | ;; 20 | power-saver) 21 | echo "  " && exit 0 22 | ;; 23 | balanced) 24 | echo "  " && exit 0 25 | esac 26 | ;; 27 | h) 28 | echo -e "Run script without arguments to cycle power profiles and print icon. \n-m Monitor. Get power profile and print icon. \n-h Help. Show this help text" 29 | exit 0 30 | ;; 31 | *) 32 | echo "Invalid option. Try -h." 33 | exit 1 34 | esac 35 | done 36 | 37 | case $($PGET) in 38 | performance) 39 | $PSET power-saver && echo "  " && exit 0 40 | ;; 41 | power-saver) 42 | $PSET balanced && echo "  " && exit 0 43 | ;; 44 | balanced) 45 | $PSET performance && echo "  " && exit 0 46 | ;; 47 | esac 48 | 49 | echo "Could not find power profile match. Is power-profiles-daemon running?" 50 | exit 1 51 | -------------------------------------------------------------------------------- /.scripts/proton.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | sourceRoot="$(echo ~/.var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/common/Proton\ -\ Experimental)"; 4 | runnerDir="$(echo ~/.var/app/com.usebottles.bottles/data/bottles/runners)"; 5 | root="$runnerDir/GE-Proton-Experimental"; 6 | 7 | mkdir -p "$root"; 8 | find "$sourceRoot" -type f -exec bash -c ' 9 | relativeFile="$(realpath --relative-to "'"$sourceRoot"'" "{}")"; 10 | cd "'"$root"'"; 11 | dir="$(dirname "$relativeFile")"; 12 | [ ! -d "$dir" ] && echo "Creating dir $dir" && mkdir -p "$dir"; 13 | echo "linking file $relativeFile" && sudo ln "{}" "$relativeFile"' \; 14 | 15 | -------------------------------------------------------------------------------- /.scripts/record-screen.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | check_device() { 4 | if [ -e "$1" ]; then 5 | return 0 6 | else 7 | return 1 8 | fi 9 | } 10 | 11 | pid=$(pgrep wf-recorder) 12 | status=$? 13 | 14 | if [ $status != 0 ]; then 15 | notify-send "Recording has started"; 16 | 17 | # Check if /dev/dri/renderD128 exists 18 | if check_device "/dev/dri/renderD128" && wf-recorder --audio=alsa_output.pci-0000_00_1f.3.analog-stereo.monitor -c h264_vaapi -d /dev/dri/renderD128 -f "$(xdg-user-dir VIDEOS)/Screencasts/screencast-$(date +'%d-%m-%Y-%H%M%S.mp4')" 2>/dev/null; then 19 | device="/dev/dri/renderD128" 20 | elif check_device "/dev/dri/renderD129"; then 21 | device="/dev/dri/renderD129" 22 | else 23 | echo "Neither /dev/dri/renderD128 nor /dev/dri/renderD129 is available or there was an error with both devices." 24 | exit 1 25 | fi 26 | 27 | wf-recorder --audio=alsa_output.pci-0000_00_1f.3.analog-stereo.monitor -c h264_vaapi -d "$device" -f "$(xdg-user-dir VIDEOS)/Screencasts/screencast-$(date +'%d-%m-%Y-%H%M%S.mp4')"; 28 | 29 | else 30 | pkill --signal SIGINT wf-recorder 31 | notify-send "Recording has stopped"; 32 | fi; 33 | -------------------------------------------------------------------------------- /.scripts/sed: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | killall xdg-desktop-portal-hyprland 3 | killall xdg-desktop-portal-wlr 4 | killall xdg-desktop-portal-gtk 5 | killall xdg-desktop-portal 6 | killall xdg-desktop-portal-kde 7 | /usr/lib/xdg-desktop-portal-hyprland & 8 | sleep 3 9 | /usr/lib/xdg-desktop-portal & 10 | -------------------------------------------------------------------------------- /.scripts/sleep.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | swayidle -w \ 3 | timeout 120 'temp=$(brightnessctl g); brightnessctl set $((temp / 4))' \ 4 | resume 'temp=$(brightnessctl g); brightnessctl set $((temp * 4))' \ 5 | timeout 300 "$HOME/.scripts/lock.sh & sleep 1 && hyprctl dispatch dpms off" \ 6 | resume 'hyprctl dispatch dpms on' \ 7 | ##timeout 600 'systemctl suspend' -------------------------------------------------------------------------------- /.scripts/start-windows.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | gfx_mode=$(supergfxctl -g) 4 | 5 | if [ "$gfx_mode" = "Hybrid" ]; then 6 | notify-send -u critical "Error" "Switch to integrated first!!" 7 | else 8 | sh -c "virsh --connect=qemu:///system start win10; sleep 13; looking-glass-client -F" 9 | fi 10 | -------------------------------------------------------------------------------- /.scripts/status.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############ Variables ############ 4 | enable_battery=false 5 | battery_charging=false 6 | 7 | ####### Check availability ######## 8 | for battery in /sys/class/power_supply/*BAT*; do 9 | if [[ -f "$battery/uevent" ]]; then 10 | enable_battery=true 11 | if [[ $(cat /sys/class/power_supply/*/status | head -1) == "Charging" ]]; then 12 | battery_charging=true 13 | fi 14 | break 15 | fi 16 | done 17 | 18 | ############# Output ############# 19 | if [[ $enable_battery == true ]]; then 20 | if [[ $battery_charging == true ]]; then 21 | echo -n "(+) " 22 | fi 23 | echo -n "$(cat /sys/class/power_supply/*/capacity | head -1)"% 24 | if [[ $battery_charging == false ]]; then 25 | echo -n " remaining" 26 | fi 27 | fi 28 | 29 | echo '' 30 | -------------------------------------------------------------------------------- /.scripts/swap-workspace.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | WORKSPACE="$1" 4 | 5 | monitors_out="$(hyprctl monitors -j)" 6 | focused_mon="$(echo "$monitors_out" | jq '.[] | select(.focused==true) | .id')" 7 | focused_wks="$(echo "$monitors_out" | jq '.[].activeWorkspace.id')" 8 | 9 | # Workspace is already focused, check on which monitor 10 | if echo "$focused_wks" | grep "$WORKSPACE" >/dev/null; then 11 | mon_id="$(echo "$monitors_out" | jq ".[] | select(.activeWorkspace.id==$WORKSPACE) | .id")" 12 | 13 | # If the workspace is focused on the active monitor, don't do anything (we're here). 14 | # Otherwise, swap the workspaces. 15 | if [ "$mon_id" -ne "$focused_mon" ]; then 16 | hyprctl dispatch swapactiveworkspaces "$focused_mon" "$mon_id" 17 | fi 18 | # Switching to an unfocused workspace, always move it to focused monitor 19 | else 20 | hyprctl dispatch moveworkspacetomonitor "$WORKSPACE" "$focused_mon" 21 | hyprctl dispatch workspace "$WORKSPACE" 22 | fi 23 | -------------------------------------------------------------------------------- /.scripts/swaybg.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | wallpaper_directory=$1 3 | duration=$2 4 | 5 | [ -z "$wallpaper_directory" ] && echo "Usage: $(basename $0) ~/Pictures/wallpapers 30 minutes" && exit 1 6 | [ ! -d "$wallpaper_directory" ] && echo "Directory \'$wallpaper_directory\' does not exist" && exit 1 7 | [ -z "$duration" ] && duration=30 8 | 9 | while true; do 10 | for file in $(ls "$wallpaper_directory"); do 11 | current_swaybg_pid=$(pgrep -x swaybg) 12 | wallpaper="$wallpaper_directory/$file" 13 | format=$(file "$wallpaper" | cut -d " " -f 2) 14 | [ "$format" = "JPEG" ] || [ "$format" = "JP G" ] || [ "$format" = "PNG" ] \ 15 | && echo "Setting wallpaper $wallpaper, format $format, sleeping $duration." \ 16 | && sh -c "swaybg -o \"*\" -i $wallpaper -m fill -c \"#000000\" > /dev/null 2>&1 &" \ 17 | && sleep 0.5 \ 18 | && kill $current_swaybg_pid 19 | sleep $duration 20 | done 21 | done -------------------------------------------------------------------------------- /.scripts/vfio.sh: -------------------------------------------------------------------------------- 1 | #!/bin/env bash 2 | shopt -s nullglob 3 | for g in `find /sys/kernel/iommu_groups/* -maxdepth 0 -type d | sort -V`; do 4 | echo "IOMMU Group ${g##*/}:" 5 | for d in $g/devices/*; do 6 | echo -e "\t$(lspci -nns ${d##*/})" 7 | done; 8 | done; 9 | -------------------------------------------------------------------------------- /.scripts/volume_ctl.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # You can call this script like this: 4 | # $ ./volumeControl.sh up 5 | # $ ./volumeControl.sh down 6 | # $ ./volumeControl.sh mute 7 | 8 | # Script modified from these wonderful people: 9 | # https://github.com/dastorm/volume-notification-dunst/blob/master/volume.sh 10 | # https://gist.github.com/sebastiencs/5d7227f388d93374cebdf72e783fbd6a 11 | 12 | NotificationID_File=/tmp/volume_notification_id 13 | 14 | function get_volume { 15 | amixer get Master | grep '%' | head -n 1 | cut -d '[' -f 2 | cut -d '%' -f 1 16 | } 17 | 18 | function is_mute { 19 | amixer get Master | grep '%' | grep -oE '[^ ]+$' | grep off > /dev/null 20 | } 21 | 22 | function get_notification_id { 23 | if [ -s "$NotificationID_File" ]; then 24 | cat $NotificationID_File 25 | else 26 | echo 0 27 | fi 28 | } 29 | 30 | function send_notification { 31 | iconSound="audio-volume-high" 32 | iconMuted="audio-volume-muted" 33 | nid=$(get_notification_id) 34 | if is_mute ; then 35 | notify-send -i $iconMuted -p -r $nid -u normal "Muted" > $NotificationID_File 36 | else 37 | volume=$(get_volume) 38 | # Make the bar with the special character ─ (it's not dash -) 39 | # https://en.wikipedia.org/wiki/Box-drawing_character 40 | bar=$(seq --separator="─" 0 "$(((volume - 1) / 4))" | sed 's/[0-9]//g') 41 | space=$(seq --separator=" " 0 "$(((100 - volume) / 4))" | sed 's/[0-9]//g') 42 | # Send the notification 43 | notify-send -i $iconSound -p -r $nid -u normal "|$bar$space| $volume%" > $NotificationID_File 44 | fi 45 | } 46 | 47 | case $1 in 48 | up) 49 | # set the volume on (if it was muted) 50 | amixer -D pipewire set Master on > /dev/null 51 | # up the volume (+ 5%) 52 | amixer -D pipewire sset Master 1%+ > /dev/null 53 | send_notification 54 | canberra-gtk-play -i audio-volume-change -d "changeVolume" 55 | ;; 56 | down) 57 | amixer -D pipewire set Master on > /dev/null 58 | amixer -D pipewire sset Master 1%- > /dev/null 59 | send_notification 60 | canberra-gtk-play -i audio-volume-change -d "changeVolume" 61 | ;; 62 | mute) 63 | # toggle mute 64 | amixer -D pipewire set Master 1+ toggle > /dev/null 65 | send_notification 66 | ;; 67 | esac 68 | -------------------------------------------------------------------------------- /.scripts/wallpaper.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Set the path to your wallpaper directory here: 4 | WALLPAPER_DIR="$HOME/Pictures/Wallpapers" 5 | 6 | # Get the current wallpaper path from the configuration file: 7 | WALLPAPER_CONF="$HOME/.config/hypr/wallpaper.conf" 8 | CURRENT_WALLPAPER=$(grep -o '$wall=".*"' "$WALLPAPER_CONF" | cut -d '"' -f 2) 9 | 10 | # Check if the wallpaper path is empty: 11 | if [ -z "$CURRENT_WALLPAPER" ]; then 12 | # Get a list of all the images in the wallpaper directory: 13 | WALLPAPERS=$(find "$WALLPAPER_DIR" -type f -name "*.jpg" -o -name "*.png" -o -name "*.jpeg") 14 | 15 | # Use rofi to display a list of wallpapers and allow the user to select one: 16 | SELECTED=$(echo "$WALLPAPERS" | rofi -dmenu -i -p "Select Wallpaper" -theme ~/.config/rofi/wall.rasi) 17 | 18 | if [ -z "$SELECTED" ]; then 19 | exit 0 20 | fi 21 | 22 | # Escape any special characters in the paths: 23 | SELECTED_ESCAPED=$(echo "$SELECTED" | sed 's/[\/&]/\\&/g') 24 | WALLPAPER_DIR_ESCAPED=$(echo "$WALLPAPER_DIR" | sed 's/[\/&]/\\&/g') 25 | 26 | # Use sed to replace the wallpaper path in the configuration file: 27 | sed -i "s|\$wall=\".*\"|\$wall=\"$SELECTED_ESCAPED\"|g" "$WALLPAPER_CONF" 28 | 29 | CURRENT_WALLPAPER="$SELECTED" 30 | else 31 | # Use sed to replace the wallpaper path in the configuration file: 32 | sed -i "s|\$wall=\".*\"|\$wall=\"\"|g" "$WALLPAPER_CONF" 33 | fi 34 | 35 | # Kill any existing swaybg process: 36 | killall swaybg &>/dev/null 37 | 38 | # Use swaybg to set the selected wallpaper as the background: 39 | swaybg -i "$CURRENT_WALLPAPER" & 40 | 41 | # Wait for a moment to ensure the wallpaper has been set: 42 | sleep 1s 43 | -------------------------------------------------------------------------------- /.scripts/wf-rec: -------------------------------------------------------------------------------- 1 | wf-recorder -c gif -g "$(slurp)" -f ~/Videos/Screencasts/$(date +"%Y%m%d_%H%M%S.gif") 2 | 3 | -------------------------------------------------------------------------------- /.vimrc: -------------------------------------------------------------------------------- 1 | call plug#begin('~/.vim/plugged') 2 | " Better Syntax Support 3 | Plug 'sheerun/vim-polyglot' 4 | " File Explorer 5 | Plug 'scrooloose/NERDTree' 6 | Plug 'ryanoasis/vim-devicons' 7 | " Auto pairs for '(' '[' '{' 8 | Plug 'jiangmiao/auto-pairs' 9 | " Rich Presence 10 | Plug 'vimsence/vimsence' 11 | " AirLine 12 | Plug 'vim-airline/vim-airline' 13 | Plug 'vim-airline/vim-airline-themes' 14 | " source $HOME/.vim/themes/airline.vim 15 | " CSS color 16 | Plug 'ap/vim-css-color' 17 | " Surround 18 | Plug 'tpope/vim-surround' 19 | " Commentary 20 | Plug 'tomtom/tcomment_vim' 21 | " Syntax Check (ale) 22 | " Plug 'dense-analysis/ale' 23 | " Theme 24 | Plug 'bluz71/vim-moonfly-colors' 25 | call plug#end() 26 | 27 | " Change cursor shape in different modes 28 | let &t_SI = "\[6 q" 29 | let &t_SR = "\[4 q" 30 | let &t_EI = "\[2 q" 31 | 32 | " General Settings 33 | syntax on 34 | filetype plugin on 35 | set nocompatible 36 | set clipboard=unnamedplus 37 | set number relativenumber 38 | set tabstop=4 softtabstop=4 39 | set shiftwidth=4 40 | set noendofline 41 | set nofixendofline 42 | set autoread 43 | set autoindent 44 | set noexpandtab 45 | set nosmarttab 46 | set termguicolors 47 | set smartindent 48 | set cmdheight=1 49 | set ignorecase 50 | set smartcase 51 | set noswapfile 52 | set splitbelow 53 | set splitright 54 | set incsearch 55 | set autowrite 56 | set mouse=a 57 | 58 | " Mappings 59 | :map :NERDTree 60 | nnoremap :tabprevious 61 | nnoremap :tabnext 62 | nnoremap :qa! 63 | nnoremap :w 64 | autocmd filetype python nnoremap :!python3 % 65 | -------------------------------------------------------------------------------- /.xbindkeysrc: -------------------------------------------------------------------------------- 1 | # For the benefit of emacs users: -*- shell-script -*- 2 | ########################### 3 | # xbindkeys configuration # 4 | ########################### 5 | # 6 | # Version: 1.8.6 7 | # 8 | # If you edit this file, do not forget to uncomment any lines 9 | # that you change. 10 | # The pound(#) symbol may be used anywhere for comments. 11 | # 12 | # To specify a key, you can use 'xbindkeys --key' or 13 | # 'xbindkeys --multikey' and put one of the two lines in this file. 14 | # 15 | # The format of a command line is: 16 | # "command to start" 17 | # associated key 18 | # 19 | # 20 | # A list of keys is in /usr/include/X11/keysym.h and in 21 | # /usr/include/X11/keysymdef.h 22 | # The XK_ is not needed. 23 | # List of modifier: Release, Control, Shift, Mod1 (Alt), Mod2 (NumLock), 24 | # Mod3 (CapsLock), Mod4, Mod5 (Scroll). 25 | # 26 | 27 | # The release modifier is not a standard X modifier, but you can 28 | # use it if you want to catch release events instead of press events 29 | 30 | # By defaults, xbindkeys does not pay attention with the modifiers 31 | # NumLock, CapsLock and ScrollLock. 32 | # Uncomment the lines above if you want to pay attention to them. 33 | 34 | #keystate_numlock = enable 35 | #keystate_capslock = enable 36 | #keystate_scrolllock= enable 37 | 38 | # Audio 39 | "pactl -- set-sink-volume @DEFAULT_SINK@ +5%" 40 | XF86AudioRaiseVolume 41 | "pactl -- set-sink-volume @DEFAULT_SINK@ -5%" 42 | XF86AudioLowerVolume 43 | "pactl -- set-sink-mute @DEFAULT_SINK@ toggle" 44 | XF86AudioMute 45 | "pactl -- set-sink-volume @DEFAULT_SINK@ +5%" 46 | Shift+Mod2+Mod4 + KP_Add 47 | "pactl -- set-sink-volume @DEFAULT_SINK@ -5%" 48 | Shift+Mod2+Mod4 + KP_Subtract 49 | "pactl -- set-sink-mute @DEFAULT_SINK@ toggle" 50 | Shift+Mod2+Mod4 + m 51 | 52 | # PlayerCTL 53 | "playerctl --player=%any,chromium next" 54 | XF86AudioNext 55 | "playerctl --player=%any,chromium previous" 56 | XF86AudioPrev 57 | "playerctl --player=%any,chromium play-pause" 58 | XF86AudioPlay 59 | "playerctl --player=%any,chromium stop" 60 | XF86AudioStop 61 | 62 | #PlayerCTL using control + del,end,next 63 | 64 | "playerctl --player=%any,chromium next" 65 | Mod4+Mod2 + Next 66 | "playerctl --player=%any,chromium play-pause" 67 | Mod4+Mod2 + End 68 | "playerctl --player=%any,chromium previous" 69 | Mod4+Mod2 + Delete 70 | 71 | 72 | #ROFI 73 | "~/.config/rofi/bin/launcher_misc" 74 | Mod4+space 75 | #powermenu 76 | "systemctl poweroff" 77 | Control+Mod1+Delete 78 | 79 | #fix resolution 80 | "xrandr --output VGA-0 --mode 1368x768" 81 | Control+Mod4+d 82 | 83 | # Application Bindings 84 | 85 | "brave" 86 | Mod4+b 87 | 88 | "thunar" 89 | Mod4+f 90 | 91 | "firefox" 92 | Mod4+z 93 | 94 | #screenshot 95 | #"maim -s --format=png /dev/stdout | xclip -selection clipboard -t image/png -i" 96 | "maim -s --format=png /dev/stdout | xclip -selection clipboard -t image/png -i" 97 | Mod4+Shift+s 98 | 99 | #fullscreen screenshot 100 | "~/.scripts/maim.sh" 101 | Mod2 + Print 102 | 103 | #Disable/enable compositing 104 | "killall picom" 105 | Mod4+Control+o 106 | "picom --experimental-backends" 107 | Mod4+Control+p 108 | 109 | #sleep 110 | "systemctl suspend" 111 | Mod2 + XF86Sleep 112 | 113 | 114 | ################################## 115 | # End of xbindkeys configuration # 116 | ################################## 117 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # A place to host dotfiles for whatever Window manager I'm currently using. 2 | 3 | ![image](https://user-images.githubusercontent.com/87846149/231362373-a1d467fb-2207-4888-b2d1-81834fbf2a92.png) 4 | ![image](https://user-images.githubusercontent.com/87846149/231362579-5dac9e34-0b83-45a7-b8dc-29e6dbe270ad.png) 5 | ![image](https://user-images.githubusercontent.com/87846149/231362841-ef2c9025-c8bd-4aa7-8e92-90b6219b36c0.png) 6 | ![image](https://user-images.githubusercontent.com/87846149/231363329-7b2c4e70-c36f-4332-b34b-e2358531568e.png) 7 | ![image](https://github.com/chiefdinkan/dotfiles/assets/87846149/2c17d467-7f4b-4706-8104-af353e89dfba) 8 | 9 | - WM: [Hyprland][hypr] 10 | 11 | - OS: [Arch][archurl] btw 12 | 13 | - Term: [kitty][kittyurl] 14 | 15 | - Launcher: [rofi-ibonn][rofiurl] 16 | 17 | - Shell: [Zsh][zshurl] 18 | 19 | - Editor : Neovim , Vscode 20 | 21 | - Music: [cmus][cmusurl],[ncspot](https://github.com/hrkfdn/ncspot) 22 | 23 | - Hardware: [Asus Tuf f15][asus] 24 | 25 | [hypr]: https://github.com/hyprwm/Hyprland 26 | [archurl]: https://archlinux.org/ 27 | [kittyurl]: https://github.com/kovidgoyal/kitty 28 | [rofiurl]: https://github.com/lbonn/rofi 29 | [waybarurl]: https://github.com/Alexays/Waybar 30 | [zshurl]: https://www.zsh.org/ 31 | [cmusurl]: https://cmus.github.io/ 32 | [asus]: https://www.asus.com/laptops/for-gaming/tuf-gaming/asus-tuf-gaming-f15-2022/ 33 | -------------------------------------------------------------------------------- /hmm/Google Sans Text/Google Sans Text Bold Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/hmm/Google Sans Text/Google Sans Text Bold Italic.ttf -------------------------------------------------------------------------------- /hmm/Google Sans Text/Google Sans Text Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/hmm/Google Sans Text/Google Sans Text Bold.ttf -------------------------------------------------------------------------------- /hmm/Google Sans Text/Google Sans Text Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/hmm/Google Sans Text/Google Sans Text Italic.ttf -------------------------------------------------------------------------------- /hmm/Google Sans Text/Google Sans Text Medium Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/hmm/Google Sans Text/Google Sans Text Medium Italic.ttf -------------------------------------------------------------------------------- /hmm/Google Sans Text/Google Sans Text Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/hmm/Google Sans Text/Google Sans Text Medium.ttf -------------------------------------------------------------------------------- /hmm/Google Sans Text/Google Sans Text Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/hmm/Google Sans Text/Google Sans Text Regular.ttf -------------------------------------------------------------------------------- /hmm/JetBrains Mono Medium Nerd Font Complete.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/hmm/JetBrains Mono Medium Nerd Font Complete.ttf -------------------------------------------------------------------------------- /hmm/Product Sans Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/hmm/Product Sans Regular.ttf -------------------------------------------------------------------------------- /hmm/bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/hmm/bat -------------------------------------------------------------------------------- /hmm/black.qbtheme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/structnull/dotfiles/dec7764ba416875ae751cfd29957f58fd60a8f73/hmm/black.qbtheme -------------------------------------------------------------------------------- /init.lua: -------------------------------------------------------------------------------- 1 | vim.o.number = true 2 | vim.o.showmode = true 3 | vim.o.autoindent = true 4 | vim.o.smartindent = true 5 | vim.o.tabstop = 4 6 | vim.o.shiftwidth = 4 7 | vim.o.expandtab = true 8 | vim.o.termguicolors = true 9 | vim.o.background = "dark" 10 | vim.o.scrolloff = 8 11 | vim.o.sidescrolloff = 8 12 | vim.o.cursorlineopt = "both" 13 | vim.opt.whichwrap:append("<,>,h,l") 14 | vim.o.hlsearch = true 15 | vim.o.incsearch = true 16 | vim.o.ignorecase = true 17 | vim.o.smartcase = true 18 | vim.o.hidden = true 19 | vim.o.laststatus = 2 20 | vim.o.showtabline = 2 21 | vim.o.mouse = "a" 22 | vim.o.completeopt = "menuone,noinsert,noselect" 23 | vim.cmd("syntax enable") 24 | vim.opt.clipboard:append("unnamedplus") 25 | -------------------------------------------------------------------------------- /python plugins/academictorrents.py: -------------------------------------------------------------------------------- 1 | # VERSION: 1.0 2 | # AUTHORS: LightDestory (https://github.com/LightDestory) 3 | 4 | import urllib.parse 5 | import json 6 | 7 | from helpers import retrieve_url, download_file 8 | from novaprinter import prettyPrinter 9 | 10 | YOUR_API_KEY = "" 11 | YOUR_UID = "" 12 | 13 | 14 | class academictorrents(object): 15 | url = 'https://academictorrents.com/' 16 | name = 'AcademicTorrents' 17 | """ 18 | ***TLDR; It is safer to force an 'all' research*** 19 | AcademicTorrents categories are very specific 20 | qBittorrent does not provide enough categories to implement a good filtering. 21 | """ 22 | supported_categories = {'all': '0'} 23 | 24 | def parseJSON(self, collection): 25 | for torrent in collection: 26 | data = { 27 | 'link': urllib.parse.quote(torrent['url']), 28 | 'name': torrent['name'], 29 | 'size': torrent['size'], 30 | 'seeds': torrent['mirrors'], 31 | 'leech': torrent['downloaders'], 32 | 'engine_url': self.url, 33 | 'desc_link': torrent['url'] 34 | } 35 | prettyPrinter(data) 36 | 37 | def download_torrent(self, info): 38 | infoHash = urllib.parse.unquote(info).split("/")[-1] 39 | if len(infoHash) == 40: 40 | print(download_file('{0}/download/{1}.torrent'.format(self.url, infoHash))) 41 | else: 42 | raise Exception('Error, please fill a bug report!') 43 | 44 | # DO NOT CHANGE the name and parameters of this function 45 | # This function will be the one called by nova2.py 46 | def search(self, what, cat='all'): 47 | what = what.replace("%20", "+") 48 | auth = "" if (not YOUR_API_KEY or not YOUR_UID) else '&uid={0}&pass={1}&limit=9999'.format(YOUR_UID, 49 | YOUR_API_KEY) 50 | url = '{0}apiv2/entries?search={1}{2}'.format( 51 | self.url, what, auth) 52 | # Getting JSON from API 53 | collection = json.loads(retrieve_url(url)) 54 | self.parseJSON(collection) 55 | -------------------------------------------------------------------------------- /python plugins/bt4g.py: -------------------------------------------------------------------------------- 1 | # VERSION: 1.01 2 | # AUTHORS: kjjejones44 3 | 4 | from html.parser import HTMLParser 5 | from urllib.parse import urljoin 6 | from helpers import retrieve_url 7 | from novaprinter import prettyPrinter 8 | import json 9 | 10 | class bt4g(object): 11 | 12 | url = "https://bt4g.org/" 13 | name = "bt4g" 14 | supported_categories = {'all': '', 'movies': 'movie/', 'tv': 'movie/', 'music': 'audio/', 'books': 'doc/', 'software': 'app/'} 15 | 16 | 17 | class MyHTMLParser(HTMLParser): 18 | 19 | def __init__(self): 20 | super().__init__() 21 | self.is_in_container = False 22 | self.is_in_entry = False 23 | self.b_value = "" 24 | self.container_row_count = 0 25 | self.temp_result = {} 26 | self.results = [] 27 | 28 | def feed(self, feed: str) -> None: 29 | super().feed(feed) 30 | return self.results 31 | 32 | 33 | def handle_starttag(self, tag, attrs): 34 | attr_dict = {x[0]:x[1] for x in attrs} 35 | if tag == "div": 36 | if not self.is_in_container and attr_dict.get("class", "") == "container": 37 | self.is_in_container = True 38 | elif tag == "a": 39 | if self.is_in_container and all(x in attr_dict for x in ["title", "href"]): 40 | self.is_in_entry = True 41 | self.temp_result.update(attr_dict) 42 | elif tag == "b": 43 | if self.is_in_entry: 44 | classname = attr_dict.get("class", "") 45 | idname = attr_dict.get("id", "") 46 | self.b_value = "filesize" if "cpill" in classname else idname 47 | 48 | def handle_endtag(self, tag): 49 | if tag == "div": 50 | self.is_in_entry = False 51 | 52 | def handle_data(self, data): 53 | if self.b_value != "": 54 | self.temp_result[self.b_value] = data 55 | if self.b_value == "leechers": 56 | self.results.append(self.temp_result) 57 | self.temp_result = {} 58 | self.b_value = "" 59 | 60 | def search(self, term, cat="all"): 61 | pagenumber = 1 62 | while pagenumber <= 10: 63 | result_page = self.search_page(term, pagenumber, cat) 64 | self.pretty_print_results(result_page) 65 | if len(result_page) < 15 or int(result_page[-1]['seeders']) < 1: 66 | break 67 | pagenumber = pagenumber + 1 68 | 69 | def search_page(self, term, pagenumber, cat): 70 | try: 71 | query = f"{self.url}{self.supported_categories[cat]}search/{term}/byseeders/{pagenumber}" 72 | parser = self.MyHTMLParser() 73 | return parser.feed(retrieve_url(query)) 74 | except Exception as e: 75 | return [] 76 | 77 | def download_torrent(self, info): 78 | if "trackerlist" not in self.__dict__: 79 | self.trackerlist = json.loads(retrieve_url("https://downloadtorrentfile.com/trackerlist")) 80 | magnet = f"magnet:?xt=urn:btih:{info.split('/')[-1]}&tr=" + "&tr=".join(self.trackerlist) 81 | print(magnet + ' ' + info) 82 | 83 | def pretty_print_results(self, results): 84 | for result in results: 85 | temp_result = { 86 | 'name': result['title'], 87 | 'size': result['filesize'], 88 | 'seeds': result['seeders'], 89 | 'leech': result['leechers'], 90 | 'engine_url': self.url, 91 | 'link': urljoin(self.url, result['href']) 92 | } 93 | prettyPrinter(temp_result) 94 | 95 | if __name__ == "__main__": 96 | bt4g().search("how", cat="books") 97 | -------------------------------------------------------------------------------- /python plugins/btetree.py: -------------------------------------------------------------------------------- 1 | # VERSION: 1.2 2 | # AUTHORS: LightDestory (https://github.com/LightDestory) 3 | 4 | import re 5 | import urllib.parse 6 | 7 | from helpers import retrieve_url, download_file 8 | from novaprinter import prettyPrinter 9 | 10 | 11 | class btetree(object): 12 | url = "http://bt.etree.org/" 13 | name = "bt.etree" 14 | supported_categories = {'all': '0'} 15 | max_pages = 10 16 | 17 | class HTMLParser: 18 | 19 | def __init__(self, url): 20 | self.url = url 21 | self.pageResSize = 0 22 | 23 | def feed(self, html): 24 | self.pageResSize = 0 25 | torrents = self.__findTorrents(html) 26 | resultSize = len(torrents) 27 | if resultSize == 0: 28 | return 29 | else: 30 | self.pageResSize = resultSize 31 | for torrent in range(resultSize): 32 | data = { 33 | 'link': torrents[torrent][0], 34 | 'name': torrents[torrent][1], 35 | 'size': torrents[torrent][2], 36 | 'seeds': torrents[torrent][3], 37 | 'leech': torrents[torrent][4], 38 | 'engine_url': self.url, 39 | 'desc_link': urllib.parse.unquote(torrents[torrent][0]) 40 | } 41 | prettyPrinter(data) 42 | 43 | def __findTorrents(self, html): 44 | torrents = [] 45 | trs = re.findall( 46 | r'.+?', html) 47 | for tr in trs: 48 | # Extract from the A node all the needed information 49 | url_titles = re.search( 50 | r'(.+?).+?([0-9\,\.]+ (TB|GB|MB|KB)).+?seeders\">([0-9,]+).+?leechers\">([0-9,]+)', 51 | tr) 52 | if url_titles: 53 | torrents.append( 54 | [urllib.parse.quote('{0}{1}'.format(self.url, url_titles.group(1))), url_titles.group( 55 | 2), url_titles.group(3).replace(",", ""), url_titles.group(5).replace(",", ""), 56 | url_titles.group(6).replace(",", "")]) 57 | return torrents 58 | 59 | def download_torrent(self, info): 60 | torrent_page = retrieve_url(urllib.parse.unquote(info)) 61 | file_link = re.search( 62 | r'.+?href=\"(.+?\.torrent)\"', torrent_page) 63 | if file_link and file_link.groups(): 64 | print(download_file(self.url + file_link.groups()[0])) 65 | else: 66 | raise Exception('Error, please fill a bug report!') 67 | 68 | # DO NOT CHANGE the name and parameters of this function 69 | # This function will be the one called by nova2.py 70 | def search(self, what, cat='all'): 71 | what = what.replace('%20', '+') 72 | parser = self.HTMLParser(self.url) 73 | for currPage in range(0, self.max_pages): 74 | url = '{0}index.php?searchzzzz={1}&cat=0&page={2}'.format( 75 | self.url, what, 50*currPage) 76 | html = retrieve_url(url).replace( 77 | " ", "").replace("\n", "").replace("\r", "") 78 | parser.feed(html) 79 | # if there are no results exit 80 | if parser.pageResSize <= 0: 81 | break 82 | -------------------------------------------------------------------------------- /python plugins/cinecalidad.py: -------------------------------------------------------------------------------- 1 | #VERSION: 1.0 2 | #AUTHORS: mauricci 3 | 4 | from helpers import retrieve_url 5 | from helpers import download_file, retrieve_url 6 | from novaprinter import prettyPrinter 7 | import re 8 | 9 | try: 10 | #python3 11 | from html.parser import HTMLParser 12 | except ImportError: 13 | #python2 14 | from HTMLParser import HTMLParser 15 | 16 | class cinecalidad(object): 17 | url = 'https://www.cinecalidad.to' 18 | name = 'CineCalidad' 19 | supported_categories = {'all': 'all'} 20 | 21 | class MyHTMLParser(HTMLParser): 22 | 23 | def __init__(self): 24 | HTMLParser.__init__(self) 25 | self.url = 'https://www.cinecalidad.to' 26 | self.insideDataDiv = False 27 | self.insideTitleDiv = False 28 | self.fullResData = [] 29 | self.singleResData = self.getSingleData() 30 | 31 | def getSingleData(self): 32 | return {'name':'-1','seeds':'-1','leech':'-1','size':'-1','link':'-1','desc_link':'-1','engine_url':self.url} 33 | 34 | def handle_starttag(self, tag, attrs): 35 | Dict = dict(attrs) 36 | if tag == 'div' and Dict.get('id','') == 'content_inside': 37 | self.insideDataDiv = True 38 | if self.insideDataDiv and tag == 'div' and Dict.get('class','') == 'in_title': 39 | self.insideTitleDiv = True 40 | if self.insideDataDiv and tag == 'a' and len(attrs) > 0 and 'href' in Dict: 41 | self.singleResData['desc_link'] = Dict['href'] 42 | self.singleResData['link'] = self.singleResData['desc_link'] 43 | 44 | def handle_endtag(self, tag): 45 | self.insideTitleDiv = False 46 | if len(self.singleResData) > 0: 47 | #ignore trash stuff 48 | if self.singleResData['name'] != '-1': 49 | prettyPrinter(self.singleResData) 50 | self.fullResData.append(self.singleResData) 51 | self.singleResData = self.getSingleData() 52 | 53 | def handle_data(self, data): 54 | if self.insideTitleDiv: 55 | self.singleResData['name'] = data.strip() 56 | 57 | def feed(self,html): 58 | HTMLParser.feed(self,html) 59 | self.insideDataDiv = False 60 | self.insideTitleDiv = False 61 | 62 | def download_torrent(self, info): 63 | html = retrieve_url(info) 64 | #first we retrive the link for the second page, then the magnet link 65 | torrPage2Link = re.search('(\/protect.+?)[\'\"]',html) 66 | if torrPage2Link and len(torrPage2Link.groups()) > 0: 67 | html2 = retrieve_url(self.url + torrPage2Link.group(1)) 68 | magnet = re.search('(magnet\:\?.+?)[\'\"]',html2) 69 | if magnet and len(magnet.groups()) > 0: 70 | print(magnet.group(1) + ' '+ info) 71 | 72 | # DO NOT CHANGE the name and parameters of this function 73 | # This function will be the one called by nova2.py 74 | def search(self, what, cat='all'): 75 | currCat = self.supported_categories[cat] 76 | what = what.replace('%20','+') 77 | parser = self.MyHTMLParser() 78 | #analyze firt 10 pages 79 | for currPage in range(1,11): 80 | url = self.url+'/page/{1}/?s={0}'.format(what,currPage) 81 | #print(url) 82 | html = retrieve_url(url) 83 | parser.feed(html) 84 | #print(parser.fullResData) 85 | parser.close() 86 | 87 | if __name__ == "__main__": 88 | c = cinecalidad() 89 | c.search('tomb%20raider') 90 | -------------------------------------------------------------------------------- /python plugins/dmhyorg.py: -------------------------------------------------------------------------------- 1 | 2 | #VERSION: 1.00 3 | #AUTHORS: xyau (xyauhideto@gmail.com) 4 | 5 | # MIT License 6 | # 7 | # Copyright (c) 2018 xyau 8 | # 9 | # Permission is hereby granted, free of charge, to any person obtaining a copy 10 | # of this software and associated documentation files (the "Software"), to deal 11 | # in the Software without restriction, including without limitation the right 12 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | # copies of the Software, and to permit persons to whom the Software i 14 | # furnished to do so, subject to the following conditions: 15 | # 16 | # The above copyright notice and this permission notice shall be included in all 17 | # copies or substantial portions of the Software. 18 | # 19 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | # SOFTWARE. 26 | 27 | # qBT 28 | from helpers import download_file, retrieve_url 29 | from novaprinter import prettyPrinter 30 | 31 | # parser 32 | from re import compile as re_compile 33 | 34 | class dmhyorg(object): 35 | url = "https://share.dmhy.org" 36 | name = "DMHY" 37 | supported_categories = {"all":0,"anime":2,"pictures":3,"music":4,"tv":6,"games":9} 38 | 39 | def download_torrent(self, info): 40 | """ Downloader """ 41 | print(download_file(info)) 42 | 43 | # DO NOT CHANGE the name and parameters of this function 44 | # This function will be the one called by nova2.py 45 | def search(self, what, cat="all"): 46 | """ Performs search """ 47 | 48 | def get_data(url): 49 | highlight = re_compile('([^<]+)') 50 | get_next = re_compile('(?s)"fl".+href="([^"]+)">下一') 51 | get_item = re_compile('(?m)]+>\s*([^<]*)(?:\s*.*){2}(magnet:[^"]+)".*\s*.*>([\d\.]+)(\w+)([\d-]+)\s*[^/]+bts_1">([\d-]+)<') 52 | html = retrieve_url(url) 53 | next_page = get_next.search(html) 54 | # clear highlighting 55 | return [get_item.findall(highlight.sub(r"\1",html)), 56 | next_page and self.url + next_page.group(1)] 57 | 58 | query = "%s/topics/list/?keyword=%s&sort_id=%d" % ( 59 | self.url, what, self.supported_categories.get(cat, "0")) 60 | 61 | while query: 62 | [data,query] = get_data(query) 63 | for item in data: 64 | prettyPrinter({ 65 | "desc_link":self.url+item[0], 66 | "name":item[1], 67 | "link":item[2], 68 | "size":str(int(float(item[3]) * 2 ** (10 * (1 + 'kmgtpezy'.find(item[4][0].lower()))))), 69 | "seeds":0 if "-" == item[5] else int(item[5]), 70 | "leech":0 if "-" == item[6] else int(item[6]), 71 | "engine_url":self.url 72 | }) 73 | 74 | if __name__ == "__main__": 75 | engine = dmhyorg() 76 | engine.search('conan') 77 | -------------------------------------------------------------------------------- /python plugins/ettv.py: -------------------------------------------------------------------------------- 1 | # VERSION: 1.2 2 | # AUTHORS: LightDestory (https://github.com/LightDestory) 3 | 4 | import re 5 | import urllib.parse 6 | 7 | from helpers import retrieve_url 8 | from novaprinter import prettyPrinter 9 | 10 | 11 | class ettv(object): 12 | url = 'https://www.ettvcentral.com/' 13 | name = 'ETTV' 14 | """ 15 | ***TLDR; It is safer to force an 'all' research*** 16 | ETTV's categories are very specific 17 | qBittorrent does not provide enough categories to implement a good filtering. 18 | For example, qBittorrent provides only a generic 'games' category meanwhile the website uses: pc, xbox and so on 19 | """ 20 | supported_categories = {'all': '0'} 21 | # ETTV's search divided into pages, so we are going to set a limit on how many pages to read 22 | max_pages = 8 23 | 24 | class HTMLParser: 25 | 26 | def __init__(self, url): 27 | self.url = url 28 | self.pageResSize = 0 29 | 30 | def feed(self, html): 31 | self.pageResSize = 0 32 | torrents = self.__findTorrents(html) 33 | resultSize = len(torrents) 34 | if resultSize == 0: 35 | return 36 | else: 37 | self.pageResSize = resultSize 38 | for torrent in range(resultSize): 39 | data = { 40 | 'link': torrents[torrent][0], 41 | 'name': torrents[torrent][1], 42 | 'size': torrents[torrent][2], 43 | 'seeds': torrents[torrent][3], 44 | 'leech': torrents[torrent][4], 45 | 'engine_url': self.url, 46 | 'desc_link': urllib.parse.unquote(torrents[torrent][0]) 47 | } 48 | prettyPrinter(data) 49 | 50 | def __findTorrents(self, html): 51 | torrents = [] 52 | trs = re.findall(r'.*?', html) 53 | for tr in trs: 54 | # Extract from the A node all the needed information 55 | url_titles = re.search( 56 | r'.+?torrent\" href=\"/(.+?)\".+?(.+?).+?([0-9\.\,]+ (TB|GB|MB|KB)).+?green\'>([0-9,]+).+?a50707\'>([0-9,]+)', 57 | tr) 58 | if url_titles: 59 | torrents.append( 60 | [urllib.parse.quote('{0}{1}'.format(self.url, url_titles.group(1))), url_titles.group( 61 | 2), url_titles.group(3).replace(",", ""), url_titles.group(5).replace(",", ""), 62 | url_titles.group(6).replace(",", "")]) 63 | return torrents 64 | 65 | def download_torrent(self, info): 66 | torrent_page = retrieve_url(urllib.parse.unquote(info)) 67 | magnet_match = re.search( 68 | r'\"(magnet:.*?)\"', torrent_page) 69 | if magnet_match and magnet_match.groups(): 70 | print('{0} {1}'.format(magnet_match.groups()[0], info)) 71 | else: 72 | raise Exception('Error, please fill a bug report!') 73 | 74 | # DO NOT CHANGE the name and parameters of this function 75 | # This function will be the one called by nova2.py 76 | def search(self, what, cat='all'): 77 | what = what.replace('%20', '+') 78 | parser = self.HTMLParser(self.url) 79 | for currPage in range(0, self.max_pages): 80 | url = '{0}torrents-search.php?search={1}&sort=seeders&cat=0&order=desc&lang=0&page={2}'.format( 81 | self.url, what, currPage) 82 | html = retrieve_url(url).replace( 83 | " ", "").replace("\n", "").replace("\r", "") 84 | parser.feed(html) 85 | # if there are no results exit 86 | if parser.pageResSize <= 0: 87 | break 88 | -------------------------------------------------------------------------------- /python plugins/glotorrents.py: -------------------------------------------------------------------------------- 1 | # VERSION: 1.2 2 | # AUTHORS: LightDestory (https://github.com/LightDestory) 3 | 4 | import re 5 | import urllib.parse 6 | 7 | from helpers import retrieve_url 8 | from novaprinter import prettyPrinter 9 | 10 | 11 | class glotorrents(object): 12 | url = 'https://www.gtdb.to/' 13 | name = 'GloTorrents' 14 | supported_categories = {'all': '0', 'movies': '1', 'tv': '41', 'music': '22', 'games': '10', 'anime': '28', 15 | 'software': '18'} 16 | 17 | # GloTorrents' search divided into pages, so we are going to set a limit on how many pages to read 18 | max_pages = 10 19 | 20 | class HTMLParser: 21 | 22 | def __init__(self, url): 23 | self.url = url 24 | self.pageResSize = 0 25 | 26 | def feed(self, html): 27 | self.pageResSize = 0 28 | torrents = self.__findTorrents(html) 29 | resultSize = len(torrents) 30 | if resultSize == 0: 31 | return 32 | else: 33 | self.pageResSize = resultSize 34 | count = 0 35 | for torrent in range(resultSize): 36 | count = count + 1 37 | data = { 38 | 'link': torrents[torrent][0], 39 | 'name': torrents[torrent][1], 40 | 'size': torrents[torrent][2], 41 | 'seeds': torrents[torrent][3], 42 | 'leech': torrents[torrent][4], 43 | 'engine_url': self.url, 44 | 'desc_link': urllib.parse.unquote(torrents[torrent][0]) 45 | } 46 | prettyPrinter(data) 47 | 48 | def __findTorrents(self, html): 49 | torrents = [] 50 | trs = re.findall( 51 | r'.+?', html) 52 | for tr in trs: 53 | # Extract from the A node all the needed information 54 | url_titles = re.search( 55 | r'.+?title.+?href=\"(.+?)\">(.+?).+?align=\'center\'>([0-9\,\.]+ (TB|GB|MB|KB)).+?([0-9,]+).+?([0-9,]+)', 56 | tr) 57 | if url_titles: 58 | torrents.append( 59 | [urllib.parse.quote('{0}{1}'.format(self.url, url_titles.group(1))), url_titles.group( 60 | 2), url_titles.group(3).replace(",", ""), url_titles.group(5).replace(",", ""), 61 | url_titles.group(6).replace(",", "")]) 62 | return torrents 63 | 64 | def download_torrent(self, info): 65 | torrent_page = retrieve_url(urllib.parse.unquote(info)) 66 | magnet_match = re.search( 67 | r'\"(magnet:.*?)\"', torrent_page) 68 | if magnet_match and magnet_match.groups(): 69 | print('{0} {1}'.format(magnet_match.groups()[0], info)) 70 | else: 71 | raise Exception('Error, please fill a bug report!') 72 | 73 | # DO NOT CHANGE the name and parameters of this function 74 | # This function will be the one called by nova2.py 75 | def search(self, what, cat='all'): 76 | what = what.replace("%20", "+") 77 | parser = self.HTMLParser(self.url) 78 | for currPage in range(0, self.max_pages): 79 | url = '{0}search_results.php?search={1}&cat={2}&page={3}'.format( 80 | self.url, what, self.supported_categories[cat], currPage) 81 | # Some replacements to format the html source 82 | html = retrieve_url(url).replace(" ", "").replace( 83 | "\n", "").replace("\r", "") 84 | 85 | parser.feed(html) 86 | # if there are no results exit 87 | if parser.pageResSize <= 0: 88 | break 89 | -------------------------------------------------------------------------------- /python plugins/ilcorsaronero.py: -------------------------------------------------------------------------------- 1 | # VERSION: 1.2 2 | # AUTHORS: LightDestory (https://github.com/LightDestory) 3 | 4 | import re 5 | import urllib.parse 6 | 7 | from helpers import retrieve_url 8 | from novaprinter import prettyPrinter 9 | 10 | 11 | class ilcorsaronero(object): 12 | url = 'https://ilcorsaronero.link/' 13 | name = 'Il Corsaro Nero' 14 | """ 15 | ***TLDR; It is safer to force an 'all' research*** 16 | IlCorsaroNero's categories are very specific 17 | qBittorrent does not provide enough categories to implement a good filtering. 18 | For example, qBittorrent provides only a generic 'games' category meanwhile the website uses: pc, xbox and so on 19 | """ 20 | supported_categories = {'all': '0'} 21 | # IlCorsaroNero's search divided into pages, so we are going to set a limit on how many pages to read 22 | max_pages = 10 23 | 24 | class HTMLParser: 25 | 26 | def __init__(self, url): 27 | self.url = url 28 | self.pageResSize = 0 29 | 30 | def feed(self, html): 31 | self.pageResSize = 0 32 | torrents = self.__findTorrents(html) 33 | resultSize = len(torrents) 34 | if resultSize == 0: 35 | return 36 | else: 37 | self.pageResSize = resultSize 38 | for torrent in range(resultSize): 39 | data = { 40 | 'link': torrents[torrent][0], 41 | 'name': torrents[torrent][1], 42 | 'size': torrents[torrent][2], 43 | 'seeds': torrents[torrent][3], 44 | 'leech': torrents[torrent][4], 45 | 'engine_url': self.url, 46 | 'desc_link': urllib.parse.unquote(torrents[torrent][0]) 47 | } 48 | prettyPrinter(data) 49 | 50 | def __findTorrents(self, html): 51 | torrents = [] 52 | # Find all TR nodes with class odd or odd2 53 | trs = re.findall(r'.*?', html) 54 | for tr in trs: 55 | # Extract from the A node all the needed information 56 | url_titles = re.search( 57 | r'A class=\"tab\" HREF=\"(.+?)\" >(.+?)?.+?([0-9\.\,]+ (TB|GB|MB|KB)).+?#[0-9a-zA-Z]{6}\'>([0-9,]+)<.+?#[0-9a-zA-Z]{6}\'>([0-9,]+)', 58 | tr) 59 | if url_titles: 60 | name = url_titles.group(2) if url_titles.group( 61 | 2) else url_titles.group(1).split("/")[5] 62 | torrents.append( 63 | [urllib.parse.quote(url_titles.group(1)), name, url_titles.group(3).replace(",", ""), 64 | url_titles.group(5).replace(",", ""), url_titles.group(6).replace(",", "")]) 65 | return torrents 66 | 67 | def download_torrent(self, info): 68 | torrent_page = retrieve_url(urllib.parse.unquote(info)) 69 | magnet_match = re.search( 70 | r'\"(magnet:.*?)\"', torrent_page) 71 | if magnet_match and magnet_match.groups(): 72 | print('{0} {1}'.format(magnet_match.groups()[0], info)) 73 | else: 74 | raise Exception('Error, please fill a bug report!') 75 | 76 | # DO NOT CHANGE the name and parameters of this function 77 | # This function will be the one called by nova2.py 78 | def search(self, what, cat='all'): 79 | parser = self.HTMLParser(self.url) 80 | for currPage in range(0, self.max_pages): 81 | url = '{0}advsearch.php?search={1}&&page={2}'.format( 82 | self.url, what, currPage) 83 | # Some replacements to format the html source 84 | html = retrieve_url(url).replace(" ", "").replace( 85 | "\n", "").replace("\r", "").replace("n/a", "0") 86 | parser.feed(html) 87 | # if there are no results exit 88 | if parser.pageResSize <= 0: 89 | break 90 | -------------------------------------------------------------------------------- /python plugins/magnetdl.py: -------------------------------------------------------------------------------- 1 | #VERSION: 1.3 2 | #AUTHORS: hoanns,nindogo 3 | # magnetdl.com 4 | # first thirty pages 5 | 6 | import re 7 | # qBt 8 | from novaprinter import prettyPrinter 9 | from helpers import retrieve_url 10 | 11 | 12 | # noinspection PyPep8Naming 13 | class magnetdl(object): 14 | url = "http://www.magnetdl.com/" 15 | name = "MagnetDL" 16 | result_page_match = re.compile( 17 | '.*?.*?.*?(.*?)(.*?)(.*?)') 18 | total_results_num = re.compile( 19 | r'', html)[1] 48 | trs = re.findall(r'.+?', html) 49 | for tr in trs: 50 | # Extract from the A node all the needed information 51 | url_titles = re.search( 52 | r'.+?href=\"(.+?)\".+?title=\"(.+?)\".+?([0-9\.\,]+ (TB|GB|MB|kB)).+?sd\">([0-9,]+)<.+?pr\">([0-9,]+)<', 53 | tr) 54 | if url_titles: 55 | torrents.append( 56 | [urllib.parse.quote('{0}{1}'.format(self.url, url_titles.group(1))), url_titles.group( 57 | 2).replace("", "").replace("", ""), url_titles.group(3).replace(",", ""), 58 | url_titles.group(5).replace(",", ""), 59 | url_titles.group(6).replace(",", "")]) 60 | return torrents 61 | 62 | def download_torrent(self, info): 63 | torrent_page = retrieve_url(urllib.parse.unquote(info)) 64 | file_link = re.search( 65 | r'(down/.+?\.torrent)', torrent_page) 66 | if file_link and file_link.groups(): 67 | print(download_file(self.url + file_link.groups()[0])) 68 | else: 69 | raise Exception('Error, please fill a bug report!') 70 | 71 | # DO NOT CHANGE the name and parameters of this function 72 | # This function will be the one called by nova2.py 73 | def search(self, what, cat='all'): 74 | what = what.replace("%20", "-") 75 | parser = self.HTMLParser(self.url) 76 | for currPage in range(1, self.max_pages): 77 | url = '{0}?q={1}&c={2}&page={3}'.format( 78 | self.url, what, self.supported_categories[cat], currPage) 79 | # Some replacements to format the html source 80 | html = retrieve_url(url).replace(" ", "").replace( 81 | "\n", "").replace("\r", "") 82 | parser.feed(html) 83 | # if there are no results exit 84 | if parser.pageResSize <= 0: 85 | break 86 | -------------------------------------------------------------------------------- /python plugins/yts_am.py: -------------------------------------------------------------------------------- 1 | # VERSION: 1.0.1 2 | # AUTHORS: mauricci 3 | 4 | from helpers import download_file, retrieve_url 5 | from novaprinter import prettyPrinter 6 | import json, math 7 | 8 | try: 9 | # python3 10 | from html.parser import HTMLParser 11 | except ImportError: 12 | # python2 13 | from HTMLParser import HTMLParser 14 | 15 | 16 | class yts_am(object): 17 | url = 'https://yts.am/' 18 | name = 'Yts.am' 19 | # category not used, just declared for qbt 20 | supported_categories = {'all': '', 'movies': ''} 21 | 22 | def search(self, what, cat='all'): 23 | page = 1#current page number 24 | limit = 20 # results per page 25 | moviesPages = 10 # actual total number of pages 26 | 27 | while page <= 10 and page <= moviesPages: # max 10 pages 28 | url = self.url + 'api/v2/list_movies.json?query_term={0}&page={1}&limit={2}'.format(what, page, limit) 29 | page += 1 30 | html = retrieve_url(url) 31 | jsonData = json.loads(html) 32 | self.processJson(jsonData) 33 | moviesPages = math.ceil(float(jsonData['data']['movie_count']) / limit) 34 | 35 | def getSingleData(self): 36 | return {'name': '-1', 'seeds': '-1', 'leech': '-1', 'size': '-1', 'link': '-1', 'desc_link': '-1', 37 | 'engine_url': self.url} 38 | 39 | def processJson(self, json): 40 | movieData = self.getSingleData() 41 | for movie in json['data']['movies']: 42 | movieData['name'] = '{} - {}'.format(movie['title'], movie['year']) 43 | movieData['desc_link'] = movie['url'] 44 | for torrent in movie['torrents']: 45 | movieData['seeds'] = torrent['seeds'] 46 | movieData['leech'] = torrent['peers'] 47 | movieData['size'] = torrent['size'] 48 | movieData['link'] = torrent['url'] 49 | prettyPrinter(movieData) 50 | 51 | def download_torrent(self, info): 52 | """ Downloader """ 53 | print(download_file(info)) 54 | 55 | 56 | # script test 57 | if __name__ == "__main__": 58 | y = yts_am() 59 | y.search('tomb%20raider') 60 | --------------------------------------------------------------------------------