├── LICENSE ├── README.md ├── backup.sh ├── dunst └── .config │ └── dunst │ ├── dunst_test.sh │ └── dunstrc ├── eww └── .config │ └── eww │ ├── eww.scss │ ├── eww.yuck │ ├── eww.yuck.save │ ├── images │ └── icons │ │ ├── battery.svg │ │ ├── battery_charging.svg │ │ ├── camera.svg │ │ ├── chrome.svg │ │ ├── clock.svg │ │ ├── code.svg │ │ ├── command.svg │ │ ├── cpu.svg │ │ ├── disc.svg │ │ ├── loop.svg │ │ ├── next_song.svg │ │ ├── pause.svg │ │ ├── play.svg │ │ ├── previous_song.svg │ │ ├── settings.svg │ │ ├── shuffle.svg │ │ ├── terminal.svg │ │ ├── video.svg │ │ ├── volume-x.svg │ │ ├── volume.svg │ │ ├── wifi.svg │ │ └── wifi_off.svg │ └── scripts │ ├── check_net │ ├── getvol │ ├── music │ ├── popout │ ├── screenshot │ └── select_layout ├── extra ├── wallpaper.png └── wallpaper.svg ├── fish └── .config │ └── fish │ └── config.fish ├── git └── .config │ └── git │ ├── config │ └── template │ └── hooks │ └── commit-msg ├── i3 ├── .config │ └── i3 │ │ └── config └── .i3 │ └── code.json ├── install.sh ├── kitty └── .config │ └── kitty │ └── kitty.conf ├── neofetch └── .config │ └── neofetch │ └── config.conf ├── nvim └── .config │ └── nvim │ ├── init.vim │ └── lua │ └── plugins.lua ├── picom └── .config │ └── picom.conf └── screenshots ├── 01.png ├── 02.png ├── 03.png ├── 04.png └── 05.png /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Elizabeth Hazel Ainslie 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # My Dotfiles 2 | 3 | Collection of my linux system configs. 4 | 5 | > Use at your own risk, I am not responsible if you fuck up. 6 | 7 | ## Screnshots 8 | 9 | ![02](screenshots/02.png) 10 | ![03](screenshots/03.png) 11 | ![04](screenshots/04.png) 12 | ![05](screenshots/05.png) 13 | 14 | ## To be Paired With... 15 | 16 | - [My Startpage](https://github.com/LizAinslie/startpage) 17 | - [My Firefox Theme](https://github.com/LizAinslie/rice-firefox-theme) 18 | - [My Discord Theme](https://github.com/LizAinslie/rice-discord-theme) 19 | - [My Website Styles](https://github.com/LizAinslie/rice-browser-userstyles) 20 | 21 | ## Installation & Software used 22 | 23 | Below is the software I use and how to get it. Run the included [install script 24 | ](install.sh) to copy the required 25 | config files to their respective locations. 26 | 27 | **Packages:** 28 | | Package | Description | 29 | | --: | --- | 30 | | `fish` | Shell | 31 | | `kitty` | Terminal | 32 | | `i3-gaps-rounded-git` | WM. On the AUR | 33 | | `picom-ibhagwan-git` | Compositor. On the AUR | 34 | | `neofetch` | System stats in terminal | 35 | | `spectacle` | Screenshot tool. I wrote a custom wrapper | 36 | | `firefox` | Browser | 37 | | `feh` | Used to set wallpaper | 38 | | `dmenu` | Launcher | 39 | | `xclip` | For manipulating the clipboard | 40 | | `dunst` | Notification daemon | 41 | | `neovim` | Vim, a text editor | 42 | | `cava` | Terminal oscilloscope graph. On the AUR | 43 | | `eww` | The "bar" | 44 | | `ttf-firacode-nerd` | Patched Fira Code for nvim-tree | 45 | 46 | **Recommended Fonts:** 47 | - Fira Sans 48 | - Fira Mono 49 | - Fira Code 50 | 51 | ## License 52 | 53 | This code is licensed under the [MIT License](LICENSE), Copyright 2023 Elizabeth Hazel Ainslie. 54 | -------------------------------------------------------------------------------- /backup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # backup wallpaper 4 | cp ~/wallpaper.png ./extra/wallpaper.png 5 | 6 | # backup git configs 7 | cp -r ~/.config/git/* ./git/.config/git/ 8 | # remove sensitive values from git config 9 | sed -i '/signingkey/d' ./git/.config/git/config 10 | 11 | # backup fish configs 12 | cp ~/.config/fish/config.fish ./fish/.config/fish/config.fish 13 | 14 | # backup neofetch configs 15 | cp -r ~/.config/neofetch/* ./neofetch/.config/neofetch 16 | 17 | # backup picom config 18 | cp ~/.config/picom.conf ./picom/.config/picom.conf 19 | 20 | # backup i3 config 21 | cp ~/.config/i3/config ./i3/.config/i3/config 22 | cp ~/.i3/* ./i3/.i3/ 23 | 24 | # backup eww configs 25 | cp -r ~/.config/eww/* ./eww/.config/eww/ 26 | 27 | # backup kitty config 28 | cp ~/.config/kitty/kitty.conf ./kitty/.config/kitty/kitty.conf 29 | 30 | # backup neovim configs 31 | cp -r ~/.config/nvim/* ./nvim/.config/nvim/ 32 | 33 | # backup dunst configs 34 | cp -r ~/.config/dunst/* ./dunst/.config/dunst/ 35 | -------------------------------------------------------------------------------- /dunst/.config/dunst/dunst_test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | notify-send "$@" 4 | 5 | -------------------------------------------------------------------------------- /dunst/.config/dunst/dunstrc: -------------------------------------------------------------------------------- 1 | [global] 2 | ### Display ### 3 | monitor = 0 4 | follow = none 5 | 6 | ### Geometry ### 7 | width = (0, 600) 8 | height = 300 9 | origin = bottom-right 10 | offset = 10x50 11 | scale = 0 12 | notification_limit = 0 13 | 14 | ### Progress bar ### 15 | progress_bar = true 16 | progress_bar_height = 5 17 | progress_bar_frame_width = 1 18 | progress_bar_min_width = 150 19 | progress_bar_max_width = 300 20 | indicate_hidden = yes 21 | transparency = 0 22 | separator_height = 2 23 | padding = 8 24 | horizontal_padding = 8 25 | text_icon_padding = 0 26 | frame_width = 1 27 | frame_color = "#22272e" 28 | gap_size = 0 29 | separator_color = "#2d333b" 30 | sort = yes 31 | 32 | ### Text ### 33 | font = "Fira Sans 12" 34 | line_height = 12 35 | markup = full 36 | 37 | # The format of the message. Possible variables are: 38 | # %a appname 39 | # %s summary 40 | # %b body 41 | # %i iconname (including its path) 42 | # %I iconname (without its path) 43 | # %p progress value if set ([ 0%] to [100%]) or nothing 44 | # %n progress value if set without any extra characters 45 | # %% Literal % 46 | 47 | format = "%s: %b" 48 | alignment = left 49 | vertical_alignment = center 50 | show_age_threshold = 60 51 | ellipsize = middle 52 | ignore_newline = no 53 | stack_duplicates = true 54 | hide_duplicate_count = false 55 | show_indicators = yes 56 | 57 | ### Icons ### 58 | enable_recursive_icon_lookup = true 59 | icon_theme = Adwaita 60 | icon_position = left 61 | min_icon_size = 24 62 | max_icon_size = 24 63 | icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/ 64 | 65 | ### History ### 66 | sticky_history = yes 67 | history_length = 20 68 | 69 | ### Misc/Advanced ### 70 | dmenu = /usr/bin/dmenu -p dunst: 71 | browser = /usr/bin/xdg-open 72 | always_run_script = true 73 | title = Dunst 74 | class = Dunst 75 | corner_radius = 5 76 | ignore_dbusclose = false 77 | force_xinerama = false 78 | 79 | ### mouse 80 | mouse_right_click = close_current 81 | mouse_left_click = open_url, do_action, close_current 82 | mouse_middle_click = close_all 83 | 84 | [experimental] 85 | per_monitor_dpi = false 86 | 87 | [urgency_low] 88 | background = "#22272e" 89 | foreground = "#ffffff" 90 | timeout = 10 91 | # Icon for notifications with low urgency, uncomment to enable 92 | #default_icon = /path/to/icon 93 | 94 | [urgency_normal] 95 | background = "#22272e" 96 | foreground = "#ffffff" 97 | timeout = 10 98 | # Icon for notifications with normal urgency, uncomment to enable 99 | #default_icon = /path/to/icon 100 | 101 | [urgency_critical] 102 | background = "#22272e" 103 | foreground = "#ffffff" 104 | # frame_color = "#ff0000" 105 | timeout = 0 106 | # Icon for notifications with critical urgency, uncomment to enable 107 | #default_icon = /path/to/icon 108 | 109 | # Messages can be matched by 110 | # appname (discouraged, see desktop_entry) 111 | # body 112 | # category 113 | # desktop_entry 114 | # icon 115 | # match_transient 116 | # msg_urgency 117 | # stack_tag 118 | # summary 119 | # 120 | # and you can override the 121 | # background 122 | # foreground 123 | # format 124 | # frame_color 125 | # fullscreen 126 | # new_icon 127 | # set_stack_tag 128 | # set_transient 129 | # set_category 130 | # timeout 131 | # urgency 132 | # icon_position 133 | # skip_display 134 | # history_ignore 135 | # action_name 136 | # word_wrap 137 | # ellipsize 138 | # alignment 139 | # hide_text 140 | # 141 | # Shell-like globbing will get expanded. 142 | # 143 | # Instead of the appname filter, it's recommended to use the desktop_entry filter. 144 | # GLib based applications export their desktop-entry name. In comparison to the appname, 145 | # the desktop-entry won't get localized. 146 | # 147 | # SCRIPTING 148 | # You can specify a script that gets run when the rule matches by 149 | # setting the "script" option. 150 | # The script will be called as follows: 151 | # script appname summary body icon urgency 152 | # where urgency can be "LOW", "NORMAL" or "CRITICAL". 153 | # 154 | # NOTE: It might be helpful to run dunst -print in a terminal in order 155 | # to find fitting options for rules. 156 | 157 | # Disable the transient hint so that idle_threshold cannot be bypassed from the 158 | # client 159 | #[transient_disable] 160 | # match_transient = yes 161 | # set_transient = no 162 | # 163 | # Make the handling of transient notifications more strict by making them not 164 | # be placed in history. 165 | #[transient_history_ignore] 166 | # match_transient = yes 167 | # history_ignore = yes 168 | 169 | # fullscreen values 170 | # show: show the notifications, regardless if there is a fullscreen window opened 171 | # delay: displays the new notification, if there is no fullscreen window active 172 | # If the notification is already drawn, it won't get undrawn. 173 | # pushback: same as delay, but when switching into fullscreen, the notification will get 174 | # withdrawn from screen again and will get delayed like a new notification 175 | #[fullscreen_delay_everything] 176 | # fullscreen = delay 177 | 178 | #[script-test] 179 | # summary = "*script*" 180 | # script = dunst_test.sh 181 | 182 | #[ignore] 183 | # # This notification will not be displayed 184 | # summary = "foobar" 185 | # skip_display = true 186 | 187 | #[history-ignore] 188 | # # This notification will not be saved in history 189 | # summary = "foobar" 190 | # history_ignore = yes 191 | 192 | #[skip-display] 193 | # # This notification will not be displayed, but will be included in the history 194 | # summary = "foobar" 195 | # skip_display = yes 196 | 197 | #[signed_on] 198 | # appname = Pidgin 199 | # summary = "*signed on*" 200 | # urgency = low 201 | 202 | #[signed_off] 203 | # appname = Pidgin 204 | # summary = *signed off* 205 | # urgency = low 206 | 207 | #[says] 208 | # appname = Pidgin 209 | # summary = *says* 210 | # urgency = critical 211 | 212 | #[twitter] 213 | # appname = Pidgin 214 | # summary = *twitter.com* 215 | # urgency = normal 216 | 217 | #[stack-volumes] 218 | # appname = "some_volume_notifiers" 219 | # set_stack_tag = "volume" 220 | 221 | [spotify] 222 | appname = "Spotify" 223 | 224 | [image_uploader] 225 | summary = Image Uploader 226 | body = Uploaded: * 227 | 228 | 229 | # vim: ft=cfg 230 | 231 | -------------------------------------------------------------------------------- /eww/.config/eww/eww.scss: -------------------------------------------------------------------------------- 1 | $background_base: #22272e; 2 | $background_accent: #2d333b; 3 | 4 | $theme: #a97594; 5 | $theme_text: saturate(lighten($theme, 10%), 40%); 6 | 7 | $muted: #373e47; 8 | 9 | .battery { 10 | &.charging { 11 | color: $theme_text; 12 | } 13 | 14 | .label { 15 | padding-left: 10px; 16 | } 17 | } 18 | 19 | .clock { 20 | all: unset; 21 | min-width: 100px; 22 | font-family: monospace; 23 | 24 | image { 25 | margin-right: 5px; 26 | } 27 | 28 | .separator { 29 | color: $theme_text; 30 | font-weight: 900; 31 | } 32 | } 33 | 34 | .network { 35 | font-weight: bold; 36 | 37 | .label { 38 | padding-right: 10px; 39 | } 40 | } 41 | 42 | .music_status { 43 | all: unset; 44 | font-weight: bold; 45 | font-family: cursive; 46 | 47 | .separator { 48 | font-weight: 900; 49 | color: $theme_text; 50 | } 51 | 52 | &:hover { 53 | background-color: $background_accent; 54 | } 55 | } 56 | 57 | .background { 58 | background-color: transparent; 59 | } 60 | 61 | .main { 62 | padding: 10px 10px 0 10px; 63 | } 64 | 65 | .panel { 66 | all: unset; 67 | background-color: $background_base; 68 | border-radius: 5px; 69 | color: #fff; 70 | padding: 5px 10px; 71 | } 72 | 73 | .button_panel { 74 | all: unset; 75 | font-weight: bold; 76 | background-color: $background_base; 77 | border-radius: 5px; 78 | color: #fff; 79 | } 80 | 81 | .btn { 82 | all: unset; 83 | padding: 5px 10px; 84 | background-color: transparent; 85 | 86 | &.active { 87 | background-color: $theme; 88 | } 89 | 90 | &:not(.active):hover { 91 | background-color: $background_accent; 92 | } 93 | 94 | &:first-child { 95 | border-top-left-radius: 5px; 96 | border-bottom-left-radius: 5px; 97 | } 98 | 99 | &:last-child { 100 | border-top-right-radius: 5px; 101 | border-bottom-right-radius: 5px; 102 | } 103 | } 104 | 105 | .metric { 106 | all: unset; 107 | font-weight: bold; 108 | background-color: $background_base; 109 | border-radius: 5px; 110 | color: #fff; 111 | 112 | .label { 113 | padding: 5px 10px; 114 | border-top-left-radius: 5px; 115 | border-bottom-left-radius: 5px; 116 | } 117 | 118 | .value { 119 | margin-right: -50px; 120 | } 121 | 122 | 123 | &.left { 124 | scale { 125 | margin-right: 0; 126 | margin-left: 3px; 127 | } 128 | 129 | .value { 130 | margin-right: 0; 131 | margin-left: -100px; 132 | } 133 | } 134 | 135 | scale { 136 | all: unset; 137 | margin-right: 3px; 138 | 139 | trough { 140 | all: unset; 141 | background-color: $background_accent; 142 | border-radius: 2px; 143 | min-height: 24px; 144 | min-width: 100px; 145 | 146 | slider { 147 | all: unset; 148 | } 149 | 150 | highlight { 151 | all: unset; 152 | background-color: $theme; 153 | color: #000000; 154 | border-radius: 2px; 155 | } 156 | } 157 | } 158 | } 159 | 160 | * { 161 | font-family: "Fira Sans", sans-serif; 162 | } 163 | 164 | .actions { 165 | background-color: $background_accent; 166 | border: 3px solid $background_base; 167 | border-radius: 5px; 168 | color: #ffffff; 169 | padding: 5px; 170 | 171 | .heading { 172 | font-size: 17px; 173 | font-weight: normal; 174 | padding-left: 5px; 175 | padding-right: 5px; 176 | 177 | &:not(:first-child) { 178 | margin-top: 10px; 179 | } 180 | } 181 | 182 | .action { 183 | all: unset; 184 | padding: 5px 10px; 185 | background-color: $background_base; 186 | border-radius: 5px; 187 | border: 2px solid transparent; 188 | 189 | &:hover { 190 | background-color: transparent; 191 | border: 2px solid $background_base; 192 | } 193 | } 194 | } 195 | -------------------------------------------------------------------------------- /eww/.config/eww/eww.yuck: -------------------------------------------------------------------------------- 1 | ;;;;;; 2 | ; Battery Meter 3 | ;;;;;; 4 | 5 | (defvar battery_reveal false) 6 | (defwidget battery_meter [] 7 | (eventbox 8 | :onhover "eww update battery_reveal=true" 9 | :onhoverlost "eww update battery_reveal=false" 10 | (box 11 | :class "metric left" 12 | :space-evenly false 13 | (revealer 14 | :transition "slideleft" 15 | :reveal {battery_reveal} 16 | :duration "350ms" 17 | (box :space-evenly false 18 | (scale 19 | :min 0 20 | :max 100 21 | :active false 22 | :flipped true 23 | :value {EWW_BATTERY.BAT0.capacity} 24 | ) 25 | (label :class "value" :text "${EWW_BATTERY.BAT0.capacity}%") 26 | ) 27 | ) 28 | (box 29 | :class "label" 30 | (image 31 | :path "${"${EWW_BATTERY.BAT0.status}" == "Charging" 32 | ? "images/icons/battery_charging.svg" 33 | : "images/icons/battery.svg"}" 34 | :image-height 20 :image-width 20 35 | ) 36 | ) 37 | ) 38 | ) 39 | ) 40 | 41 | (defwidget oldbatteryicon [] 42 | (box :class "icon" :width 50 43 | (box :class "icon_inner" :width (EWW_BATTERY.BAT0.capacity / 2)) 44 | ) 45 | ) 46 | 47 | ;;;;;; 48 | ; CPU Metric 49 | ;;;;;; 50 | 51 | (defvar cpu_reveal false) 52 | (defwidget cpu_meter [] 53 | (eventbox 54 | :onhover "eww update cpu_reveal=true" 55 | :onhoverlost "eww update cpu_reveal=false" 56 | (box 57 | :class "metric left" 58 | :space-evenly false 59 | (revealer 60 | :transition "slideleft" 61 | :reveal {cpu_reveal} 62 | :duration "350ms" 63 | (box :space-evenly false 64 | (scale 65 | :min 0 66 | :max 100 67 | :active false 68 | :flipped true 69 | :value {EWW_CPU.avg} 70 | ) 71 | (label :class "value" :text "${round(EWW_CPU.avg, 1)}%") 72 | ) 73 | ) 74 | (box 75 | :class "label" 76 | (image 77 | :path "images/icons/cpu.svg" 78 | :image-height 20 :image-width 20 79 | ) 80 | ) 81 | ) 82 | ) 83 | ) 84 | 85 | 86 | ;;;;;; 87 | ; Workspace Switcher 88 | ;;;;;; 89 | 90 | (defvar workspaces "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]") 91 | (defpoll current_ws 92 | :interval "250ms" 93 | `i3-msg -t get_workspaces | jq -r '.[] | select(.focused).name'`) 94 | (defwidget workspace_switcher [] 95 | (box :class "button_panel" :orientation "h" 96 | (for ws in workspaces 97 | (button 98 | :class "btn ${ws == current_ws ? "active" : ""}" 99 | :onclick "i3-msg workspace ${ws}" 100 | ws 101 | ) 102 | ) 103 | ) 104 | ) 105 | 106 | ;;;;;; 107 | ; Clock 108 | ;;;;;; 109 | 110 | (defpoll seconds :interval "1s" `date '+%S'`) 111 | (defpoll minutes :interval "1s" `date '+%M'`) 112 | (defpoll hours :interval "1m" `date '+%H'`) 113 | 114 | (defwidget clock [] 115 | (box :class "panel clock" 116 | (image 117 | :path "images/icons/clock.svg" 118 | :image-width 20 :image-height 20 119 | ) 120 | hours 121 | (label :text ":" :class "separator") 122 | minutes 123 | (label :text ":" :class "separator") 124 | seconds 125 | ) 126 | ) 127 | 128 | ;;;;;; 129 | ; Network Metric 130 | ;;;;;; 131 | 132 | (defpoll ssid 133 | :initial "Offline" 134 | :interval "5s" `scripts/check_net --stat`) 135 | (defpoll net_icon 136 | :initial "images/icons/wifi_off.svg" 137 | :interval "5s" `scripts/check_net --icon`) 138 | (defvar net_reveal false) 139 | (defwidget network [] 140 | (eventbox 141 | :onhover "eww update net_reveal=true" 142 | :onhoverlost "eww update net_reveal=false" 143 | (box :class "panel network" :space-evenly false 144 | (revealer 145 | :transition "slideleft" 146 | :reveal {net_reveal} 147 | :duration "350ms" 148 | (label :text {ssid} :class "label") 149 | ) 150 | (image :path net_icon :image-width 20 :image-height 20) 151 | ) 152 | ) 153 | ) 154 | 155 | ;;;;;; 156 | ; Music 157 | ;;;;;; 158 | 159 | (defpoll song :interval "1s" `scripts/music --song`) 160 | (defpoll artist :interval "1s" `scripts/music --artist`) 161 | (defpoll shuffle_status :interval "250ms" `scripts/music --get-shuffle`) 162 | (defpoll play_status :interval "250ms" `scripts/music --status`) 163 | (defpoll loop_status :interval "250ms" `scripts/music --loop-get`) 164 | (defwidget music [] 165 | (button :class "music_status panel" :onclick "scripts/popout music" 166 | (box :space-evenly false :spacing 5 167 | (image 168 | :path "images/icons/disc.svg" 169 | :image-width 20 :image-height 20 170 | ) 171 | song 172 | (label :text "-" :class "separator") 173 | artist 174 | ) 175 | ) 176 | ) 177 | (defwidget music_controls [] 178 | (box :class "button_panel" 179 | (button 180 | :class "btn ${shuffle_status == "On" ? "active" : ""}" 181 | :onclick "scripts/music --shuffle" 182 | (image 183 | :path "images/icons/shuffle.svg" 184 | :image-width 20 :image-height 20 185 | ) 186 | ) 187 | 188 | (button :class "btn" :onclick "scripts/music --previous" 189 | (image 190 | :path "images/icons/previous_song.svg" 191 | :image-width 20 :image-height 20 192 | ) 193 | ) 194 | 195 | (button :class "btn" :onclick "scripts/music --toggle" 196 | (image 197 | :path "${play_status == "Playing" 198 | ? "images/icons/pause.svg" 199 | : "images/icons/play.svg"}" 200 | :image-width 20 :image-height 20 201 | ) 202 | ) 203 | 204 | (button :class "btn" :onclick "scripts/music --next" 205 | (image 206 | :path "images/icons/next_song.svg" 207 | :image-width 20 :image-height 20 208 | ) 209 | ) 210 | 211 | (button 212 | :class "btn ${loop_status == "Track" ? "active" : ""}" 213 | :onclick {loop_status == "Track" 214 | ? "scripts/music --loop-off" 215 | : "scripts/music --loop-on"} 216 | (image 217 | :path "images/icons/loop.svg" 218 | :image-width 20 :image-height 20 219 | ) 220 | ) 221 | ) 222 | ) 223 | 224 | ;;;;;; 225 | ; Static Metric (Deprecated) 226 | ;;;;;; 227 | 228 | (defwidget static_metric [value onchange] 229 | (box :orientation "h" :class "metric" :space-evenly false 230 | (box :class "label" (children)) 231 | (scale 232 | :min 0 233 | :max 101 234 | :active {onchange != ""} 235 | :value value 236 | :onchange onchange 237 | ) 238 | ) 239 | ) 240 | 241 | ;;;;;; 242 | ; Volume Control 243 | ;;;;;; 244 | 245 | ; A dynamic volume control that opens & closes with hover 246 | (defvar volume_reveal false) 247 | (defpoll volume :interval "50ms" `scripts/getvol`) 248 | (defwidget volume [] 249 | (eventbox 250 | :onhover "eww update volume_reveal=true" 251 | :onhoverlost "eww update volume_reveal=false" 252 | (box 253 | :orientation "h" 254 | :class "metric left" 255 | :space-evenly false 256 | (revealer 257 | :transition "slideleft" 258 | :reveal {volume_reveal} 259 | :duration "350ms" 260 | (box :space-evenly false 261 | (scale 262 | :min 0 263 | :max 101 264 | :active true 265 | :flipped true 266 | :value {volume + 0} 267 | :onchange "wpctl set-volume @DEFAULT_SINK@ {}%" 268 | ) 269 | (label :class "value" :text "${volume + 0}%") 270 | ) 271 | ) 272 | (box 273 | :class "label" 274 | 275 | (image 276 | :path {volume == 0 277 | ? "images/icons/volume-x.svg" 278 | : "images/icons/volume.svg"} 279 | :image-width 20 280 | :image-height 20 281 | ) 282 | ) 283 | ) 284 | ) 285 | ) 286 | 287 | (defvar music_controls_reveal false) 288 | (defvar actions_open false) 289 | (defvar settings_open false) 290 | (defwindow bar :monitor 0 :windowtype "dock" :wm-ignore false :stacking "fg" 291 | :geometry (geometry 292 | :x "0%" 293 | :y "0%" 294 | :width "100%" 295 | :height "30px" 296 | :anchor "top center" 297 | ) 298 | :reserve (struts 299 | :distance "30px" 300 | :side "top" 301 | ) 302 | (centerbox :orientation "h" 303 | (box 304 | :class "main" 305 | :spacing "10" 306 | :space-evenly false 307 | :halign "start" 308 | (box 309 | :class "button_panel" 310 | (button 311 | :class "btn ${actions_open ? "active" : ""}" 312 | :onclick "scripts/popout actions" 313 | (image 314 | :path "images/icons/command.svg" 315 | :image-width 20 :image-height 20 316 | ) 317 | ) 318 | ) 319 | (workspace_switcher) 320 | ) 321 | (box :class "main" :spacing "10" :space-evenly false :hexpand true 322 | (music) 323 | (revealer 324 | :transition "slideright" 325 | :reveal {music_controls_reveal} 326 | :duration "350ms" 327 | (music_controls) 328 | ) 329 | ) 330 | (box :class "main" :spacing "10" :space-evenly false :halign "end" 331 | (volume) 332 | (network) 333 | (cpu_meter) 334 | (battery_meter) 335 | (clock) 336 | (box 337 | :class "button_panel" 338 | (button :class "btn" 339 | (image 340 | :path "images/icons/settings.svg" 341 | :image-width 20 :image-height 20 342 | ) 343 | ) 344 | ) 345 | ) 346 | ) 347 | ) 348 | 349 | (defwindow about :monitor 0 350 | :geometry (geometry 351 | :x "0%" 352 | :y "30px" 353 | :width "600px" 354 | :height "400px" 355 | :anchor "center" 356 | ) 357 | (box :class "about" :space-evenly false 358 | (label :text "About this machine" :class "aboutHeading") 359 | ) 360 | ) 361 | 362 | (defwindow actions :monitor 0 :wm-ignore true :stacking "fg" 363 | :geometry (geometry 364 | :x "10px" 365 | :y "50px" 366 | :width "150px" 367 | :height "300px" 368 | :anchor "top left" 369 | ) 370 | 371 | (box :class "actions" :orientation "v" :space-evenly false :spacing 5 372 | (label :text "Actions" :halign "start" :class "heading") 373 | (button :class "action" :hexpand true :onclick "google-chrome-stable &" 374 | (box :space-evenly false :spacing 5 375 | (image 376 | :path "images/icons/chrome.svg" 377 | :image-width 20 :image-height 20 378 | ) 379 | "Open Chrome" 380 | ) 381 | ) 382 | 383 | (button :class "action" :hexpand true :onclick "kitty &" 384 | (box :space-evenly false :spacing 5 385 | (image 386 | :path "images/icons/terminal.svg" 387 | :image-width 20 :image-height 20 388 | ) 389 | "New Terminal" 390 | ) 391 | ) 392 | 393 | (button :class "action" :hexpand true :onclick "scripts/screenshot &" 394 | (box :space-evenly false :spacing 5 395 | (image 396 | :path "images/icons/camera.svg" 397 | :image-width 20 :image-height 20 398 | ) 399 | "Take Screenshot" 400 | ) 401 | ) 402 | 403 | (button :class "action" :hexpand true :onclick "peek &" 404 | (box :space-evenly false :spacing 5 405 | (image 406 | :path "images/icons/video.svg" 407 | :image-width 20 :image-height 20 408 | ) 409 | "Record GIF" 410 | ) 411 | ) 412 | 413 | 414 | (label :text "Layouts" :halign "start" :class "heading") 415 | 416 | (button 417 | :class "action" 418 | :hexpand true 419 | :onclick "scripts/select_layout code" 420 | (box :space-evenly false :spacing 5 421 | (image 422 | :path "images/icons/code.svg" 423 | :image-width 20 :image-height 20 424 | ) 425 | "Code" 426 | ) 427 | ) 428 | 429 | ) 430 | ) 431 | 432 | 433 | -------------------------------------------------------------------------------- /eww/.config/eww/eww.yuck.save: -------------------------------------------------------------------------------- 1 | (defwidget battery_meter [] 2 | (box :class "battery panel" :space-evenly false :spacing 10 3 | (image 4 | :path "${"${EWW_BATTERY.BAT0.status}" == "Charging" 5 | ? "images/icons/battery_charging.svg" 6 | : "images/icons/battery.svg"}" 7 | :image-height 20 :image-width 20) 8 | "${EWW_BATTERY.BAT0.capacity}%" 9 | ) 10 | ) 11 | 12 | (defwidget oldbatteryicon [] 13 | (box :class "icon" :width 50 14 | (box :class "icon_inner" :width (EWW_BATTERY.BAT0.capacity / 2)) 15 | ) 16 | ) 17 | 18 | (defvar workspaces "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]") 19 | (defpoll current_ws :interval "250ms" `i3-msg -t get_workspaces | jq -r '.[] | select(.focused).name'`) 20 | 21 | (defwidget workspace_switcher [] 22 | (box :class "button_panel" :orientation "h" 23 | (for ws in workspaces 24 | (button :class "btn ${ws == current_ws ? "active" : ""}" :onclick "i3-msg workspace ${ws}" 25 | ws 26 | ) 27 | ) 28 | ) 29 | ) 30 | 31 | (defpoll minutes :interval "10s" `date '+%M'`) 32 | (defpoll hours :interval "10s" `date '+%H'`) 33 | 34 | (defwidget clock [] 35 | (box :class "clock panel" 36 | hours 37 | (label :text ":" :class "separator") 38 | minutes 39 | ) 40 | ) 41 | 42 | (defpoll ssid :initial "Offline" :interval "5s" `scripts/check_net --stat`) 43 | (defpoll net_icon :initial "images/icons/wifi_off.svg" :interval "5s" `scripts/check_net --icon`) 44 | 45 | (defwidget network [] 46 | (button :class "network panel" :onclick "nmcli networking ${ssid == "Offline" ? "on" : "off"}" 47 | (box :class "network_inner" :space-evenly false :spacing 5 48 | (image :path net_icon :image-width 20 :image-height 20) 49 | ssid 50 | ) 51 | ) 52 | ) 53 | 54 | (defpoll song :interval "1s" `scripts/music --song`) 55 | (defpoll artist :interval "1s" `scripts/music --artist`) 56 | (defpoll shuffle_status :interval "250ms" `scripts/music --get-shuffle`) 57 | (defpoll play_status :interval "250ms" `scripts/music --status`) 58 | (defpoll loop_status :interval "250ms" `scripts/music --loop-get`) 59 | 60 | (defwidget music [] 61 | (box :space-evenly false :spacing 10 62 | (box :class "button_panel" 63 | (button :class "btn ${shuffle_status == "On" ? "active" : ""}" :onclick "scripts/music --shuffle" 64 | (image :path "images/icons/shuffle.svg" :image-width 20 :image-height 20) 65 | ) 66 | 67 | (button :class "btn" :onclick "scripts/music --previous" 68 | (image :path "images/icons/previous_song.svg" :image-width 20 :image-height 20) 69 | ) 70 | 71 | (button :class "btn" :onclick "scripts/music --toggle" 72 | (image 73 | :path "${play_status == "Playing" 74 | ? "images/icons/pause.svg" 75 | : "images/icons/play.svg"}" 76 | :image-width 20 :image-height 20) 77 | ) 78 | 79 | (button :class "btn" :onclick "scripts/music --next" 80 | (image :path "images/icons/next_song.svg" :image-width 20 :image-height 20) 81 | ) 82 | 83 | (button 84 | :class "btn ${loop_status == "Track" ? "active" : ""}" 85 | :onclick "scripts/music ${loop_status == "Track" ? "--loop-off" : "--loop-on"}" 86 | (image :path "images/icons/loop.svg" :image-width 20 :image-height 20) 87 | ) 88 | ) 89 | (box :class "music_status panel" :space-evenly false :spacing 5 90 | (image :path "images/icons/disc.svg" :image-width 20 :image-height 20) 91 | song 92 | (label :text "-" :class "separator") 93 | artist 94 | ) 95 | ) 96 | ) 97 | 98 | (defwidget metric [value onchange] 99 | (box :orientation "h" :class "metric" :space-evenly false 100 | (box :class "label" (children)) 101 | (scale :min 0 :max 101 :active {onchange != ""} :value value :onchange onchange) 102 | ) 103 | ) 104 | 105 | 106 | 107 | (defpoll volume :interval "250ms" `scripts/getvol`) 108 | 109 | (defwindow bar :monitor 0 :windowtype "dock" :wm-ignore false :stacking "fg" 110 | :geometry (geometry :x "0%" :y "0%" :width "100%" :height "30px" :anchor "top center") 111 | :reserve (struts :distance "30px" :side "top") 112 | (box :class "main" :spacing "10" :space-evenly false 113 | (clock) 114 | (workspace_switcher) 115 | (battery_meter) 116 | (network) 117 | (metric :value {volume + 0} :onchange "wpctl set-volume @DEFAULT_SINK@ {}%" 118 | (image :path "images/icons/volume.svg" :image-width 20 :image-height 20) 119 | ) 120 | (music) 121 | ) 122 | ) 123 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/battery.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/battery_charging.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/camera.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/chrome.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/clock.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/code.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/command.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/cpu.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/disc.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/loop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/next_song.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/pause.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/play.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/previous_song.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/settings.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/shuffle.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/terminal.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/video.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/volume-x.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/volume.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/wifi.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /eww/.config/eww/images/icons/wifi_off.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /eww/.config/eww/scripts/check_net: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | count=0 4 | 5 | ID="$(ip link | awk '/state UP/ {print $2}')" 6 | SSID="$(iwgetid -r)" 7 | 8 | net_stat () { 9 | if (ping -c 1 archlinux.org || ping -c 1 google.com || ping -c 1 bitbucket.org || ping -c 1 github.com || ping -c 1 sourceforge.net) &>/dev/null; then 10 | if [[ $ID == e* ]]; then 11 | echo "Online" 12 | echo "images/icons/wifi.svg" 13 | else 14 | echo "$SSID" 15 | echo "images/icons/wifi.svg" 16 | fi 17 | else 18 | echo "Offline" 19 | echo "images/icons/wifi_off.svg" 20 | fi 21 | } 22 | 23 | if [[ $1 == '--stat' ]]; then 24 | net_stat | head -n1 25 | elif [[ $1 == '--icon' ]]; then 26 | net_stat | tail -n1 27 | fi 28 | -------------------------------------------------------------------------------- /eww/.config/eww/scripts/getvol: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | machine_num="$(wpctl get-volume @DEFAULT_SINK@ | tr -d -c 0-9)" 4 | echo $((10#$machine_num)) 5 | 6 | -------------------------------------------------------------------------------- /eww/.config/eww/scripts/music: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [[ "$1" == "--song" ]]; then 4 | playerctl --player=spotify metadata title | cut -c -80 5 | elif [[ "$1" == "--artist" ]]; then 6 | playerctl --player=spotify metadata artist | cut -c -80 7 | elif [[ "$1" == "--status" ]]; then 8 | playerctl --player=spotify status 9 | elif [[ "$1" == "--get-shuffle" ]]; then 10 | playerctl --player=spotify shuffle 11 | elif [[ "$1" == "--shuffle" ]]; then 12 | playerctl --player=spotify shuffle Toggle 13 | elif [[ "$1" == "--toggle" ]]; then 14 | playerctl --player=spotify play-pause 15 | elif [[ "$1" == "--next" ]]; then 16 | playerctl --player=spotify next 17 | elif [[ "$1" == "--previous" ]]; then 18 | playerctl --player=spotify previous 19 | elif [[ "$1" == "--loop-get" ]]; then 20 | playerctl --player=spotify loop 21 | elif [[ "$1" == "--loop-off" ]]; then 22 | playerctl --player=spotify loop Playlist 23 | elif [[ "$1" == "--loop-on" ]]; then 24 | playerctl --player=spotify loop Track 25 | fi 26 | -------------------------------------------------------------------------------- /eww/.config/eww/scripts/popout: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | actions() { 4 | LOCK_FILE="$HOME/.cache/eww-actions.lock" 5 | 6 | run() { 7 | eww open actions 8 | } 9 | 10 | if [[ ! -f "$LOCK_FILE" ]]; then 11 | touch "$LOCK_FILE" 12 | eww update actions_open=true 13 | run && echo "opened actions" 14 | else 15 | eww close actions 16 | eww update actions_open=false 17 | rm "$LOCK_FILE" && echo "closed actions" 18 | fi 19 | } 20 | 21 | music() { 22 | LOCK_FILE="$HOME/.cache/eww-music.lock" 23 | 24 | run() { 25 | eww update music_controls_reveal=true 26 | } 27 | 28 | if [[ ! -f "$LOCK_FILE" ]]; then 29 | touch "$LOCK_FILE" 30 | run && echo "opened music" 31 | else 32 | eww update music_controls_reveal=false 33 | rm "$LOCK_FILE" && echo "closed music" 34 | fi 35 | } 36 | 37 | 38 | if [ "$1" = "actions" ]; then 39 | actions 40 | elif [ "$1" = "music" ]; then 41 | music 42 | #elif [ "$1" = "audio" ]; then 43 | #audio 44 | fi 45 | 46 | 47 | -------------------------------------------------------------------------------- /eww/.config/eww/scripts/screenshot: -------------------------------------------------------------------------------- 1 | /home/lizzy/screenshot.sh -------------------------------------------------------------------------------- /eww/.config/eww/scripts/select_layout: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [[ "$1" == "code" ]]; then 4 | i3-msg "append_layout /home/lizzy/.i3/code.json" 5 | kitty ~/code -e /usr/bin/fish & 6 | kitty -e /usr/bin/fish -c 'cava' & 7 | kitty ~/code -e /usr/bin/fish & 8 | kitty ~/code -e /usr/bin/fish & 9 | # elif [[ "$1" == "" ]]; then 10 | # 11 | fi 12 | -------------------------------------------------------------------------------- /extra/wallpaper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LizAinslie/dotfiles/35aad8ccfc2007f9400048cabbc78e791cfad5a4/extra/wallpaper.png -------------------------------------------------------------------------------- /extra/wallpaper.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /fish/.config/fish/config.fish: -------------------------------------------------------------------------------- 1 | if status is-interactive 2 | # Commands to run in interactive sessions can go here 3 | end 4 | 5 | set -x GPG_TTY (tty) 6 | gpg-connect-agent updatestartuptty /bye >/dev/null 7 | 8 | 9 | function fish_prompt 10 | printf '[%s%s%s@%s %s%s%s]%s%s%s %% ' (set_color yellow) $USER (set_color green) $hostname (set_color blue) (prompt_pwd) (set_color normal) (set_color brblue) (fish_git_prompt) (set_color normal) 11 | end 12 | 13 | # yarn 14 | set -gx PATH "$(yarn global bin)" $PATH 15 | # end yarn 16 | 17 | # pnpm 18 | set -gx PNPM_HOME "/home/lizzy/.local/share/pnpm" 19 | set -gx PATH "$PNPM_HOME" $PATH 20 | # pnpm end 21 | -------------------------------------------------------------------------------- /git/.config/git/config: -------------------------------------------------------------------------------- 1 | [commit] 2 | gpgsign = true 3 | 4 | [user] 5 | name = Liz Ainslie 6 | email = lizainslie16@gmail.com 7 | 8 | [core] 9 | editor = nvim 10 | autocrlf = input 11 | 12 | [init] 13 | defaultBranch = main 14 | templatedir = /home/lizzy/.config/git/template 15 | 16 | [alias] 17 | # Nice and compact log 18 | l = log --graph --decorate --pretty=format:'%C(auto)%h %Cblue%ad %Cred%aN %C(auto)%d %n %s' --date=human 19 | -------------------------------------------------------------------------------- /git/.config/git/template/hooks/commit-msg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | """ 4 | Git commit hook 5 | Check commit message according to BEURK commit guidelines 6 | """ 7 | 8 | import sys, os, re 9 | from subprocess import call 10 | 11 | sys.stdin = open("/dev/tty", "r") 12 | valid_commit_types = ['feat', 'fix', 'docs', 'style', 'refactor', 'perf', 'test', 'chore'] 13 | 14 | is_piped = True if len(sys.argv) == 1 else False 15 | editor = os.environ.get('VISUAL', 'nvim') 16 | 17 | def bad_commit(errmsg, line=""): 18 | sys.stderr.write("\nThe following line does not follow our " 19 | "guidelines:\n%s\n" % line) 20 | sys.stderr.write("\n%s\n" % errmsg) 21 | if is_piped: 22 | sys.exit(1) 23 | raise SyntaxError(errmsg) 24 | 25 | while True: 26 | commit = sys.stdin if is_piped else open(sys.argv[1], 'r') 27 | try: 28 | lines = commit.read().splitlines() 29 | # abracadabra: remove all comments from the list of lines ;) 30 | lines = [l for l in lines if not l.startswith("#")] 31 | 32 | if len(lines) == 0: 33 | bad_commit(commit, "Empty commit message") 34 | 35 | # first line 36 | line = lines[0] 37 | 38 | # ignore any Merge 39 | if line.startswith("Merge"): 40 | sys.exit(0) 41 | 42 | if len(line) > 50: 43 | bad_commit("First commit message line (header) " 44 | "is exceeding the 50 chars limit", line) 45 | 46 | m = re.search('^(.*)\((.*)\): (.*)$', line) 47 | 48 | if not m or len(m.groups()) != 3: 49 | bad_commit("First commit message line (header) does not " 50 | "follow format: type(scope): description", line) 51 | 52 | commit_type, commit_scope, commit_message = m.groups() 53 | 54 | if commit_type not in valid_commit_types: 55 | bad_commit("Commit type not in valid ones: %s" 56 | % ", ".join(valid_commit_types), line) 57 | 58 | if not commit_scope.strip(): 59 | bad_commit("Commit scope is empty", line) 60 | 61 | if not commit_message.strip(): 62 | bad_commit("Commit description is empty", line) 63 | 64 | if commit_message[0].isupper(): 65 | bad_commit("Commit subject first char not lowercase", line) 66 | 67 | if commit_message.endswith('.'): 68 | bad_commit("Commit subject last char (a dot) " 69 | "is not allowed", line) 70 | 71 | verb = commit_message.split()[0] 72 | if verb.endswith("ing") or verb.endswith("ed"): 73 | bad_commit("Commit subject must use imperative, present tense:\n" 74 | "# \"change\", not \"changed\" nor \"changing\"", line) 75 | 76 | if line != line.strip(): 77 | bad_commit("First commit message line (header) " 78 | "contains leading or ending spaces", line) 79 | 80 | if len(lines) > 1 and lines[1]: 81 | bad_commit("Second commit message line must be empty") 82 | 83 | if len(lines) > 2 and not lines[2].strip(): 84 | bad_commit("Third commit message line (body) " 85 | "can't be empty", lines[2]) 86 | 87 | for l in lines: 88 | if len(l) > 72: 89 | bad_commit("This line is exceeding the 72 chars limit", l) 90 | 91 | # We catch that an error has happened and react accordingly 92 | except SyntaxError as err: 93 | if input("Do you want to edit it? (Your commit will " 94 | "be rejected otherwise) [y/N] ").lower() == 'y': 95 | if not is_piped: 96 | commit.close() 97 | commit = open(sys.argv[1], 'a') 98 | commit.write("#\n# %s\n#\n" % err) 99 | sys.stderr.write('\n') 100 | commit.close() 101 | call('%s %s' % (editor, sys.argv[1]), shell=True) 102 | continue 103 | else: 104 | sys.stderr.write("Exiting without commiting\n") 105 | sys.exit(1) 106 | break 107 | sys.exit(0) 108 | 109 | -------------------------------------------------------------------------------- /i3/.config/i3/config: -------------------------------------------------------------------------------- 1 | # This file has been auto-generated by i3-config-wizard(1). 2 | # It will not be overwritten, so edit it as you like. 3 | # 4 | # Should you change your keyboard layout some time, delete 5 | # this file and re-run i3-config-wizard(1). 6 | # 7 | 8 | # i3 config file (v4) 9 | # 10 | # Please see https://i3wm.org/docs/userguide.html for a complete reference! 11 | 12 | set $mod Mod4 13 | 14 | # Font for window titles. Will also be used by the bar unless a different font 15 | # is used in the bar {} block below. 16 | #font pango:monospace 8 17 | 18 | # This font is widely installed, provides lots of unicode glyphs, right-to-left 19 | # text rendering and scalability on retina/hidpi displays (thanks to pango). 20 | font pango:Fira Sans 8 21 | exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork 22 | 23 | # NetworkManager is the most popular way to manage wireless networks on Linux, 24 | # and nm-applet is a desktop environment-independent system tray GUI for it. 25 | exec --no-startup-id nm-applet 26 | 27 | # Use pactl to adjust volume in PulseAudio. 28 | set $refresh_i3status killall -SIGUSR1 i3status 29 | bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status 30 | bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status 31 | bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status 32 | bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status 33 | 34 | # Use Mouse+$mod to drag floating windows to their wanted position 35 | floating_modifier $mod 36 | 37 | # start a terminal 38 | bindsym $mod+Return exec kitty -e /usr/bin/fish 39 | 40 | # kill focused window 41 | bindsym $mod+Shift+q kill 42 | 43 | # start dmenu (a program launcher) 44 | bindsym $mod+d exec --no-startup-id dmenu_run 45 | # A more modern dmenu replacement is rofi: 46 | # bindcode $mod+40 exec "rofi -modi drun,run -show drun" 47 | # There also is i3-dmenu-desktop which only displays applications shipping a 48 | # .desktop file. It is a wrapper around dmenu, so you need that installed. 49 | # bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop 50 | 51 | # change focus 52 | bindsym $mod+j focus left 53 | bindsym $mod+k focus down 54 | bindsym $mod+l focus up 55 | bindsym $mod+semicolon focus right 56 | 57 | # alternatively, you can use the cursor keys: 58 | bindsym $mod+Left focus left 59 | bindsym $mod+Down focus down 60 | bindsym $mod+Up focus up 61 | bindsym $mod+Right focus right 62 | 63 | # move focused window 64 | bindsym $mod+Shift+j move left 65 | bindsym $mod+Shift+k move down 66 | bindsym $mod+Shift+l move up 67 | bindsym $mod+Shift+semicolon move right 68 | 69 | # alternatively, you can use the cursor keys: 70 | bindsym $mod+Shift+Left move left 71 | bindsym $mod+Shift+Down move down 72 | bindsym $mod+Shift+Up move up 73 | bindsym $mod+Shift+Right move right 74 | 75 | # split in horizontal orientation 76 | bindsym $mod+h split h 77 | 78 | # split in vertical orientation 79 | bindsym $mod+v split v 80 | 81 | # enter fullscreen mode for the focused container 82 | bindsym $mod+f fullscreen toggle 83 | 84 | # change container layout (stacked, tabbed, toggle split) 85 | bindsym $mod+s layout stacking 86 | bindsym $mod+w layout tabbed 87 | bindsym $mod+e layout toggle split 88 | 89 | # toggle tiling / floating 90 | bindsym $mod+Shift+space floating toggle 91 | 92 | # change focus between tiling / floating windows 93 | bindsym $mod+space focus mode_toggle 94 | 95 | # focus the parent container 96 | bindsym $mod+a focus parent 97 | 98 | # focus the child container 99 | #bindsym $mod+d focus child 100 | 101 | # Define names for default workspaces for which we configure key bindings later on. 102 | # We use variables to avoid repeating the names in multiple places. 103 | set $ws1 "1" 104 | set $ws2 "2" 105 | set $ws3 "3" 106 | set $ws4 "4" 107 | set $ws5 "5" 108 | set $ws6 "6" 109 | set $ws7 "7" 110 | set $ws8 "8" 111 | set $ws9 "9" 112 | set $ws10 "10" 113 | 114 | # switch to workspace 115 | bindsym $mod+1 workspace number $ws1 116 | bindsym $mod+2 workspace number $ws2 117 | bindsym $mod+3 workspace number $ws3 118 | bindsym $mod+4 workspace number $ws4 119 | bindsym $mod+5 workspace number $ws5 120 | bindsym $mod+6 workspace number $ws6 121 | bindsym $mod+7 workspace number $ws7 122 | bindsym $mod+8 workspace number $ws8 123 | bindsym $mod+9 workspace number $ws9 124 | bindsym $mod+0 workspace number $ws10 125 | 126 | # move focused container to workspace 127 | bindsym $mod+Shift+1 move container to workspace number $ws1 128 | bindsym $mod+Shift+2 move container to workspace number $ws2 129 | bindsym $mod+Shift+3 move container to workspace number $ws3 130 | bindsym $mod+Shift+4 move container to workspace number $ws4 131 | bindsym $mod+Shift+5 move container to workspace number $ws5 132 | bindsym $mod+Shift+6 move container to workspace number $ws6 133 | bindsym $mod+Shift+7 move container to workspace number $ws7 134 | bindsym $mod+Shift+8 move container to workspace number $ws8 135 | bindsym $mod+Shift+9 move container to workspace number $ws9 136 | bindsym $mod+Shift+0 move container to workspace number $ws10 137 | 138 | # reload the configuration file 139 | bindsym $mod+Shift+c reload 140 | # restart i3 inplace (preserves your layout/session, can be used to upgrade i3) 141 | bindsym $mod+Shift+r restart 142 | # exit i3 (logs you out of your X session) 143 | bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'" 144 | 145 | # resize window (you can also use the mouse for that) 146 | mode "resize" { 147 | # These bindings trigger as soon as you enter the resize mode 148 | 149 | # Pressing left will shrink the window’s width. 150 | # Pressing right will grow the window’s width. 151 | # Pressing up will shrink the window’s height. 152 | # Pressing down will grow the window’s height. 153 | bindsym j resize shrink width 10 px or 10 ppt 154 | bindsym k resize grow height 10 px or 10 ppt 155 | bindsym l resize shrink height 10 px or 10 ppt 156 | bindsym semicolon resize grow width 10 px or 10 ppt 157 | 158 | # same bindings, but for the arrow keys 159 | bindsym Left resize shrink width 10 px or 10 ppt 160 | bindsym Down resize grow height 10 px or 10 ppt 161 | bindsym Up resize shrink height 10 px or 10 ppt 162 | bindsym Right resize grow width 10 px or 10 ppt 163 | 164 | # back to normal: Enter or Escape or $mod+r 165 | bindsym Return mode "default" 166 | bindsym Escape mode "default" 167 | bindsym $mod+r mode "default" 168 | } 169 | 170 | bindsym $mod+r mode "resize" 171 | 172 | 173 | bindsym $mod+Print exec ~/screenshot.sh 174 | bindsym $mod+Shift+G exec colorgrab 175 | 176 | gaps inner 10 177 | gaps outer 0 178 | # border_radius 3 179 | 180 | for_window [class="^.*"] border pixel 0 181 | 182 | exec_always --no-startup-id dunst 183 | exec_always --no-startup-id feh --bg-fill ~/wallpaper.png 184 | exec_always --no-startup-id eww daemon 185 | exec_always --no-startup-id eww open bar 186 | exec_always --no-startup-id picom -cb 187 | 188 | exec_always --no-startup-id xrdb ~/.Xresources 189 | 190 | set $unfocused_border #24292f 191 | set $focused_border #ffffff 192 | 193 | # class border backgr. text indicator child_border 194 | #client.focused #ffffff #ffffff #ffffff #ffffff $focused_border 195 | #client.focused_inactive #ffffff #ffffff #ffffff #ffffff $focused_border 196 | #client.unfocused #ffffff #ffffff #ffffff #ffffff $unfocused_border 197 | #client.urgent #ffffff #ffffff #ffffff #ffffff $focused_border 198 | #client.placeholder #ffffff #ffffff #ffffff #ffffff #ffffff 199 | 200 | client.background #ffffff 201 | -------------------------------------------------------------------------------- /i3/.i3/code.json: -------------------------------------------------------------------------------- 1 | { 2 | "border": "normal", 3 | "floating": "auto_off", 4 | "layout": "splitv", 5 | "marks": [], 6 | "percent": 0.8, 7 | "type": "con", 8 | "nodes": [ 9 | { 10 | "border": "pixel", 11 | "current_border_width": 0, 12 | "floating": "auto_off", 13 | "geometry": { 14 | "height": 713, 15 | "width": 1713, 16 | "x": 0, 17 | "y": 0 18 | }, 19 | "marks": [], 20 | "name": "nvim", 21 | "percent": 0.7, 22 | "swallows": [ 23 | { 24 | "class": "^kitty$" 25 | } 26 | ], 27 | "type": "con" 28 | }, 29 | { 30 | "border": "normal", 31 | "floating": "auto_off", 32 | "layout": "splith", 33 | "marks": [], 34 | "percent": 0.3, 35 | "type": "con", 36 | "nodes": [ 37 | { 38 | "border": "pixel", 39 | "current_border_width": 0, 40 | "floating": "auto_off", 41 | "geometry": { 42 | "height": 1020, 43 | "width": 1900, 44 | "x": 0, 45 | "y": 0 46 | }, 47 | "marks": [], 48 | "name": "cava", 49 | "percent": 0.183333333333333, 50 | "swallows": [ 51 | { 52 | "class": "^kitty$" 53 | } 54 | ], 55 | "type": "con" 56 | }, 57 | { 58 | "border": "normal", 59 | "floating": "auto_off", 60 | "layout": "splitv", 61 | "marks": [], 62 | "percent": 0.483333333333333, 63 | "type": "con", 64 | "nodes": [ 65 | { 66 | "border": "pixel", 67 | "current_border_width": 0, 68 | "floating": "auto_off", 69 | "geometry": { 70 | "height": 245, 71 | "width": 753, 72 | "x": 0, 73 | "y": 0 74 | }, 75 | "marks": [], 76 | "name": "terminal", 77 | "percent": 1, 78 | "swallows": [ 79 | { 80 | "class": "^kitty$" 81 | } 82 | ], 83 | "type": "con" 84 | } 85 | ] 86 | }, 87 | { 88 | "border": "pixel", 89 | "current_border_width": 0, 90 | "floating": "auto_off", 91 | "geometry": { 92 | "height": 245, 93 | "width": 753, 94 | "x": 0, 95 | "y": 0 96 | }, 97 | "marks": [], 98 | "name": "runterm", 99 | "percent": 0.333333333333333, 100 | "swallows": [ 101 | { 102 | "class": "^kitty$" 103 | } 104 | ], 105 | "type": "con" 106 | } 107 | ] 108 | } 109 | ] 110 | } 111 | 112 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # restore wallpaper 4 | cp ./extra/wallpaper.png ~/wallpaper.png 5 | 6 | # restore git configs 7 | mkdir -p ~/.config/git 8 | cp -r ./git/.config/git/* ~/.config/git/ 9 | 10 | # restore fish configs 11 | mkdir -p ~/.config/fish 12 | cp ./fish/.config/fish/config.fish ~/.config/fish/config.fish 13 | 14 | # restore neofetch configs 15 | mkdir -p ~/.config/neofetch 16 | cp -r ./neofetch/.config/neofetch/* ~/.config/neofetch/ 17 | 18 | # restore picom config 19 | cp ./picom/.config/picom.conf ~/.config/picom.conf 20 | 21 | # restore i3 config 22 | mkdir -p ~/.config/i3 23 | cp ./i3/.config/i3/config ~/.config/i3/config 24 | 25 | # restore i3 layputs 26 | mkdir -p ~/.i3 27 | cp ./i3/.i3/* ~/.i3/ 28 | 29 | # restore eww configs 30 | mkdir -p ~/.config/eww 31 | cp -r ./eww/.config/eww/* ~/.config/eww/ 32 | 33 | # restore kitty config 34 | mkdir -p ~/.config/kitty 35 | cp ./kitty/.config/kitty/kitty.conf ~/.config/kitty/kitty.conf 36 | 37 | # restore neovim configs 38 | mkdir -p ~/.config/nvim 39 | cp -r ./nvim/.config/nvim/* ~/.config/nvim/ 40 | 41 | # restore dunst configs 42 | mkdir -p ~/.config/dunst 43 | cp -r ./dunst/.config/dunst/* ~/.config/dunst/ 44 | -------------------------------------------------------------------------------- /kitty/.config/kitty/kitty.conf: -------------------------------------------------------------------------------- 1 | background #22272e 2 | 3 | # black 4 | color0 #24292f 5 | color8 #ffffff 6 | 7 | # red 8 | color1 #dc6f7a 9 | color9 #e38588 10 | 11 | # green 12 | color2 #618774 13 | color10 #7eab7b 14 | 15 | # yellow 16 | color3 #e3786c 17 | color11 #ee896e 18 | 19 | # blue 20 | color4 #4f6286 21 | color12 #5c6b92 22 | 23 | # magenta 24 | color5 #a97594 25 | color13 #b589a4 26 | 27 | # cyan 28 | color6 #4f8896 29 | color14 #6ba5ab 30 | 31 | # white 32 | color7 #ffffff 33 | color15 #ffffff 34 | 35 | tab_bar_edge top 36 | cursor_shape beam 37 | font_family Fira Code 38 | disable_ligatures never 39 | -------------------------------------------------------------------------------- /neofetch/.config/neofetch/config.conf: -------------------------------------------------------------------------------- 1 | # See this wiki page for more info: 2 | # https://github.com/dylanaraps/neofetch/wiki/Customizing-Info 3 | print_info() { 4 | info title 5 | info underline 6 | 7 | info "OS" distro 8 | info "Host" model 9 | info "Kernel" kernel 10 | info "Uptime" uptime 11 | info "Packages" packages 12 | info "Shell" shell 13 | info "Resolution" resolution 14 | info "DE" de 15 | info "WM" wm 16 | info "WM Theme" wm_theme 17 | info "Theme" theme 18 | info "Icons" icons 19 | info "Terminal" term 20 | info "Terminal Font" term_font 21 | info "CPU" cpu 22 | info "GPU" gpu 23 | info "Memory" memory 24 | 25 | # info "GPU Driver" gpu_driver # Linux/macOS only 26 | # info "CPU Usage" cpu_usage 27 | # info "Disk" disk 28 | # info "Battery" battery 29 | # info "Font" font 30 | # info "Song" song 31 | # [[ "$player" ]] && prin "Music Player" "$player" 32 | # info "Local IP" local_ip 33 | # info "Public IP" public_ip 34 | # info "Users" users 35 | # info "Locale" locale # This only works on glibc systems. 36 | 37 | info cols 38 | } 39 | 40 | # Title 41 | 42 | 43 | # Hide/Show Fully qualified domain name. 44 | # 45 | # Default: 'off' 46 | # Values: 'on', 'off' 47 | # Flag: --title_fqdn 48 | title_fqdn="off" 49 | 50 | 51 | # Kernel 52 | 53 | 54 | # Shorten the output of the kernel function. 55 | # 56 | # Default: 'on' 57 | # Values: 'on', 'off' 58 | # Flag: --kernel_shorthand 59 | # Supports: Everything except *BSDs (except PacBSD and PC-BSD) 60 | # 61 | # Example: 62 | # on: '4.8.9-1-ARCH' 63 | # off: 'Linux 4.8.9-1-ARCH' 64 | kernel_shorthand="on" 65 | 66 | 67 | # Distro 68 | 69 | 70 | # Shorten the output of the distro function 71 | # 72 | # Default: 'off' 73 | # Values: 'on', 'tiny', 'off' 74 | # Flag: --distro_shorthand 75 | # Supports: Everything except Windows and Haiku 76 | distro_shorthand="off" 77 | 78 | # Show/Hide OS Architecture. 79 | # Show 'x86_64', 'x86' and etc in 'Distro:' output. 80 | # 81 | # Default: 'on' 82 | # Values: 'on', 'off' 83 | # Flag: --os_arch 84 | # 85 | # Example: 86 | # on: 'Arch Linux x86_64' 87 | # off: 'Arch Linux' 88 | os_arch="on" 89 | 90 | 91 | # Uptime 92 | 93 | 94 | # Shorten the output of the uptime function 95 | # 96 | # Default: 'on' 97 | # Values: 'on', 'tiny', 'off' 98 | # Flag: --uptime_shorthand 99 | # 100 | # Example: 101 | # on: '2 days, 10 hours, 3 mins' 102 | # tiny: '2d 10h 3m' 103 | # off: '2 days, 10 hours, 3 minutes' 104 | uptime_shorthand="on" 105 | 106 | 107 | # Memory 108 | 109 | 110 | # Show memory pecentage in output. 111 | # 112 | # Default: 'off' 113 | # Values: 'on', 'off' 114 | # Flag: --memory_percent 115 | # 116 | # Example: 117 | # on: '1801MiB / 7881MiB (22%)' 118 | # off: '1801MiB / 7881MiB' 119 | memory_percent="off" 120 | 121 | # Change memory output unit. 122 | # 123 | # Default: 'mib' 124 | # Values: 'kib', 'mib', 'gib' 125 | # Flag: --memory_unit 126 | # 127 | # Example: 128 | # kib '1020928KiB / 7117824KiB' 129 | # mib '1042MiB / 6951MiB' 130 | # gib: ' 0.98GiB / 6.79GiB' 131 | memory_unit="mib" 132 | 133 | 134 | # Packages 135 | 136 | 137 | # Show/Hide Package Manager names. 138 | # 139 | # Default: 'tiny' 140 | # Values: 'on', 'tiny' 'off' 141 | # Flag: --package_managers 142 | # 143 | # Example: 144 | # on: '998 (pacman), 8 (flatpak), 4 (snap)' 145 | # tiny: '908 (pacman, flatpak, snap)' 146 | # off: '908' 147 | package_managers="on" 148 | 149 | 150 | # Shell 151 | 152 | 153 | # Show the path to $SHELL 154 | # 155 | # Default: 'off' 156 | # Values: 'on', 'off' 157 | # Flag: --shell_path 158 | # 159 | # Example: 160 | # on: '/bin/bash' 161 | # off: 'bash' 162 | shell_path="off" 163 | 164 | # Show $SHELL version 165 | # 166 | # Default: 'on' 167 | # Values: 'on', 'off' 168 | # Flag: --shell_version 169 | # 170 | # Example: 171 | # on: 'bash 4.4.5' 172 | # off: 'bash' 173 | shell_version="on" 174 | 175 | 176 | # CPU 177 | 178 | 179 | # CPU speed type 180 | # 181 | # Default: 'bios_limit' 182 | # Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'. 183 | # Flag: --speed_type 184 | # Supports: Linux with 'cpufreq' 185 | # NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value. 186 | speed_type="bios_limit" 187 | 188 | # CPU speed shorthand 189 | # 190 | # Default: 'off' 191 | # Values: 'on', 'off'. 192 | # Flag: --speed_shorthand 193 | # NOTE: This flag is not supported in systems with CPU speed less than 1 GHz 194 | # 195 | # Example: 196 | # on: 'i7-6500U (4) @ 3.1GHz' 197 | # off: 'i7-6500U (4) @ 3.100GHz' 198 | speed_shorthand="off" 199 | 200 | # Enable/Disable CPU brand in output. 201 | # 202 | # Default: 'on' 203 | # Values: 'on', 'off' 204 | # Flag: --cpu_brand 205 | # 206 | # Example: 207 | # on: 'Intel i7-6500U' 208 | # off: 'i7-6500U (4)' 209 | cpu_brand="on" 210 | 211 | # CPU Speed 212 | # Hide/Show CPU speed. 213 | # 214 | # Default: 'on' 215 | # Values: 'on', 'off' 216 | # Flag: --cpu_speed 217 | # 218 | # Example: 219 | # on: 'Intel i7-6500U (4) @ 3.1GHz' 220 | # off: 'Intel i7-6500U (4)' 221 | cpu_speed="on" 222 | 223 | # CPU Cores 224 | # Display CPU cores in output 225 | # 226 | # Default: 'logical' 227 | # Values: 'logical', 'physical', 'off' 228 | # Flag: --cpu_cores 229 | # Support: 'physical' doesn't work on BSD. 230 | # 231 | # Example: 232 | # logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores) 233 | # physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores) 234 | # off: 'Intel i7-6500U @ 3.1GHz' 235 | cpu_cores="logical" 236 | 237 | # CPU Temperature 238 | # Hide/Show CPU temperature. 239 | # Note the temperature is added to the regular CPU function. 240 | # 241 | # Default: 'off' 242 | # Values: 'C', 'F', 'off' 243 | # Flag: --cpu_temp 244 | # Supports: Linux, BSD 245 | # NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable 246 | # coretemp kernel module. This only supports newer Intel processors. 247 | # 248 | # Example: 249 | # C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]' 250 | # F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]' 251 | # off: 'Intel i7-6500U (4) @ 3.1GHz' 252 | cpu_temp="off" 253 | 254 | 255 | # GPU 256 | 257 | 258 | # Enable/Disable GPU Brand 259 | # 260 | # Default: 'on' 261 | # Values: 'on', 'off' 262 | # Flag: --gpu_brand 263 | # 264 | # Example: 265 | # on: 'AMD HD 7950' 266 | # off: 'HD 7950' 267 | gpu_brand="on" 268 | 269 | # Which GPU to display 270 | # 271 | # Default: 'all' 272 | # Values: 'all', 'dedicated', 'integrated' 273 | # Flag: --gpu_type 274 | # Supports: Linux 275 | # 276 | # Example: 277 | # all: 278 | # GPU1: AMD HD 7950 279 | # GPU2: Intel Integrated Graphics 280 | # 281 | # dedicated: 282 | # GPU1: AMD HD 7950 283 | # 284 | # integrated: 285 | # GPU1: Intel Integrated Graphics 286 | gpu_type="all" 287 | 288 | 289 | # Resolution 290 | 291 | 292 | # Display refresh rate next to each monitor 293 | # Default: 'off' 294 | # Values: 'on', 'off' 295 | # Flag: --refresh_rate 296 | # Supports: Doesn't work on Windows. 297 | # 298 | # Example: 299 | # on: '1920x1080 @ 60Hz' 300 | # off: '1920x1080' 301 | refresh_rate="on" 302 | 303 | 304 | # Gtk Theme / Icons / Font 305 | 306 | 307 | # Shorten output of GTK Theme / Icons / Font 308 | # 309 | # Default: 'off' 310 | # Values: 'on', 'off' 311 | # Flag: --gtk_shorthand 312 | # 313 | # Example: 314 | # on: 'Numix, Adwaita' 315 | # off: 'Numix [GTK2], Adwaita [GTK3]' 316 | gtk_shorthand="off" 317 | 318 | 319 | # Enable/Disable gtk2 Theme / Icons / Font 320 | # 321 | # Default: 'on' 322 | # Values: 'on', 'off' 323 | # Flag: --gtk2 324 | # 325 | # Example: 326 | # on: 'Numix [GTK2], Adwaita [GTK3]' 327 | # off: 'Adwaita [GTK3]' 328 | gtk2="off" 329 | 330 | # Enable/Disable gtk3 Theme / Icons / Font 331 | # 332 | # Default: 'on' 333 | # Values: 'on', 'off' 334 | # Flag: --gtk3 335 | # 336 | # Example: 337 | # on: 'Numix [GTK2], Adwaita [GTK3]' 338 | # off: 'Numix [GTK2]' 339 | gtk3="off" 340 | 341 | 342 | # IP Address 343 | 344 | 345 | # Website to ping for the public IP 346 | # 347 | # Default: 'http://ident.me' 348 | # Values: 'url' 349 | # Flag: --ip_host 350 | public_ip_host="http://ident.me" 351 | 352 | # Public IP timeout. 353 | # 354 | # Default: '2' 355 | # Values: 'int' 356 | # Flag: --ip_timeout 357 | public_ip_timeout=2 358 | 359 | 360 | # Desktop Environment 361 | 362 | 363 | # Show Desktop Environment version 364 | # 365 | # Default: 'on' 366 | # Values: 'on', 'off' 367 | # Flag: --de_version 368 | de_version="off" 369 | 370 | 371 | # Disk 372 | 373 | 374 | # Which disks to display. 375 | # The values can be any /dev/sdXX, mount point or directory. 376 | # NOTE: By default we only show the disk info for '/'. 377 | # 378 | # Default: '/' 379 | # Values: '/', '/dev/sdXX', '/path/to/drive'. 380 | # Flag: --disk_show 381 | # 382 | # Example: 383 | # disk_show=('/' '/dev/sdb1'): 384 | # 'Disk (/): 74G / 118G (66%)' 385 | # 'Disk (/mnt/Videos): 823G / 893G (93%)' 386 | # 387 | # disk_show=('/'): 388 | # 'Disk (/): 74G / 118G (66%)' 389 | # 390 | disk_show=('/') 391 | 392 | # Disk subtitle. 393 | # What to append to the Disk subtitle. 394 | # 395 | # Default: 'mount' 396 | # Values: 'mount', 'name', 'dir', 'none' 397 | # Flag: --disk_subtitle 398 | # 399 | # Example: 400 | # name: 'Disk (/dev/sda1): 74G / 118G (66%)' 401 | # 'Disk (/dev/sdb2): 74G / 118G (66%)' 402 | # 403 | # mount: 'Disk (/): 74G / 118G (66%)' 404 | # 'Disk (/mnt/Local Disk): 74G / 118G (66%)' 405 | # 'Disk (/mnt/Videos): 74G / 118G (66%)' 406 | # 407 | # dir: 'Disk (/): 74G / 118G (66%)' 408 | # 'Disk (Local Disk): 74G / 118G (66%)' 409 | # 'Disk (Videos): 74G / 118G (66%)' 410 | # 411 | # none: 'Disk: 74G / 118G (66%)' 412 | # 'Disk: 74G / 118G (66%)' 413 | # 'Disk: 74G / 118G (66%)' 414 | disk_subtitle="mount" 415 | 416 | # Disk percent. 417 | # Show/Hide disk percent. 418 | # 419 | # Default: 'on' 420 | # Values: 'on', 'off' 421 | # Flag: --disk_percent 422 | # 423 | # Example: 424 | # on: 'Disk (/): 74G / 118G (66%)' 425 | # off: 'Disk (/): 74G / 118G' 426 | disk_percent="on" 427 | 428 | 429 | # Song 430 | 431 | 432 | # Manually specify a music player. 433 | # 434 | # Default: 'auto' 435 | # Values: 'auto', 'player-name' 436 | # Flag: --music_player 437 | # 438 | # Available values for 'player-name': 439 | # 440 | # amarok 441 | # audacious 442 | # banshee 443 | # bluemindo 444 | # clementine 445 | # cmus 446 | # deadbeef 447 | # deepin-music 448 | # dragon 449 | # elisa 450 | # exaile 451 | # gnome-music 452 | # gmusicbrowser 453 | # gogglesmm 454 | # guayadeque 455 | # io.elementary.music 456 | # iTunes 457 | # juk 458 | # lollypop 459 | # mocp 460 | # mopidy 461 | # mpd 462 | # muine 463 | # netease-cloud-music 464 | # olivia 465 | # playerctl 466 | # pogo 467 | # pragha 468 | # qmmp 469 | # quodlibet 470 | # rhythmbox 471 | # sayonara 472 | # smplayer 473 | # spotify 474 | # strawberry 475 | # tauonmb 476 | # tomahawk 477 | # vlc 478 | # xmms2d 479 | # xnoise 480 | # yarock 481 | music_player="auto" 482 | 483 | # Format to display song information. 484 | # 485 | # Default: '%artist% - %album% - %title%' 486 | # Values: '%artist%', '%album%', '%title%' 487 | # Flag: --song_format 488 | # 489 | # Example: 490 | # default: 'Song: Jet - Get Born - Sgt Major' 491 | song_format="%artist% - %album% - %title%" 492 | 493 | # Print the Artist, Album and Title on separate lines 494 | # 495 | # Default: 'off' 496 | # Values: 'on', 'off' 497 | # Flag: --song_shorthand 498 | # 499 | # Example: 500 | # on: 'Artist: The Fratellis' 501 | # 'Album: Costello Music' 502 | # 'Song: Chelsea Dagger' 503 | # 504 | # off: 'Song: The Fratellis - Costello Music - Chelsea Dagger' 505 | song_shorthand="off" 506 | 507 | # 'mpc' arguments (specify a host, password etc). 508 | # 509 | # Default: '' 510 | # Example: mpc_args=(-h HOST -P PASSWORD) 511 | mpc_args=() 512 | 513 | 514 | # Text Colors 515 | 516 | 517 | # Text Colors 518 | # 519 | # Default: 'distro' 520 | # Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' 521 | # Flag: --colors 522 | # 523 | # Each number represents a different part of the text in 524 | # this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info' 525 | # 526 | # Example: 527 | # colors=(distro) - Text is colored based on Distro colors. 528 | # colors=(4 6 1 8 8 6) - Text is colored in the order above. 529 | colors=(distro) 530 | 531 | 532 | # Text Options 533 | 534 | 535 | # Toggle bold text 536 | # 537 | # Default: 'on' 538 | # Values: 'on', 'off' 539 | # Flag: --bold 540 | bold="on" 541 | 542 | # Enable/Disable Underline 543 | # 544 | # Default: 'on' 545 | # Values: 'on', 'off' 546 | # Flag: --underline 547 | underline_enabled="on" 548 | 549 | # Underline character 550 | # 551 | # Default: '-' 552 | # Values: 'string' 553 | # Flag: --underline_char 554 | underline_char="-" 555 | 556 | 557 | # Info Separator 558 | # Replace the default separator with the specified string. 559 | # 560 | # Default: ':' 561 | # Flag: --separator 562 | # 563 | # Example: 564 | # separator="->": 'Shell-> bash' 565 | # separator=" =": 'WM = dwm' 566 | separator=":" 567 | 568 | 569 | # Color Blocks 570 | 571 | 572 | # Color block range 573 | # The range of colors to print. 574 | # 575 | # Default: '0', '15' 576 | # Values: 'num' 577 | # Flag: --block_range 578 | # 579 | # Example: 580 | # 581 | # Display colors 0-7 in the blocks. (8 colors) 582 | # neofetch --block_range 0 7 583 | # 584 | # Display colors 0-15 in the blocks. (16 colors) 585 | # neofetch --block_range 0 15 586 | block_range=(0 15) 587 | 588 | # Toggle color blocks 589 | # 590 | # Default: 'on' 591 | # Values: 'on', 'off' 592 | # Flag: --color_blocks 593 | color_blocks="on" 594 | 595 | # Color block width in spaces 596 | # 597 | # Default: '3' 598 | # Values: 'num' 599 | # Flag: --block_width 600 | block_width=3 601 | 602 | # Color block height in lines 603 | # 604 | # Default: '1' 605 | # Values: 'num' 606 | # Flag: --block_height 607 | block_height=1 608 | 609 | # Color Alignment 610 | # 611 | # Default: 'auto' 612 | # Values: 'auto', 'num' 613 | # Flag: --col_offset 614 | # 615 | # Number specifies how far from the left side of the terminal (in spaces) to 616 | # begin printing the columns, in case you want to e.g. center them under your 617 | # text. 618 | # Example: 619 | # col_offset="auto" - Default behavior of neofetch 620 | # col_offset=7 - Leave 7 spaces then print the colors 621 | col_offset="auto" 622 | 623 | # Progress Bars 624 | 625 | 626 | # Bar characters 627 | # 628 | # Default: '-', '=' 629 | # Values: 'string', 'string' 630 | # Flag: --bar_char 631 | # 632 | # Example: 633 | # neofetch --bar_char 'elapsed' 'total' 634 | # neofetch --bar_char '-' '=' 635 | bar_char_elapsed="-" 636 | bar_char_total="=" 637 | 638 | # Toggle Bar border 639 | # 640 | # Default: 'on' 641 | # Values: 'on', 'off' 642 | # Flag: --bar_border 643 | bar_border="on" 644 | 645 | # Progress bar length in spaces 646 | # Number of chars long to make the progress bars. 647 | # 648 | # Default: '15' 649 | # Values: 'num' 650 | # Flag: --bar_length 651 | bar_length=15 652 | 653 | # Progress bar colors 654 | # When set to distro, uses your distro's logo colors. 655 | # 656 | # Default: 'distro', 'distro' 657 | # Values: 'distro', 'num' 658 | # Flag: --bar_colors 659 | # 660 | # Example: 661 | # neofetch --bar_colors 3 4 662 | # neofetch --bar_colors distro 5 663 | bar_color_elapsed="distro" 664 | bar_color_total="distro" 665 | 666 | 667 | # Info display 668 | # Display a bar with the info. 669 | # 670 | # Default: 'off' 671 | # Values: 'bar', 'infobar', 'barinfo', 'off' 672 | # Flags: --cpu_display 673 | # --memory_display 674 | # --battery_display 675 | # --disk_display 676 | # 677 | # Example: 678 | # bar: '[---=======]' 679 | # infobar: 'info [---=======]' 680 | # barinfo: '[---=======] info' 681 | # off: 'info' 682 | cpu_display="off" 683 | memory_display="off" 684 | battery_display="off" 685 | disk_display="off" 686 | 687 | 688 | # Backend Settings 689 | 690 | 691 | # Image backend. 692 | # 693 | # Default: 'ascii' 694 | # Values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off', 695 | # 'pot', 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty' 696 | # Flag: --backend 697 | image_backend="kitty" 698 | 699 | # Image Source 700 | # 701 | # Which image or ascii file to display. 702 | # 703 | # Default: 'auto' 704 | # Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/' 705 | # 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")' 706 | # Flag: --source 707 | # 708 | # NOTE: 'auto' will pick the best image source for whatever image backend is used. 709 | # In ascii mode, distro ascii art will be used and in an image mode, your 710 | # wallpaper will be used. 711 | image_source="auto" 712 | 713 | 714 | # Ascii Options 715 | 716 | 717 | # Ascii distro 718 | # Which distro's ascii art to display. 719 | # 720 | # Default: 'auto' 721 | # Values: 'auto', 'distro_name' 722 | # Flag: --ascii_distro 723 | # NOTE: AIX, Alpine, Anarchy, Android, Antergos, antiX, "AOSC OS", 724 | # "AOSC OS/Retro", Apricity, ArcoLinux, ArchBox, ARCHlabs, 725 | # ArchStrike, XFerience, ArchMerge, Arch, Artix, Arya, Bedrock, 726 | # Bitrig, BlackArch, BLAG, BlankOn, BlueLight, bonsai, BSD, 727 | # BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS, 728 | # Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover, 729 | # Condres, Container_Linux, CRUX, Cucumber, Debian, Deepin, 730 | # DesaOS, Devuan, DracOS, DarkOs, DragonFly, Drauger, Elementary, 731 | # EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD, 732 | # FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, Pentoo, 733 | # gNewSense, GNOME, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra, 734 | # Hyperbola, janus, Kali, KaOS, KDE_neon, Kibojoe, Kogaion, 735 | # Korora, KSLinux, Kubuntu, LEDE, LFS, Linux_Lite, 736 | # LMDE, Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva, 737 | # Manjaro, Maui, Mer, Minix, LinuxMint, MX_Linux, Namib, 738 | # Neptune, NetBSD, Netrunner, Nitrux, NixOS, Nurunner, 739 | # NuTyX, OBRevenge, OpenBSD, openEuler, OpenIndiana, openmamba, 740 | # OpenMandriva, OpenStage, OpenWrt, osmc, Oracle, OS Elbrus, PacBSD, 741 | # Parabola, Pardus, Parrot, Parsix, TrueOS, PCLinuxOS, Peppermint, 742 | # popos, Porteus, PostMarketOS, Proxmox, Puppy, PureOS, Qubes, Radix, 743 | # Raspbian, Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan, 744 | # Regata, Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific, 745 | # Septor, SereneLinux, SharkLinux, Siduction, Slackware, SliTaz, 746 | # SmartOS, Solus, Source_Mage, Sparky, Star, SteamOS, SunOS, 747 | # openSUSE_Leap, openSUSE_Tumbleweed, openSUSE, SwagArch, Tails, 748 | # Trisquel, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, Ubuntu-Studio, 749 | # Ubuntu, Venom, Void, Obarun, windows10, Windows7, Xubuntu, Zorin, 750 | # and IRIX have ascii logos 751 | # NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants. 752 | # Use '{distro name}_old' to use the old logos. 753 | # NOTE: Ubuntu has flavor variants. 754 | # Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME, 755 | # Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors. 756 | # NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu, 757 | # CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android, 758 | # Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola, 759 | # Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS, 760 | # Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian, 761 | # postmarketOS, and Void have a smaller logo variant. 762 | # Use '{distro name}_small' to use the small variants. 763 | ascii_distro="auto" 764 | 765 | # Ascii Colors 766 | # 767 | # Default: 'distro' 768 | # Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' 769 | # Flag: --ascii_colors 770 | # 771 | # Example: 772 | # ascii_colors=(distro) - Ascii is colored based on Distro colors. 773 | # ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors. 774 | ascii_colors=(distro) 775 | 776 | # Bold ascii logo 777 | # Whether or not to bold the ascii logo. 778 | # 779 | # Default: 'on' 780 | # Values: 'on', 'off' 781 | # Flag: --ascii_bold 782 | ascii_bold="off" 783 | 784 | 785 | # Image Options 786 | 787 | 788 | # Image loop 789 | # Setting this to on will make neofetch redraw the image constantly until 790 | # Ctrl+C is pressed. This fixes display issues in some terminal emulators. 791 | # 792 | # Default: 'off' 793 | # Values: 'on', 'off' 794 | # Flag: --loop 795 | image_loop="off" 796 | 797 | # Thumbnail directory 798 | # 799 | # Default: '~/.cache/thumbnails/neofetch' 800 | # Values: 'dir' 801 | thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch" 802 | 803 | # Crop mode 804 | # 805 | # Default: 'normal' 806 | # Values: 'normal', 'fit', 'fill' 807 | # Flag: --crop_mode 808 | # 809 | # See this wiki page to learn about the fit and fill options. 810 | # https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F 811 | crop_mode="normal" 812 | 813 | # Crop offset 814 | # Note: Only affects 'normal' crop mode. 815 | # 816 | # Default: 'center' 817 | # Values: 'northwest', 'north', 'northeast', 'west', 'center' 818 | # 'east', 'southwest', 'south', 'southeast' 819 | # Flag: --crop_offset 820 | crop_offset="center" 821 | 822 | # Image size 823 | # The image is half the terminal width by default. 824 | # 825 | # Default: 'auto' 826 | # Values: 'auto', '00px', '00%', 'none' 827 | # Flags: --image_size 828 | # --size 829 | image_size="auto" 830 | 831 | # Gap between image and text 832 | # 833 | # Default: '3' 834 | # Values: 'num', '-num' 835 | # Flag: --gap 836 | gap=3 837 | 838 | # Image offsets 839 | # Only works with the w3m backend. 840 | # 841 | # Default: '0' 842 | # Values: 'px' 843 | # Flags: --xoffset 844 | # --yoffset 845 | yoffset=0 846 | xoffset=0 847 | 848 | # Image background color 849 | # Only works with the w3m backend. 850 | # 851 | # Default: '' 852 | # Values: 'color', 'blue' 853 | # Flag: --bg_color 854 | background_color= 855 | 856 | 857 | # Misc Options 858 | 859 | # Stdout mode 860 | # Turn off all colors and disables image backend (ASCII/Image). 861 | # Useful for piping into another command. 862 | # Default: 'off' 863 | # Values: 'on', 'off' 864 | stdout="off" 865 | -------------------------------------------------------------------------------- /nvim/.config/nvim/init.vim: -------------------------------------------------------------------------------- 1 | lua require('plugins') 2 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins.lua: -------------------------------------------------------------------------------- 1 | local install_path = 2 | vim.fn.stdpath 'data' .. '/site/pack/packer/start/packer.nvim' 3 | local is_bootstrap = false 4 | 5 | if vim.fn.empty(vim.fn.glob(install_path)) > 0 then 6 | is_bootstrap = true 7 | vim.fn.system { 8 | 'git', 'clone', '--depth', '1', 9 | 'https://github.com/wbthomason/packer.nvim', install_path } 10 | vim.cmd [[packadd packer.nvim]] 11 | end 12 | 13 | require('packer').startup(function(use) 14 | -- Let Packer manage itself 15 | use 'wbthomason/packer.nvim' 16 | 17 | -- Code folding 18 | use {'kevinhwang91/nvim-ufo', requires = 'kevinhwang91/promise-async'} 19 | 20 | -- Add indentation guides even on blank lines 21 | use 'lukas-reineke/indent-blankline.nvim' 22 | 23 | use 'tpope/vim-sleuth' -- Detect tabstop and shiftwidth automatically 24 | use 'numToStr/Comment.nvim' -- "gc" to comment visual regions/lines 25 | use { 'nvim-treesitter/nvim-treesitter', run = ':TSUpdate' } 26 | use 'nvim-lualine/lualine.nvim' -- Fancier statusline 27 | use 'andweeb/presence.nvim' -- Discord RPC 28 | use 'romgrk/barbar.nvim' 29 | 30 | -- Colorcolumn appears when text is over a certain line 31 | use 'm4xshen/smartcolumn.nvim' 32 | 33 | use { 34 | 'nvim-tree/nvim-tree.lua', 35 | requires = { 36 | 'nvim-tree/nvim-web-devicons', -- optional, for file icons 37 | }, 38 | tag = 'nightly' -- optional, updated every week. (see issue #1193) 39 | } 40 | 41 | -- Autocompletion 42 | use { 43 | 'hrsh7th/nvim-cmp', 44 | requires = { 45 | 'hrsh7th/cmp-nvim-lsp', 46 | 'L3MON4D3/LuaSnip', 47 | 'saadparwaiz1/cmp_luasnip' 48 | }, 49 | } 50 | 51 | -- PETS!! 52 | use({ 53 | "giusgad/pets.nvim", 54 | requires = { 55 | "edluffy/hologram.nvim", 56 | "MunifTanjim/nui.nvim", 57 | } 58 | }) 59 | 60 | -- ======= 61 | -- LSP 62 | -- ======= 63 | use { -- LSP Configuration & Plugins 64 | 'neovim/nvim-lspconfig', 65 | requires = { 66 | -- Automatically install LSPs to stdpath for neovim 67 | 'williamboman/mason.nvim', 68 | 'williamboman/mason-lspconfig.nvim', 69 | 70 | -- Useful status updates for LSP 71 | 'j-hui/fidget.nvim', 72 | 73 | -- Additional lua configuration, makes nvim stuff amazing 74 | 'folke/neodev.nvim', 75 | }, 76 | } 77 | 78 | -- =============== 79 | -- Git Plugins 80 | -- =============== 81 | use 'lewis6991/gitsigns.nvim' 82 | use 'tpope/vim-fugitive' 83 | use 'tpope/vim-rhubarb' 84 | 85 | -- Fuzzy Finder (files, lsp, etc) 86 | use { 87 | 'nvim-telescope/telescope.nvim', 88 | branch = '0.1.x', 89 | requires = { 90 | 'nvim-lua/plenary.nvim' 91 | } 92 | } 93 | 94 | -- Fuzzy Finder Algorithm which requires local dependencies to be built. Only 95 | -- load if `make` is available 96 | use { 97 | 'nvim-telescope/telescope-fzf-native.nvim', 98 | run = 'make', 99 | cond = vim.fn.executable 'make' == 1 100 | } 101 | 102 | -- ==================== 103 | -- Language Support 104 | -- ==================== 105 | use 'dag/vim-fish' -- fish 106 | use 'elkowar/yuck.vim' -- yuck 107 | use 'Civitasv/cmake-tools.nvim' -- goddamn cmake 108 | use 'ranjithshegde/ccls.nvim' -- ccls 109 | 110 | -- Add custom plugins to packer from ~/.config/nvim/lua/custom/plugins.lua 111 | local has_plugins, plugins = pcall(require, 'custom.plugins') 112 | if has_plugins then 113 | plugins(use) 114 | end 115 | 116 | if is_bootstrap then 117 | require('packer').sync() 118 | end 119 | end) 120 | 121 | if is_bootstrap then 122 | print '==================================' 123 | print ' Plugins are being installed' 124 | print ' Wait until Packer completes,' 125 | print ' then restart nvim' 126 | print '==================================' 127 | return 128 | end 129 | 130 | -- Make line numbers default 131 | vim.wo.number = true 132 | 133 | -- Enable mouse mode 134 | vim.o.mouse = 'a' 135 | 136 | -- Enable break indent 137 | vim.o.breakindent = true 138 | 139 | -- Save undo history 140 | vim.o.undofile = true 141 | 142 | -- Case insensitive searching UNLESS /C or capital in search 143 | vim.o.ignorecase = true 144 | vim.o.smartcase = true 145 | 146 | -- Fold options 147 | vim.o.foldcolumn = '1' 148 | vim.o.foldlevel = 99 149 | vim.o.foldlevelstart = 99 150 | vim.o.foldenable = true 151 | 152 | -- 2 space tabs 153 | vim.opt.tabstop = 2 154 | vim.opt.shiftwidth = 2 155 | vim.opt.expandtab = true 156 | vim.bo.softtabstop = 2 157 | 158 | -- Set lualine as statusline 159 | -- See `:help lualine.txt` 160 | require('lualine').setup { 161 | options = { 162 | icons_enabled = true, 163 | -- theme = 'onedark', 164 | component_separators = '|', 165 | section_separators = '', 166 | }, 167 | } 168 | 169 | require('indent_blankline').setup { 170 | char = '┊', 171 | show_trailing_blankline_indent = false, 172 | } 173 | 174 | require('gitsigns').setup { 175 | signs = { 176 | add = { text = '+' }, 177 | change = { text = '~' }, 178 | delete = { text = '_' }, 179 | topdelete = { text = '‾' }, 180 | changedelete = { text = '~' }, 181 | }, 182 | } 183 | 184 | require'nvim-treesitter.configs'.setup { 185 | ensure_installed = { 186 | 'c', 'cpp', 'go', 'lua', 'python', 'rust', 'typescript', 'help', 'vim', 187 | 'kotlin', 'tsx', 'java', 'javascript', 'ruby', 'gitignore', 'fish', 'scss', 188 | 'css', 'json', 'jsdoc', 'html', 'make', 'markdown', 'prisma', 'regex', 189 | 'pug', 'vue', 'yaml', 'toml', 'sql', 'dart', 'cmake', 'diff', 'bash', 190 | }, 191 | 192 | highlight = { 193 | enable = true, 194 | }, 195 | 196 | indent = { 197 | enable = true, 198 | disable = { 'python' }, 199 | }, 200 | } 201 | 202 | require('ufo').setup({ 203 | provider_selector = function(bufnr, filetype, buftype) 204 | return {'treesitter', 'indent'} 205 | end 206 | }) 207 | 208 | -- LSP settings. 209 | -- This function gets run when an LSP connects to a particular buffer. 210 | local on_attach = function(_, bufnr) 211 | -- NOTE: Remember that lua is a real programming language, and as such it is 212 | -- possible to define small helper and utility functions so you don't have to 213 | -- repeat yourself many times. 214 | -- 215 | -- In this case, we create a function that lets us more easily define 216 | -- mappings specific for LSP related items. It sets the mode, buffer and 217 | -- description for us each time. 218 | local nmap = function(keys, func, desc) 219 | if desc then 220 | desc = 'LSP: ' .. desc 221 | end 222 | 223 | vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) 224 | end 225 | 226 | nmap('rn', vim.lsp.buf.rename, '[R]e[n]ame') 227 | nmap('ca', vim.lsp.buf.code_action, '[C]ode [A]ction') 228 | 229 | nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') 230 | nmap( 231 | 'gr', 232 | require('telescope.builtin').lsp_references, 233 | '[G]oto [R]eferences' 234 | ) 235 | nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation') 236 | nmap('D', vim.lsp.buf.type_definition, 'Type [D]efinition') 237 | nmap( 238 | 'ds', 239 | require('telescope.builtin').lsp_document_symbols, 240 | '[D]ocument [S]ymbols' 241 | ) 242 | nmap( 243 | 'ws', 244 | require('telescope.builtin').lsp_dynamic_workspace_symbols, 245 | '[W]orkspace [S]ymbols' 246 | ) 247 | 248 | -- See `:help K` for why this keymap 249 | nmap('K', vim.lsp.buf.hover, 'Hover Documentation') 250 | nmap('', vim.lsp.buf.signature_help, 'Signature Documentation') 251 | 252 | -- Lesser used LSP functionality 253 | nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') 254 | nmap( 255 | 'wa', 256 | vim.lsp.buf.add_workspace_folder, 257 | '[W]orkspace [A]dd Folder' 258 | ) 259 | nmap( 260 | 'wr', 261 | vim.lsp.buf.remove_workspace_folder, 262 | '[W]orkspace [R]emove Folder' 263 | ) 264 | nmap('wl', function() 265 | print(vim.inspect(vim.lsp.buf.list_workspace_folders())) 266 | end, '[W]orkspace [L]ist Folders') 267 | 268 | -- Create a command `:Format` local to the LSP buffer 269 | vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) 270 | vim.lsp.buf.format() 271 | end, { desc = 'Format current buffer with LSP' }) 272 | end 273 | 274 | -- Enable the following language servers 275 | -- Feel free to add/remove any LSPs that you want here. They will automatically 276 | -- be installed. 277 | -- 278 | -- Add any additional override configuration in the following tables. They will 279 | -- be passed to the `settings` field of the server config. You must look up 280 | -- that documentation yourself. 281 | local servers = { 282 | clangd = {}, 283 | gopls = {}, 284 | pyright = {}, 285 | rust_analyzer = {}, 286 | tsserver = {}, 287 | kotlin_language_server = {}, 288 | 289 | sumneko_lua = { 290 | Lua = { 291 | workspace = { checkThirdParty = false }, 292 | telemetry = { enable = false }, 293 | }, 294 | }, 295 | } 296 | 297 | -- Setup neovim lua configuration 298 | require('neodev').setup() 299 | 300 | -- nvim-cmp supports additional completion capabilities, so broadcast that to 301 | -- servers 302 | local capabilities = vim.lsp.protocol.make_client_capabilities() 303 | capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) 304 | 305 | -- Setup mason so it can manage external tooling 306 | require('mason').setup() 307 | 308 | -- Ensure the servers above are installed 309 | local mason_lspconfig = require 'mason-lspconfig' 310 | 311 | mason_lspconfig.setup { 312 | ensure_installed = vim.tbl_keys(servers), 313 | } 314 | 315 | mason_lspconfig.setup_handlers { 316 | function(server_name) 317 | require('lspconfig')[server_name].setup { 318 | capabilities = capabilities, 319 | on_attach = on_attach, 320 | settings = servers[server_name], 321 | } 322 | end, 323 | } 324 | 325 | -- Turn on lsp status information 326 | require('fidget').setup() 327 | 328 | require("ccls").setup({lsp = {use_defaults = true}}) 329 | 330 | -- nvim-cmp setup 331 | local cmp = require 'cmp' 332 | local luasnip = require 'luasnip' 333 | 334 | cmp.setup { 335 | snippet = { 336 | expand = function(args) 337 | luasnip.lsp_expand(args.body) 338 | end, 339 | }, 340 | mapping = cmp.mapping.preset.insert { 341 | [''] = cmp.mapping.scroll_docs(-4), 342 | [''] = cmp.mapping.scroll_docs(4), 343 | [''] = cmp.mapping.complete(), 344 | [''] = cmp.mapping.confirm { 345 | behavior = cmp.ConfirmBehavior.Replace, 346 | select = true, 347 | }, 348 | [''] = cmp.mapping(function(fallback) 349 | if cmp.visible() then 350 | cmp.select_next_item() 351 | elseif luasnip.expand_or_jumpable() then 352 | luasnip.expand_or_jump() 353 | else 354 | fallback() 355 | end 356 | end, { 'i', 's' }), 357 | [''] = cmp.mapping(function(fallback) 358 | if cmp.visible() then 359 | cmp.select_prev_item() 360 | elseif luasnip.jumpable(-1) then 361 | luasnip.jump(-1) 362 | else 363 | fallback() 364 | end 365 | end, { 'i', 's' }), 366 | }, 367 | sources = { 368 | { name = 'nvim_lsp' }, 369 | { name = 'luasnip' }, 370 | }, 371 | } 372 | 373 | require("nvim-tree").setup() 374 | 375 | require("presence").setup({ 376 | auto_update = true, 377 | neovim_image_text = "Nya~", 378 | main_image = "neovim", -- Main image display (either "neovim" or "file") 379 | client_id = "793271441293967371", 380 | log_level = nil, 381 | debounce_timeout = 10, 382 | enable_line_number = true, 383 | blacklist = {}, 384 | buttons = true, 385 | file_assets = {}, 386 | show_time = true, 387 | 388 | -- Rich Presence text options 389 | editing_text = "Editing %s", 390 | file_explorer_text = "Browsing %s", 391 | git_commit_text = "Committing changes", 392 | plugin_manager_text = "Managing plugins", 393 | reading_text = "Reading %s", 394 | workspace_text = "Working on %s", 395 | line_number_text = "Line %s out of %s", 396 | }) 397 | 398 | vim.api.nvim_set_hl(0, "pets_popup", { bg = "#22272e" }) 399 | require("pets").setup({ 400 | speed_multiplier = 1, 401 | random = true, 402 | death_animation = false, 403 | popup = { 404 | hl = { Normal = "pets_popup" }, 405 | avoid_statusline = true, 406 | } 407 | }) 408 | 409 | require("smartcolumn").setup() 410 | 411 | require("cmake-tools").setup { 412 | cmake_build_directory = "build" 413 | } 414 | 415 | require('barbar').setup { 416 | sidebar_filetypes = { 417 | NvimTree = true 418 | } 419 | } 420 | 421 | -- barbar mappings 422 | 423 | local map = vim.api.nvim_set_keymap 424 | local opts = { noremap = true, silent = true } 425 | 426 | -- Move to previous/next 427 | map('n', '', 'BufferPrevious', opts) 428 | map('n', '', 'BufferNext', opts) 429 | -- Re-order to previous/next 430 | map('n', '', 'BufferMovePrevious', opts) 431 | map('n', '>', 'BufferMoveNext', opts) 432 | -- Goto buffer in position... 433 | map('n', '', 'BufferGoto 1', opts) 434 | map('n', '', 'BufferGoto 2', opts) 435 | map('n', '', 'BufferGoto 3', opts) 436 | map('n', '', 'BufferGoto 4', opts) 437 | map('n', '', 'BufferGoto 5', opts) 438 | map('n', '', 'BufferGoto 6', opts) 439 | map('n', '', 'BufferGoto 7', opts) 440 | map('n', '', 'BufferGoto 8', opts) 441 | map('n', '', 'BufferGoto 9', opts) 442 | map('n', '', 'BufferLast', opts) 443 | -- Pin/unpin buffer 444 | map('n', '', 'BufferPin', opts) 445 | -- Close buffer 446 | map('n', '', 'BufferClose', opts) 447 | 448 | -------------------------------------------------------------------------------- /picom/.config/picom.conf: -------------------------------------------------------------------------------- 1 | ################################# 2 | # Corners # 3 | ################################# 4 | # requires: https://github.com/sdhand/compton 5 | corner-radius = 5.0; 6 | rounded-corners-exclude = [ 7 | #"window_type = 'normal'", 8 | #"class_g = 'kitty'", 9 | "class_g = 'Alacritty'", 10 | "class_g = 'Polybar'", 11 | "class_g = 'dev-lizainslie-saku-examples-editor-MainKt'", 12 | #"class_g = 'code-oss'", 13 | #"class_g = 'firefox'", 14 | #"class_g = 'Thunderbird'", 15 | "class_g ?= 'eww-bar'" 16 | ]; 17 | round-borders = 0; 18 | round-borders-exclude = [ 19 | #"class_g = 'TelegramDesktop'", 20 | ]; 21 | 22 | # Specify a list of border width rules, in the format `PIXELS:PATTERN`, 23 | # Note we don't make any guarantee about possible conflicts with the 24 | # border_width set by the window manager. 25 | # 26 | # example: 27 | # round-borders-rule = [ "2:class_g = 'URxvt'" ]; 28 | # 29 | round-borders-rule = [ 30 | "3:class_g = 'XTerm'", 31 | "3:class_g = 'URxvt'", 32 | "10:class_g = 'Alacritty'", 33 | "15:class_g = 'Signal'" 34 | ]; 35 | 36 | ################################# 37 | # Shadows # 38 | ################################# 39 | 40 | shadow-radius = 10; 41 | 42 | # The opacity of shadows. (0.0 - 1.0, defaults to 0.75) 43 | # shadow-opacity = .75 44 | 45 | # The left offset for shadows, in pixels. (defaults to -15) 46 | # shadow-offset-x = -15 47 | shadow-offset-x = -10; 48 | 49 | # The top offset for shadows, in pixels. (defaults to -15) 50 | # shadow-offset-y = -15 51 | shadow-offset-y = -10; 52 | 53 | 54 | 55 | # Specify a list of conditions of windows that should have no shadow. 56 | # 57 | # examples: 58 | # shadow-exclude = "n:e:Notification"; 59 | # 60 | # shadow-exclude = [] 61 | shadow-exclude = [ 62 | "name = 'Notification'", 63 | "class_g = 'Conky'", 64 | "class_g ?= 'Notify-osd'", 65 | "class_g = 'Cairo-clock'", 66 | "class_g = 'slop'", 67 | "class_g = 'Polybar'", 68 | "class_g ?= 'activate-linux'", 69 | "_GTK_FRAME_EXTENTS@:c" 70 | ]; 71 | 72 | # Specify a X geometry that describes the region in which shadow should not 73 | # be painted in, such as a dock window region. Use 74 | # shadow-exclude-reg = "x10+0+0" 75 | # for example, if the 10 pixels on the bottom of the screen should not have shadows painted on. 76 | # 77 | # shadow-exclude-reg = "" 78 | 79 | # Crop shadow of a window fully on a particular Xinerama screen to the screen. 80 | # xinerama-shadow-crop = false 81 | 82 | 83 | ################################# 84 | # Fading # 85 | ################################# 86 | 87 | 88 | # Fade windows in/out when opening/closing and when opacity changes, 89 | # unless no-fading-openclose is used. 90 | # fading = false 91 | fading = true; 92 | 93 | # Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028) 94 | # fade-in-step = 0.028 95 | fade-in-step = 0.03; 96 | 97 | # Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03) 98 | # fade-out-step = 0.03 99 | fade-out-step = 0.03; 100 | 101 | # The time between steps in fade step, in milliseconds. (> 0, defaults to 10) 102 | # fade-delta = 10 103 | 104 | # Specify a list of conditions of windows that should not be faded. 105 | # don't need this, we disable fading for all normal windows with wintypes: {} 106 | fade-exclude = [ 107 | "class_g = 'slop'" # maim 108 | ] 109 | 110 | # Do not fade on window open/close. 111 | # no-fading-openclose = false 112 | 113 | # Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc. 114 | # no-fading-destroyed-argb = false 115 | 116 | 117 | ################################# 118 | # Transparency / Opacity # 119 | ################################# 120 | 121 | 122 | # Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0) 123 | # inactive-opacity = 1 124 | inactive-opacity = 0.8; 125 | 126 | # Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default) 127 | # frame-opacity = 1.0 128 | frame-opacity = 1.0; 129 | 130 | # Let inactive opacity set by -i override the '_NET_WM_OPACITY' values of windows. 131 | # inactive-opacity-override = true 132 | inactive-opacity-override = false; 133 | 134 | # Default opacity for active windows. (0.0 - 1.0, defaults to 1.0) 135 | active-opacity = 1.0; 136 | 137 | # Dim inactive windows. (0.0 - 1.0, defaults to 0.0) 138 | # inactive-dim = 0.0 139 | 140 | # Specify a list of conditions of windows that should always be considered focused. 141 | # focus-exclude = [] 142 | focus-exclude = [ 143 | "class_g = 'Cairo-clock'", 144 | "class_g = 'Bar'", # lemonbar 145 | "class_g = 'slop'" # maim 146 | ]; 147 | 148 | # Use fixed inactive dim value, instead of adjusting according to window opacity. 149 | # inactive-dim-fixed = 1.0 150 | 151 | # Specify a list of opacity rules, in the format `PERCENT:PATTERN`, 152 | # like `50:name *= "Firefox"`. picom-trans is recommended over this. 153 | # Note we don't make any guarantee about possible conflicts with other 154 | # programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows. 155 | # example: 156 | # opacity-rule = [ "80:class_g = 'URxvt'" ]; 157 | # 158 | # opacity-rule = [] 159 | opacity-rule = [ 160 | "80:class_g = 'Bar'", # lemonbar 161 | "100:class_g = 'slop'", # maim 162 | "100:class_g = 'XTerm'", 163 | "100:class_g = 'URxvt'", 164 | "100:class_g = 'kitty'", 165 | "100:class_g = 'Alacritty'", 166 | "80:class_g = 'Polybar'", 167 | "100:class_g = 'code-oss'", 168 | "100:class_g = 'Meld'", 169 | "70:class_g = 'TelegramDesktop'", 170 | "90:class_g = 'Joplin'", 171 | "100:class_g = 'firefox'", 172 | "100:class_g = 'Thunderbird'" 173 | ]; 174 | 175 | 176 | ################################# 177 | # Background-Blurring # 178 | ################################# 179 | 180 | 181 | # Parameters for background blurring, see the *BLUR* section for more information. 182 | # blur-method = 183 | # blur-size = 12 184 | # 185 | # blur-deviation = false 186 | # 187 | # blur-strength = 5 188 | 189 | # Blur background of semi-transparent / ARGB windows. 190 | # Bad in performance, with driver-dependent behavior. 191 | # The name of the switch may change without prior notifications. 192 | # 193 | # blur-background = true; 194 | 195 | # Blur background of windows when the window frame is not opaque. 196 | # Implies: 197 | # blur-background 198 | # Bad in performance, with driver-dependent behavior. The name may change. 199 | # 200 | # blur-background-frame = false; 201 | 202 | 203 | # Use fixed blur strength rather than adjusting according to window opacity. 204 | # blur-background-fixed = false; 205 | 206 | 207 | # Specify the blur convolution kernel, with the following format: 208 | # example: 209 | # blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"; 210 | # 211 | # blur-kern = "" 212 | blur-kern = "3x3box"; 213 | 214 | 215 | blur: { 216 | # requires: https://github.com/ibhagwan/picom 217 | method = "kawase"; 218 | #method = "kernel"; 219 | strength = 7; 220 | # deviation = 1.0; 221 | # kernel = "11x11gaussian"; 222 | background = false; 223 | background-frame = false; 224 | background-fixed = false; 225 | kern = "3x3box"; 226 | } 227 | 228 | # Exclude conditions for background blur. 229 | blur-background-exclude = [ 230 | #"window_type = 'dock'", 231 | #"window_type = 'desktop'", 232 | #"class_g = 'URxvt'", 233 | # 234 | # prevents picom from blurring the background 235 | # when taking selection screenshot with `main` 236 | # https://github.com/naelstrof/maim/issues/130 237 | "class_g = 'slop'", 238 | "_GTK_FRAME_EXTENTS@:c", 239 | "class_g ?= 'activate-linux'", 240 | "class_g ?= 'peek'", 241 | ]; 242 | 243 | ################################# 244 | # General Settings # 245 | ################################# 246 | 247 | # Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers. 248 | # daemon = false 249 | 250 | # Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`. 251 | # `xrender` is the default one. 252 | # 253 | experimental-backends = true; 254 | backend = "glx"; 255 | #backend = "xrender"; 256 | 257 | 258 | # Enable/disable VSync. 259 | # vsync = false 260 | vsync = true; 261 | 262 | # Enable remote control via D-Bus. See the *D-BUS API* section below for more details. 263 | # dbus = false 264 | 265 | # Try to detect WM windows (a non-override-redirect window with no 266 | # child that has 'WM_STATE') and mark them as active. 267 | # 268 | # mark-wmwin-focused = false 269 | mark-wmwin-focused = true; 270 | 271 | # Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused. 272 | # mark-ovredir-focused = false 273 | mark-ovredir-focused = true; 274 | 275 | # Try to detect windows with rounded corners and don't consider them 276 | # shaped windows. The accuracy is not very high, unfortunately. 277 | # 278 | # detect-rounded-corners = false 279 | detect-rounded-corners = true; 280 | 281 | # Detect '_NET_WM_OPACITY' on client windows, useful for window managers 282 | # not passing '_NET_WM_OPACITY' of client windows to frame windows. 283 | # 284 | # detect-client-opacity = false 285 | detect-client-opacity = true; 286 | 287 | # Specify refresh rate of the screen. If not specified or 0, picom will 288 | # try detecting this with X RandR extension. 289 | # 290 | # refresh-rate = 60 291 | refresh-rate = 0; 292 | 293 | # Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window, 294 | # rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy, 295 | # provided that the WM supports it. 296 | # 297 | # use-ewmh-active-win = false 298 | 299 | # Unredirect all windows if a full-screen opaque window is detected, 300 | # to maximize performance for full-screen windows. Known to cause flickering 301 | # when redirecting/unredirecting windows. 302 | # 303 | # unredir-if-possible = false 304 | 305 | # Delay before unredirecting the window, in milliseconds. Defaults to 0. 306 | # unredir-if-possible-delay = 0 307 | 308 | # Conditions of windows that shouldn't be considered full-screen for unredirecting screen. 309 | # unredir-if-possible-exclude = [] 310 | 311 | # Use 'WM_TRANSIENT_FOR' to group windows, and consider windows 312 | # in the same group focused at the same time. 313 | # 314 | # detect-transient = false 315 | detect-transient = true; 316 | 317 | # Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same 318 | # group focused at the same time. 'WM_TRANSIENT_FOR' has higher priority if 319 | # detect-transient is enabled, too. 320 | # 321 | # detect-client-leader = false 322 | detect-client-leader = true; 323 | 324 | # Resize damaged region by a specific number of pixels. 325 | # A positive value enlarges it while a negative one shrinks it. 326 | # If the value is positive, those additional pixels will not be actually painted 327 | # to screen, only used in blur calculation, and such. (Due to technical limitations, 328 | # with use-damage, those pixels will still be incorrectly painted to screen.) 329 | # Primarily used to fix the line corruption issues of blur, 330 | # in which case you should use the blur radius value here 331 | # (e.g. with a 3x3 kernel, you should use `--resize-damage 1`, 332 | # with a 5x5 one you use `--resize-damage 2`, and so on). 333 | # May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly. 334 | # 335 | # resize-damage = 1 336 | 337 | # Specify a list of conditions of windows that should be painted with inverted color. 338 | # Resource-hogging, and is not well tested. 339 | # 340 | # invert-color-include = [] 341 | 342 | # GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer. 343 | # Might cause incorrect opacity when rendering transparent content (but never 344 | # practically happened) and may not work with blur-background. 345 | # My tests show a 15% performance boost. Recommended. 346 | # 347 | # glx-no-stencil = false 348 | 349 | # GLX backend: Avoid rebinding pixmap on window damage. 350 | # Probably could improve performance on rapid window content changes, 351 | # but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.). 352 | # Recommended if it works. 353 | # 354 | # glx-no-rebind-pixmap = false 355 | 356 | # Disable the use of damage information. 357 | # This cause the whole screen to be redrawn everytime, instead of the part of the screen 358 | # has actually changed. Potentially degrades the performance, but might fix some artifacts. 359 | # The opposing option is use-damage 360 | # 361 | # no-use-damage = false 362 | use-damage = true; 363 | 364 | # Use X Sync fence to sync clients' draw calls, to make sure all draw 365 | # calls are finished before picom starts drawing. Needed on nvidia-drivers 366 | # with GLX backend for some users. 367 | # 368 | # xrender-sync-fence = false 369 | 370 | # GLX backend: Use specified GLSL fragment shader for rendering window contents. 371 | # See `compton-default-fshader-win.glsl` and `compton-fake-transparency-fshader-win.glsl` 372 | # in the source tree for examples. 373 | # 374 | # glx-fshader-win = "" 375 | 376 | # Force all windows to be painted with blending. Useful if you 377 | # have a glx-fshader-win that could turn opaque pixels transparent. 378 | # 379 | # force-win-blend = false 380 | 381 | # Do not use EWMH to detect fullscreen windows. 382 | # Reverts to checking if a window is fullscreen based only on its size and coordinates. 383 | # 384 | # no-ewmh-fullscreen = false 385 | 386 | # Dimming bright windows so their brightness doesn't exceed this set value. 387 | # Brightness of a window is estimated by averaging all pixels in the window, 388 | # so this could comes with a performance hit. 389 | # Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0) 390 | # 391 | # max-brightness = 1.0 392 | 393 | # Make transparent windows clip other windows like non-transparent windows do, 394 | # instead of blending on top of them. 395 | # 396 | # transparent-clipping = false 397 | 398 | # Set the log level. Possible values are: 399 | # "trace", "debug", "info", "warn", "error" 400 | # in increasing level of importance. Case doesn't matter. 401 | # If using the "TRACE" log level, it's better to log into a file 402 | # using *--log-file*, since it can generate a huge stream of logs. 403 | # 404 | # log-level = "debug" 405 | log-level = "info"; 406 | 407 | # Set the log file. 408 | # If *--log-file* is never specified, logs will be written to stderr. 409 | # Otherwise, logs will to written to the given file, though some of the early 410 | # logs might still be written to the stderr. 411 | # When setting this option from the config file, it is recommended to use an absolute path. 412 | # 413 | # log-file = "/path/to/your/log/file" 414 | 415 | # Show all X errors (for debugging) 416 | # show-all-xerrors = false 417 | 418 | # Write process ID to a file. 419 | # write-pid-path = "/path/to/your/log/file" 420 | 421 | # Window type settings 422 | # 423 | # 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard: 424 | # "unknown", "desktop", "dock", "toolbar", "menu", "utility", 425 | # "splash", "dialog", "normal", "dropdown_menu", "popup_menu", 426 | # "tooltip", "notification", "combo", and "dnd". 427 | # 428 | # Following per window-type options are available: :: 429 | # 430 | # fade, shadow::: 431 | # Controls window-type-specific shadow and fade settings. 432 | # 433 | # opacity::: 434 | # Controls default opacity of the window type. 435 | # 436 | # focus::: 437 | # Controls whether the window of this type is to be always considered focused. 438 | # (By default, all window types except "normal" and "dialog" has this on.) 439 | # 440 | # full-shadow::: 441 | # Controls whether shadow is drawn under the parts of the window that you 442 | # normally won't be able to see. Useful when the window has parts of it 443 | # transparent, and you want shadows in those areas. 444 | # 445 | # redir-ignore::: 446 | # Controls whether this type of windows should cause screen to become 447 | # redirected again after been unredirected. If you have unredir-if-possible 448 | # set, and doesn't want certain window to cause unnecessary screen redirection, 449 | # you can set this to `true`. 450 | # 451 | wintypes: 452 | { 453 | normal = { fade = true; shadow = false; full-shadow = true; } 454 | tooltip = { fade = true; shadow = false; opacity = 0.75; focus = true; }; 455 | dock = { shadow = false; } 456 | dnd = { shadow = false; } 457 | popup_menu = { opacity = 0.8; } 458 | dropdown_menu = { opacity = 0.8; } 459 | }; 460 | -------------------------------------------------------------------------------- /screenshots/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LizAinslie/dotfiles/35aad8ccfc2007f9400048cabbc78e791cfad5a4/screenshots/01.png -------------------------------------------------------------------------------- /screenshots/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LizAinslie/dotfiles/35aad8ccfc2007f9400048cabbc78e791cfad5a4/screenshots/02.png -------------------------------------------------------------------------------- /screenshots/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LizAinslie/dotfiles/35aad8ccfc2007f9400048cabbc78e791cfad5a4/screenshots/03.png -------------------------------------------------------------------------------- /screenshots/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LizAinslie/dotfiles/35aad8ccfc2007f9400048cabbc78e791cfad5a4/screenshots/04.png -------------------------------------------------------------------------------- /screenshots/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LizAinslie/dotfiles/35aad8ccfc2007f9400048cabbc78e791cfad5a4/screenshots/05.png --------------------------------------------------------------------------------