├── .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 | 
4 | 
5 | 
6 | 
7 | 
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 |
--------------------------------------------------------------------------------