Configuration files

Remove theme directory

Changed files
-8128
theme
.config
.fonts
leftwm
theme
-603
theme/.config/alacritty/alacritty.yml
··· 1 - 2 - # Configuration for Alacritty, the GPU enhanced terminal emulator. 3 - 4 - 5 - # Any items in the `env` entry below will be added as 6 - # environment variables. Some entries may override variables 7 - # set by alacritty itself. 8 - env: 9 - # TERM variable 10 - # 11 - # This value is used to set the `$TERM` environment variable for 12 - # each instance of Alacritty. If it is not present, alacritty will 13 - # check the local terminfo database and use 'alacritty' if it is 14 - # available, otherwise 'xterm-256color' is used. 15 - # 16 - # TERM: alacritty 17 - WINIT_HIDPI_FACTOR: "1" 18 - 19 - window: 20 - # Window dimensions (changes require restart) 21 - # 22 - # Specified in number of columns/lines, not pixels. 23 - # If both are `0`, this setting is ignored. 24 - dimensions: 25 - columns: 85 26 - lines: 28 27 - 28 - # Window padding (changes require restart) 29 - # 30 - # Blank space added around the window in pixels. This padding is scaled 31 - # by DPI and the specified value is always added at both opposing sides. 32 - padding: 33 - x: 8 34 - y: 8 35 - 36 - # Spread additional padding evenly around the terminal content. 37 - dynamic_padding: false 38 - 39 - # Window decorations 40 - # 41 - # Values for `decorations`: 42 - # - full: Borders and title bar 43 - # - none: Neither borders nor title bar 44 - decorations: full 45 - # Window title 46 - #title: Alacritty 47 - 48 - # Window class (Linux only): 49 - #class: Alacritty 50 - 51 - scrolling: 52 - # Maximum number of lines in the scrollback buffer. 53 - # Specifying '0' will disable scrolling. 54 - history: 100000 55 - 56 - # Number of lines the viewport will move for every line scrolled when 57 - # scrollback is enabled (history > 0). 58 - multiplier: 3 59 - 60 - # Faux Scrolling 61 - # 62 - # The `faux_multiplier` setting controls the number of lines the terminal 63 - # should scroll when the alternate screen buffer is active. This is used 64 - # to allow mouse scrolling for applications like `man`. 65 - # 66 - # Specifying `0` will disable faux scrolling. 67 - #faux_multiplier: 3 68 - 69 - # Scroll to the bottom when new text is written to the terminal. 70 - # auto_scroll: false 71 - 72 - # Spaces per Tab (changes require restart) 73 - # 74 - # This setting defines the width of a tab in cells. 75 - # 76 - # Some applications, like Emacs, rely on knowing about the width of a tab. 77 - # To prevent unexpected behavior in these applications, it's also required to 78 - # change the `it` value in terminfo when altering this setting. 79 - # tabspaces: 8 80 - 81 - # Font configuration (changes require restart) 82 - font: 83 - # Normal (roman) font face 84 - normal: 85 - family: Hack 86 - # The `style` can be specified to pick a specific face. 87 - #style: Regular 88 - 89 - # Bold font face 90 - bold: 91 - family: Hack 92 - # The `style` can be specified to pick a specific face. 93 - #style: Bold 94 - 95 - # Italic font face 96 - italic: 97 - family: Hack 98 - # The `style` can be specified to pick a specific face. 99 - #style: Italic 100 - 101 - # Point size 102 - size: 10.5 103 - 104 - # Offset is the extra space around each character. `offset.y` can be thought of 105 - # as modifying the line spacing, and `offset.x` as modifying the letter spacing. 106 - offset: 107 - x: 0 108 - y: 0 109 - 110 - # Glyph offset determines the locations of the glyphs within their cells with 111 - # the default being at the bottom. Increasing `x` moves the glyph to the right, 112 - # increasing `y` moves the glyph upwards. 113 - glyph_offset: 114 - x: 0 115 - y: 0 116 - 117 - 118 - 119 - # # Base16 PaperColor Light - alacritty color config 120 - # # Jon Leopard (http://github.com/jonleopard) based on PaperColor Theme (https://github.com/NLKNguyen/papercolor-theme) 121 - # colors: 122 - # # Default colors 123 - # primary: 124 - # background: '0xffffff' 125 - # foreground: '0x373b41' 126 - 127 - # # Colors the cursor will use if `custom_cursor_colors` is true 128 - # cursor: 129 - # text: '0xeeeeee' 130 - # cursor: '0x444444' 131 - 132 - # # Normal colors 133 - # normal: 134 - # black: '0x444444' 135 - # red: '0xaf0000' 136 - # green: '0x5f8700' 137 - # yellow: '0xd75f00' 138 - # blue: '0x005f87' 139 - # magenta: '0xd70087' 140 - # cyan: '0x0087af' 141 - # white: '0xbcbcbc' 142 - 143 - # # Bright colors 144 - # bright: 145 - # black: '0x444444' 146 - # red: '0xd70000' 147 - # green: '0x008700' 148 - # yellow: '0xd75f00' 149 - # blue: '0x005faf' 150 - # magenta: '0xbcbcbc' 151 - # cyan: '0x444444' 152 - # white: '0xbcbcbc' 153 - 154 - 155 - # ... 156 - 157 - # Colors (Dracula) 158 - colors: 159 - # Default colors 160 - primary: 161 - background: '0x282a36' 162 - foreground: '0xf8f8f2' 163 - 164 - # Bright and dim foreground colors 165 - # 166 - # The dimmed foreground color is calculated automatically if it is not present. 167 - # If the bright foreground color is not set, or `draw_bold_text_with_bright_colors` 168 - # is `false`, the normal foreground color will be used. 169 - #dim_foreground: '0x9a9a9a' 170 - #bright_foreground: '0xffffff' 171 - 172 - # Cursor colors 173 - # 174 - # Colors which should be used to draw the terminal cursor. If these are unset, 175 - # the cursor color will be the inverse of the cell color. 176 - cursor: 177 - text: '0x44475a' 178 - cursor: '0xf8f8f2' 179 - 180 - # Normal colors 181 - normal: 182 - black: '0x000000' 183 - red: '0xff5555' 184 - green: '0x50fa7b' 185 - yellow: '0xf1fa8c' 186 - blue: '0xbd93f9' 187 - magenta: '0xff79c6' 188 - cyan: '0x8be9fd' 189 - white: '0xbfbfbf' 190 - 191 - # Bright colors 192 - bright: 193 - black: '0x4d4d4d' 194 - red: '0xff6e67' 195 - green: '0x5af78e' 196 - yellow: '0xf4f99d' 197 - blue: '0xcaa9fa' 198 - magenta: '0xff92d0' 199 - cyan: '0x9aedfe' 200 - white: '0xe6e6e6' 201 - 202 - # Dim colors 203 - # 204 - # If the dim colors are not set, they will be calculated automatically based 205 - # on the `normal` colors. 206 - dim: 207 - black: '0x14151b' 208 - red: '0xff2222' 209 - green: '0x1ef956' 210 - yellow: '0xebf85b' 211 - blue: '0x4d5b86' 212 - magenta: '0xff46b0' 213 - cyan: '0x59dffc' 214 - white: '0xe6e6d1' 215 - 216 - # Indexed Colors 217 - # 218 - # The indexed colors include all colors from 16 to 256. 219 - # When these are not set, they're filled with sensible defaults. 220 - # 221 - # Example: 222 - # `- { index: 16, color: '0xff00ff' }` 223 - # 224 - indexed_colors: [] 225 - 226 - # Visual Bell 227 - # ... 228 - 229 - 230 - # Visual Bell 231 - # 232 - # Any time the BEL code is received, Alacritty "rings" the visual bell. Once 233 - # rung, the terminal background will be set to white and transition back to the 234 - # default background color. You can control the rate of this transition by 235 - # setting the `duration` property (represented in milliseconds). You can also 236 - # configure the transition function by setting the `animation` property. 237 - # 238 - # Values for `animation`: 239 - # - Ease 240 - # - EaseOut 241 - # - EaseOutSine 242 - # - EaseOutQuad 243 - # - EaseOutCubic 244 - # - EaseOutQuart 245 - # - EaseOutQuint 246 - # - EaseOutExpo 247 - # - EaseOutCirc 248 - # - Linear 249 - # 250 - # Specifying a `duration` of `0` will disable the visual bell. 251 - bell: 252 - animation: EaseOutExpo 253 - duration: 1 254 - color: '0xffffff' 255 - 256 - # Background opacity 257 - # 258 - # Window opacity as a floating point number from `0.0` to `1.0`. 259 - # The value `0.0` is completely transparent and `1.0` is opaque. 260 - background_opacity: 0.90 261 - 262 - # Mouse bindings 263 - # 264 - # Available fields: 265 - # - mouse 266 - # - action 267 - # - mods (optional) 268 - # 269 - # Values for `mouse`: 270 - # - Middle 271 - # - Left 272 - # - Right 273 - # - Numeric identifier such as `5` 274 - # 275 - # All available `mods` and `action` values are documented in the key binding 276 - # section. 277 - mouse_bindings: 278 - - { mouse: Middle, action: PasteSelection } 279 - 280 - mouse: 281 - # Click settings 282 - # 283 - # The `double_click` and `triple_click` settings control the time 284 - # alacritty should wait for accepting multiple clicks as one double 285 - # or triple click. 286 - double_click: { threshold: 300 } 287 - triple_click: { threshold: 300 } 288 - hide_when_typing: false 289 - 290 - url: 291 - # URL launcher 292 - # 293 - # This program is executed when clicking on a text which is recognized as a URL. 294 - # The URL is always added to the command as the last parameter. 295 - # 296 - # When set to `None`, URL launching will be disabled completely. 297 - # 298 - # Default: 299 - # - (macOS) open 300 - # - (Linux) xdg-open 301 - # - (Windows) explorer 302 - #launcher: 303 - # program: xdg-open 304 - # args: [] 305 - 306 - # URL modifiers 307 - # 308 - # These are the modifiers that need to be held down for opening URLs when clicking 309 - # on them. The available modifiers are documented in the key binding section. 310 - modifiers: None 311 - 312 - selection: 313 - semantic_escape_chars: ",│`|:\"' ()[]{}<>" 314 - 315 - # When set to `true`, selected text will be copied to the primary clipboard. 316 - save_to_clipboard: false 317 - 318 - # Allow terminal applications to change Alacritty's window title. 319 - dynamic_title: true 320 - 321 - cursor: 322 - # Cursor style 323 - # 324 - # Values for `style`: 325 - # - ▇ Block 326 - # - _ Underline 327 - # - | Beam 328 - style: Block 329 - 330 - # If this is `true`, the cursor will be rendered as a hollow box when the 331 - # window is not focused. 332 - unfocused_hollow: true 333 - 334 - # Live config reload (changes require restart) 335 - live_config_reload: true 336 - 337 - # Shell 338 - # 339 - # You can set `shell.program` to the path of your favorite shell, e.g. `/bin/fish`. 340 - # Entries in `shell.args` are passed unmodified as arguments to the shell. 341 - # 342 - # Default: 343 - # - (macOS) /bin/bash --login 344 - # - (Linux) user login shell 345 - # - (Windows) powershell 346 - #shell: 347 - # program: /bin/bash 348 - # args: 349 - # - --login 350 - 351 - # Startup directory 352 - # 353 - # Directory the shell is started in. If this is unset, or `None`, the working 354 - # directory of the parent process will be used. 355 - working_directory: None 356 - 357 - # Windows 10 ConPTY backend (Windows only) 358 - # 359 - # This will enable better color support and may resolve other issues, 360 - # however this API and its implementation is still young and so is 361 - # disabled by default, as stability may not be as good as the winpty 362 - # backend. 363 - # 364 - # Alacritty will fall back to the WinPTY automatically if the ConPTY 365 - # backend cannot be initialized. 366 - enable_experimental_conpty_backend: false 367 - 368 - # Send ESC (\x1b) before characters when alt is pressed. 369 - alt_send_esc: true 370 - 371 - debug: 372 - # Display the time it takes to redraw each frame. 373 - render_timer: false 374 - 375 - # Keep the log file after quitting Alacritty. 376 - persistent_logging: false 377 - 378 - # Log level 379 - # 380 - # Values for `log_level`: 381 - # - None 382 - # - Error 383 - # - Warn 384 - # - Info 385 - # - Debug 386 - # - Trace 387 - log_level: Warn 388 - 389 - # Print all received window events. 390 - print_events: false 391 - 392 - # Record all characters and escape sequences as test data. 393 - ref_test: false 394 - 395 - # Key bindings 396 - # 397 - # Key bindings are specified as a list of objects. Each binding will specify a 398 - # key and modifiers required to trigger it, terminal modes where the binding is 399 - # applicable, and what should be done when the key binding fires. It can either 400 - # send a byte sequence to the running application (`chars`), execute a 401 - # predefined action (`action`) or fork and execute a specified command plus 402 - # arguments (`command`). 403 - # 404 - # Bindings are always filled by default, but will be replaced when a new binding 405 - # with the same triggers is defined. To unset a default binding, it can be 406 - # mapped to the `None` action. 407 - # 408 - # Example: 409 - # `- { key: V, mods: Control|Shift, action: Paste }` 410 - # 411 - # Available fields: 412 - # - key 413 - # - mods (optional) 414 - # - chars | action | command (exactly one required) 415 - # - mode (optional) 416 - # 417 - # Values for `key`: 418 - # - `A` -> `Z` 419 - # - `F1` -> `F12` 420 - # - `Key1` -> `Key0` 421 - # 422 - # A full list with available key codes can be found here: 423 - # https://docs.rs/glutin/*/glutin/enum.VirtualKeyCode.html#variants 424 - # 425 - # Instead of using the name of the keys, the `key` field also supports using 426 - # the scancode of the desired key. Scancodes have to be specified as a 427 - # decimal number. 428 - # This command will allow you to display the hex scancodes for certain keys: 429 - # `showkey --scancodes` 430 - # 431 - # Values for `mods`: 432 - # - Command 433 - # - Control 434 - # - Option 435 - # - Super 436 - # - Shift 437 - # - Alt 438 - # 439 - # Multiple `mods` can be combined using `|` like this: `mods: Control|Shift`. 440 - # Whitespace and capitalization is relevant and must match the example. 441 - # 442 - # Values for `chars`: 443 - # The `chars` field writes the specified string to the terminal. This makes 444 - # it possible to pass escape sequences. 445 - # To find escape codes for bindings like `PageUp` ("\x1b[5~"), you can run 446 - # the command `showkey -a` outside of tmux. 447 - # Note that applications use terminfo to map escape sequences back to 448 - # keys. It is therefore required to update the terminfo when 449 - # changing an escape sequence. 450 - # 451 - # Values for `action`: 452 - # - Paste 453 - # - PasteSelection 454 - # - Copy 455 - # - IncreaseFontSize 456 - # - DecreaseFontSize 457 - # - ResetFontSize 458 - # - ScrollPageUp 459 - # - ScrollPageDown 460 - # - ScrollLineUp 461 - # - ScrollLineDown 462 - # - ScrollToTop 463 - # - ScrollToBottom 464 - # - ClearHistory 465 - # - Hide 466 - # - Quit 467 - # - ClearLogNotice 468 - # - SpawnNewInstance 469 - # - ToggleFullscreen 470 - # - None 471 - # 472 - # Values for `action` (macOS only): 473 - # - ToggleSimpleFullscreen: Enters fullscreen without occupying another space 474 - # 475 - # Values for `command`: 476 - # The `command` field must be a map containing a `program` string and 477 - # an `args` array of command line parameter strings. 478 - # 479 - # Example: 480 - # `command: { program: "alacritty", args: ["-e", "vttest"] }` 481 - # 482 - # Values for `mode`: 483 - # - ~AppCursor 484 - # - AppCursor 485 - # - ~AppKeypad 486 - # - AppKeypad 487 - key_bindings: 488 - # (Windows/Linux only) 489 - - { key: V, mods: Control|Shift, action: Paste } 490 - - { key: C, mods: Control|Shift, action: Copy } 491 - - { key: Insert, mods: Shift, action: PasteSelection } 492 - - { key: Key0, mods: Control, action: ResetFontSize } 493 - - { key: Equals, mods: Control, action: IncreaseFontSize } 494 - - { key: Plus, mods: Control, action: IncreaseFontSize } 495 - - { key: Minus, mods: Control, action: DecreaseFontSize } 496 - #- { key: Return, mods: Alt, action: ToggleFullscreen } 497 - 498 - - { key: Paste, action: Paste } 499 - - { key: Copy, action: Copy } 500 - - { key: L, mods: Control, action: ClearLogNotice } 501 - - { key: L, mods: Control, chars: "\x0c" } 502 - - { key: Home, mods: Alt, chars: "\x1b[1;3H" } 503 - - { key: Home, chars: "\x1bOH", mode: AppCursor } 504 - - { key: Home, chars: "\x1b[H", mode: ~AppCursor } 505 - - { key: End, mods: Alt, chars: "\x1b[1;3F" } 506 - - { key: End, chars: "\x1bOF", mode: AppCursor } 507 - - { key: End, chars: "\x1b[F", mode: ~AppCursor } 508 - - { key: PageUp, mods: Shift, action: ScrollPageUp, mode: ~Alt } 509 - - { key: PageUp, mods: Shift, chars: "\x1b[5;2~", mode: Alt } 510 - - { key: PageUp, mods: Control, chars: "\x1b[5;5~" } 511 - - { key: PageUp, mods: Alt, chars: "\x1b[5;3~" } 512 - - { key: PageUp, chars: "\x1b[5~" } 513 - - { key: PageDown, mods: Shift, action: ScrollPageDown, mode: ~Alt } 514 - - { key: PageDown, mods: Shift, chars: "\x1b[6;2~", mode: Alt } 515 - - { key: PageDown, mods: Control, chars: "\x1b[6;5~" } 516 - - { key: PageDown, mods: Alt, chars: "\x1b[6;3~" } 517 - - { key: PageDown, chars: "\x1b[6~" } 518 - - { key: Tab, mods: Shift, chars: "\x1b[Z" } 519 - - { key: Back, chars: "\x7f" } 520 - - { key: Back, mods: Alt, chars: "\x1b\x7f" } 521 - - { key: Insert, chars: "\x1b[2~" } 522 - - { key: Delete, chars: "\x1b[3~" } 523 - - { key: Left, mods: Shift, chars: "\x1b[1;2D" } 524 - - { key: Left, mods: Control, chars: "\x1b[1;5D" } 525 - - { key: Left, mods: Alt, chars: "\x1b[1;3D" } 526 - - { key: Left, chars: "\x1b[D", mode: ~AppCursor } 527 - - { key: Left, chars: "\x1bOD", mode: AppCursor } 528 - - { key: Right, mods: Shift, chars: "\x1b[1;2C" } 529 - - { key: Right, mods: Control, chars: "\x1b[1;5C" } 530 - - { key: Right, mods: Alt, chars: "\x1b[1;3C" } 531 - - { key: Right, chars: "\x1b[C", mode: ~AppCursor } 532 - - { key: Right, chars: "\x1bOC", mode: AppCursor } 533 - - { key: Up, mods: Shift, chars: "\x1b[1;2A" } 534 - - { key: Up, mods: Control, chars: "\x1b[1;5A" } 535 - - { key: Up, mods: Alt, chars: "\x1b[1;3A" } 536 - - { key: Up, chars: "\x1b[A", mode: ~AppCursor } 537 - - { key: Up, chars: "\x1bOA", mode: AppCursor } 538 - - { key: Down, mods: Shift, chars: "\x1b[1;2B" } 539 - - { key: Down, mods: Control, chars: "\x1b[1;5B" } 540 - - { key: Down, mods: Alt, chars: "\x1b[1;3B" } 541 - - { key: Down, chars: "\x1b[B", mode: ~AppCursor } 542 - - { key: Down, chars: "\x1bOB", mode: AppCursor } 543 - - { key: F1, chars: "\x1bOP" } 544 - - { key: F2, chars: "\x1bOQ" } 545 - - { key: F3, chars: "\x1bOR" } 546 - - { key: F4, chars: "\x1bOS" } 547 - - { key: F5, chars: "\x1b[15~" } 548 - - { key: F6, chars: "\x1b[17~" } 549 - - { key: F7, chars: "\x1b[18~" } 550 - - { key: F8, chars: "\x1b[19~" } 551 - - { key: F9, chars: "\x1b[20~" } 552 - - { key: F10, chars: "\x1b[21~" } 553 - - { key: F11, chars: "\x1b[23~" } 554 - - { key: F12, chars: "\x1b[24~" } 555 - - { key: F1, mods: Shift, chars: "\x1b[1;2P" } 556 - - { key: F2, mods: Shift, chars: "\x1b[1;2Q" } 557 - - { key: F3, mods: Shift, chars: "\x1b[1;2R" } 558 - - { key: F4, mods: Shift, chars: "\x1b[1;2S" } 559 - - { key: F5, mods: Shift, chars: "\x1b[15;2~" } 560 - - { key: F6, mods: Shift, chars: "\x1b[17;2~" } 561 - - { key: F7, mods: Shift, chars: "\x1b[18;2~" } 562 - - { key: F8, mods: Shift, chars: "\x1b[19;2~" } 563 - - { key: F9, mods: Shift, chars: "\x1b[20;2~" } 564 - - { key: F10, mods: Shift, chars: "\x1b[21;2~" } 565 - - { key: F11, mods: Shift, chars: "\x1b[23;2~" } 566 - - { key: F12, mods: Shift, chars: "\x1b[24;2~" } 567 - - { key: F1, mods: Control, chars: "\x1b[1;5P" } 568 - - { key: F2, mods: Control, chars: "\x1b[1;5Q" } 569 - - { key: F3, mods: Control, chars: "\x1b[1;5R" } 570 - - { key: F4, mods: Control, chars: "\x1b[1;5S" } 571 - - { key: F5, mods: Control, chars: "\x1b[15;5~" } 572 - - { key: F6, mods: Control, chars: "\x1b[17;5~" } 573 - - { key: F7, mods: Control, chars: "\x1b[18;5~" } 574 - - { key: F8, mods: Control, chars: "\x1b[19;5~" } 575 - - { key: F9, mods: Control, chars: "\x1b[20;5~" } 576 - - { key: F10, mods: Control, chars: "\x1b[21;5~" } 577 - - { key: F11, mods: Control, chars: "\x1b[23;5~" } 578 - - { key: F12, mods: Control, chars: "\x1b[24;5~" } 579 - - { key: F1, mods: Alt, chars: "\x1b[1;6P" } 580 - - { key: F2, mods: Alt, chars: "\x1b[1;6Q" } 581 - - { key: F3, mods: Alt, chars: "\x1b[1;6R" } 582 - - { key: F4, mods: Alt, chars: "\x1b[1;6S" } 583 - - { key: F5, mods: Alt, chars: "\x1b[15;6~" } 584 - - { key: F6, mods: Alt, chars: "\x1b[17;6~" } 585 - - { key: F7, mods: Alt, chars: "\x1b[18;6~" } 586 - - { key: F8, mods: Alt, chars: "\x1b[19;6~" } 587 - - { key: F9, mods: Alt, chars: "\x1b[20;6~" } 588 - - { key: F10, mods: Alt, chars: "\x1b[21;6~" } 589 - - { key: F11, mods: Alt, chars: "\x1b[23;6~" } 590 - - { key: F12, mods: Alt, chars: "\x1b[24;6~" } 591 - - { key: F1, mods: Super, chars: "\x1b[1;3P" } 592 - - { key: F2, mods: Super, chars: "\x1b[1;3Q" } 593 - - { key: F3, mods: Super, chars: "\x1b[1;3R" } 594 - - { key: F4, mods: Super, chars: "\x1b[1;3S" } 595 - - { key: F5, mods: Super, chars: "\x1b[15;3~" } 596 - - { key: F6, mods: Super, chars: "\x1b[17;3~" } 597 - - { key: F7, mods: Super, chars: "\x1b[18;3~" } 598 - - { key: F8, mods: Super, chars: "\x1b[19;3~" } 599 - - { key: F9, mods: Super, chars: "\x1b[20;3~" } 600 - - { key: F10, mods: Super, chars: "\x1b[21;3~" } 601 - - { key: F11, mods: Super, chars: "\x1b[23;3~" } 602 - - { key: F12, mods: Super, chars: "\x1b[24;3~" } 603 - - { key: NumpadEnter, chars: "\n" }
-96
theme/.config/conky/conky.conf
··· 1 - conky.config = { 2 - 3 - --Various settings 4 - 5 - background = true, -- forked to background 6 - cpu_avg_samples = 2, 7 - diskio_avg_samples = 10, 8 - double_buffer = true, 9 - if_up_strictness = 'address', 10 - net_avg_samples = 2, 11 - no_buffers = true, 12 - temperature_unit = 'celsius', 13 - text_buffer_size = 2048, 14 - update_interval = 1, 15 - imlib_cache_size = 0, --spotify cove 16 - 17 - --Placement 18 - 19 - alignment = 'bottom_left', 20 - gap_x = 15, 21 - gap_y = 15, 22 - minimum_height = 280, 23 - minimum_width = 600, 24 - maximum_width = 700, 25 - 26 - --Graphical 27 - 28 - border_inner_margin = 10, -- margin between border and text 29 - border_outer_margin = 0, -- margin between border and edge of window 30 - border_width = 0, -- border width in pixels 31 - default_bar_width = 280, 32 - default_bar_height = 10, 33 - default_gauge_height = 25, 34 - default_gauge_width =40, 35 - default_graph_height = 40, 36 - default_graph_width = 153, 37 - default_shade_color = '#000000', 38 - default_outline_color = '#000000', 39 - draw_borders = false, --draw borders around text 40 - draw_graph_borders = true, 41 - draw_shades = false, 42 - draw_outline = false, 43 - stippled_borders = 0, 44 - 45 - --Textual 46 - 47 - extra_newline = false, 48 - format_human_readable = true, 49 - font = 'Feena Casual', 50 - max_text_width = 0, 51 - max_user_text = 16384, 52 - override_utf8_locale = true, 53 - short_units = true, 54 - top_name_width = 21, 55 - top_name_verbose = false, 56 - uppercase = false, 57 - use_spacer = 'none', 58 - use_xft = true, 59 - xftalpha = 1, 60 - 61 - --Windows 62 - 63 - own_window = true, 64 - own_window_argb_value = 00, 65 - own_window_argb_visual = true, 66 - own_window_class = 'Conky', 67 - own_window_colour = '#000000', 68 - own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager', 69 - own_window_transparent = no, 70 - own_window_title = 'system_conky', 71 - own_window_type = 'override',-- # options are: normal/override/dock/desktop/panel 72 - 73 - 74 - --Colours 75 - 76 - default_color = '#FFFFFF', -- default color and border color 77 - color1 = '#FFFFFF', 78 - color2 = '#A1A1A1', 79 - color3 = '#888888', 80 - color4 = '#BDBDBD', 81 - color5 = '#CCCCCC', 82 - color6 = '#FFFFFF', 83 - 84 - --Signal Colours 85 - color7 = '#1F7411', --green 86 - color8 = '#FFA726', --orange 87 - color9 = '#F1544B', --firebrick 88 - }; 89 - 90 - 91 - conky.text = [[ 92 - ${goto 35}${color1}${font Feena Casual:size=100}${time %I }${font Feena Casual:size=45}${color1}${time %A}${color2}${goto 35}${voffset 55}${color2}${font Feena Casual:size=22}${time %d} ${font Feena Casual:size=65}${voffset -15}${color2}${time %B} ${font Feena Casual:size=22}${goto 65}${voffset 34}${color2}${time %Y}${font Feena Casual:size=100}${goto 155}${voffset -54}${color1}${time %M}${font Feena Casual:size=25}${color2} ${time %P} 93 - 94 - 95 - #${goto 60}${voffset -65}${font Feena Casual:size=23} ${time %A} | #${time %B %d %Y} 96 - ]]
-92
theme/.config/conky/conky_notes.conf
··· 1 - conky.config = { 2 - 3 - --Various settings 4 - 5 - background = true, -- forked to background 6 - cpu_avg_samples = 2, 7 - diskio_avg_samples = 10, 8 - double_buffer = true, 9 - if_up_strictness = 'address', 10 - net_avg_samples = 2, 11 - no_buffers = true, 12 - temperature_unit = 'celsius', 13 - text_buffer_size = 2048, 14 - update_interval = 2, 15 - imlib_cache_size = 0, 16 - 17 - --Placement 18 - 19 - alignment = 'top_right', 20 - gap_x = 30, 21 - gap_y = 50, 22 - minimum_height = 200, 23 - minimum_width = 200, 24 - maximum_width = 550, 25 - 26 - --Graphical 27 - 28 - border_inner_margin = 10, 29 - 30 - -- margin between border and text 31 - border_outer_margin = 0, 32 - -- margin between border and edge of window 33 - border_width = 0, 34 - -- border width in pixels 35 - default_bar_width = 280, 36 - default_bar_height = 2, 37 - default_gauge_height = 25, 38 - default_gauge_width =40, 39 - default_graph_height = 40, 40 - default_graph_width = 153, 41 - default_shade_color = '#000000', 42 - default_outline_color = '#828282', 43 - draw_borders = false, 44 - --draw borders around text 45 - draw_graph_borders = true, 46 - draw_shades = false, 47 - draw_outline = false, 48 - stippled_borders = 0, 49 - 50 - --Textual 51 - 52 - extra_newline = false, 53 - format_human_readable = true, 54 - font = 'Open Sans', 55 - max_text_width = 0, 56 - max_user_text = 16384, 57 - override_utf8_locale = false, 58 - short_units = true, 59 - top_name_width = 21, 60 - top_name_verbose = false, 61 - uppercase = false, 62 - use_spacer = 'none', 63 - use_xft = true, 64 - xftalpha = 1, 65 - 66 - --Windows 67 - 68 - own_window = true, 69 - own_window_argb_value = 0, 70 - own_window_argb_visual = true, 71 - own_window_class = 'Conky', 72 - own_window_colour = '#000000', 73 - own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager', 74 - own_window_transparent = yes, 75 - own_window_title = 'Conky', 76 - own_window_type = 'override', 77 - 78 - 79 - --Colors 80 - 81 - default_color = '#FFFFFF', 82 - color1 = '#FFFFFF', 83 - }; 84 - 85 - 86 - conky.text = [[ 87 - ${alignc}${font Open Sans:weight=Regular:size=24}Todo${color1}${font} 88 - ${voffset 10}${font Open Sans:weight=Light:size=18}${color1}\ 89 - ${exec cat -n "$HOME/todo.md" | fmt -s -w 50}\ 90 - ${color} 91 - ${font} 92 - ]]
-13
theme/.config/conky/start-conky.desktop
··· 1 - #!/usr/bin/env xdg-open 2 - 3 - [Desktop Entry] 4 - Type=Application 5 - Exec=conky 6 - Icon=conky 7 - X-GNOME-Autostart-enabled=true 8 - X-MATE-Autostart-enabled=true 9 - NoDisplay=false 10 - Hidden=false 11 - Name[en_US]=start-conky 12 - Comment[en_US]= 13 - X-GNOME-Autostart-Delay=0
-3
theme/.config/conky/start-conky.sh
··· 1 - #!/bin/bash 2 - conky -c $HOME/.config/conky/conky.conf & 3 - conky -c $HOME/.config/conky/conky_notes.conf &
-141
theme/.config/conky/system-all.conf
··· 1 - use_xft yes 2 - xftfont DejaVu Sans:size=12 3 - xftalpha 0.8 4 - text_buffer_size 2048 5 - 6 - # Update interval in seconds 7 - update_interval 1 8 - 9 - # This is the number of times Conky will update before quitting. 10 - total_run_times 0 11 - 12 - own_window yes 13 - own_window_transparent yes 14 - #own_window_type override 15 - #own_window_type desktop 16 - own_window_type desktop #use this if you want a nice shadow to appear around conky 17 - 18 - # If own_window is yes, these window manager hints may be used 19 - own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager 20 - 21 - # Use double buffering (reduces flicker, may not work for everyone) 22 - double_buffer yes 23 - 24 - # Minimum size of text area 25 - minimum_size 220 0 26 - #maximum_width 200 27 - 28 - # Draw shades? 29 - draw_shades no 30 - 31 - # Draw outlines? 32 - draw_outline no 33 - 34 - # Draw borders around text 35 - draw_borders no 36 - 37 - # Stippled borders? 38 - stippled_borders 0 39 - 40 - # border margins 41 - border_margin 5 42 - 43 - # border width 44 - border_width 1 45 - 46 - # Default colors and also border colors 47 - default_color #5d5861 48 - #default_shade_color black 49 - #default_outline_color grey 50 - own_window_colour 000000 51 - 52 - # Text alignment, other possible values are commented 53 - #alignment top_left 54 - alignment top_left 55 - #alignment bottom_left 56 - #alignment bottom_right 57 - #alignment middle_right 58 - 59 - # Gap between borders of screen and text 60 - # same thing as passing -x at command line 61 - gap_x 20 62 - gap_y 50 63 - 64 - # Subtract file system buffers from used memory? 65 - no_buffers yes 66 - 67 - # set to yes if you want all text to be in uppercase 68 - uppercase no 69 - 70 - # number of cpu samples to average 71 - # set to 1 to disable averaging 72 - cpu_avg_samples 2 73 - 74 - # number of net samples to average 75 - # set to 1 to disable averaging 76 - net_avg_samples 2 77 - 78 - # Force UTF8? note that UTF8 support required XFT 79 - override_utf8_locale yes 80 - 81 - # Add spaces to keep things from moving about? This only affects certain objects. 82 - use_spacer none 83 - 84 - own_window_argb_value 0 85 - own_window_argb_visual yes 86 - TEXT 87 - ${font Zekton:Regular:size=11}SYSTEM ${hr 2} 88 - #Command exec cut .. know the distribution 89 - ${font Zekton:Regular:size=12}${alignc 0}${exec cut -d '\' -f 1 /etc/issue} 90 - ${voffset -10}${font OpenLogos:size=40} 91 - #Hostname 92 - ${voffset -85}${alignc =10}${font Capture it:size=16}${nodename} 93 - #PC 94 - ${font Zekton:Regular:size=12}${alignc 0}ASUS 95 - ${font Zekton:Regular:size=12}${alignc 0} 96 - ${font DejaVu Sans:Regular:size=13}K${font} Kernel: ${alignr}${kernel} 97 - 98 - ${font StyleBats:Regular:size=16}A${font} CPU 1: ${cpu cpu1}% ${alignr}${cpubar cpu1 8,60} 99 - ${font StyleBats:Regular:size=16}A${font} CPU 2: ${cpu cpu2}% ${alignr}${cpubar cpu2 8,60} 100 - 101 - ${font StyleBats:Regular:size=16}g${font} RAM: $mem $memperc% ${alignr}${membar 8,60} 102 - ${font StyleBats:Regular:size=16}j${font} SWAP: $swap $swapperc% ${alignr}${swapbar 8,60} 103 - 104 - ${font Webdings:Regular:size=16}~${font}Battery: ${battery_percent BAT0}% ${alignr}${battery_bar 8,60 BAT0} 105 - ${font StyleBats:Regular:size=16}q${font} Uptime: ${alignr}${uptime} 106 - 107 - ${font Zekton:Regular:size=11}DATE ${hr 2} 108 - 109 - ${alignc 0}${font Capture it:size=32}${time %H:%M}${font Zekton:size=10} 110 - ${voffset 2}${alignc}${time %A, %d %B %Y} 111 - 112 - ${font Zekton:Regular:size=11}HD ${hr 2} 113 - 114 - ${voffset 4}${font Pie charts for maps:Regular:size=14}7${font} ${voffset -5}Root: 115 - ${voffset 4}${fs_used /}/${fs_size /} ${alignr}${fs_bar 8,60 /} 116 - 117 - ${font Pie charts for maps:Regular:size=14}m${font} ${voffset -5}Home: 118 - ${voffset 4}${fs_free /home}/${fs_size /home} ${alignr}${fs_bar 8,60 /home} 119 - 120 - ${font Zekton:Regular:size=11}NETWORK ${hr 2} 121 - #Aquí tengo que aclarar algo mis interfaces de red son 122 - #Wired = enp2s0 and WiFi = wlp3s0 123 - 124 - ${if_existing /proc/net/route enp2s0} 125 - 126 - ${voffset -15}${alignc 0}${font Capture it:size=12}W i r e d 127 - ${font PizzaDude Bullets:size=14}O${font} Up: ${upspeed enp2s0}${alignr}${upspeedgraph enp2s0 8,60 black black} 128 - ${voffset 4}${font PizzaDude Bullets:size=14}U${font} Down: ${downspeed enp2s0}${alignr}${downspeedgraph enp2s0 8,60 black black} 129 - ${voffset 4}${font PizzaDude Bullets:size=14}N${font} Upload: ${alignr}${totalup enp2s0} 130 - ${voffset 4}${font PizzaDude Bullets:size=14}T${font} Dowload: ${alignr}${totaldown enp2s0} 131 - ${else}${if_existing /proc/net/route wlp3s0}${alignc 0}${font Capture it:size=12}W i F i 132 - ${font}${alignc}SSID: ${wireless_essid wlp3s0} 133 - 134 - Signal: ${wireless_link_qual_perc wlp3s0}% ${alignr}${wireless_link_bar 8,60 wlp3s0} 135 - 136 - ${font PizzaDude Bullets:size=14}O${font} Up: ${upspeed wlp3s0}${alignr}${upspeedgraph wlp3s0 8,60 black black} 137 - ${voffset 4}${font PizzaDude Bullets:size=14}U${font} Down: ${downspeed wlp3s0}${alignr}${downspeedgraph wlp3s0 8,60 black black} 138 - 139 - ${voffset 4}${font PizzaDude Bullets:size=14}N${font} Upload: ${alignr}${totalup wlp3s0} 140 - ${voffset 4}${font PizzaDude Bullets:size=14}T${font} Download: ${alignr}${totaldown wlp3s0} 141 - ${endif}
-63
theme/.config/dunst/dunstrc
··· 1 - [global] 2 - monitor = 0 3 - follow = mouse 4 - geometry = "500x10-20+40" 5 - indicate_hidden = yes 6 - shrink = yes 7 - transparency = 10 8 - notification_height = 0 9 - separator_height = 0 10 - padding = 20 11 - horizontal_padding = 20 12 - frame_width = 1 13 - frame_color = "#e3a2d4" 14 - separator_color = frame 15 - height = 4 16 - markup = full 17 - format = "<span foreground='#f3f4f5'><b>%s</b>%p</span>\n%b" 18 - alignment = left 19 - show_age_threshold = 60 20 - word_wrap = yes 21 - ellipsize = middle 22 - ignore_newline = no 23 - stack_duplicates = false 24 - hide_duplicate_count = true 25 - show_indicators = yes 26 - icon_position = left 27 - max_icon_size = 64 28 - icon_path = /usr/share/icons/Papirus/16x16/status/:/usr/share/icons/Papirus/16x16/devices/:/usr/share/icons/Papirus/16x16/apps/ 29 - sticky_history = yes 30 - history_length = 20 31 - always_run_script = true 32 - startup_notification = false 33 - browser = /usr/bin/firefox -new-tab 34 - verbosity = mesg 35 - corner_radius = 0 36 - force_xinerama = false 37 - mouse_left_click = close_current 38 - mouse_middle_click = do_action 39 - mouse_right_click = close_all 40 - 41 - [shortcuts] 42 - close = ctrl+space 43 - close_all = ctrl+shift+space 44 - history = ctrl+grave 45 - context = ctrl+shift+period 46 - 47 - [urgency_low] 48 - timeout = 4 49 - background = "#282a36" 50 - foreground = "#93a1a1" 51 - frame_color = "#8bc34a" 52 - 53 - [urgency_normal] 54 - timeout = 8 55 - background = "#282a36" 56 - foreground = "#93a1a1" 57 - frame_color = "#ba68c8" 58 - 59 - [urgency_critical] 60 - timeout = 0 61 - background = "#141c21" 62 - foreground = "#93a1a1" 63 - frame_color = "#ff7043"
-58
theme/.config/kitty/colors.conf
··· 1 - # https://draculatheme.com/kitty 2 - # 3 - # Installation instructions: 4 - # 5 - # cp dracula.conf ~/.config/kitty/ 6 - # echo "include dracula.conf" >> ~/.config/kitty/kitty.conf 7 - # 8 - # Then reload kitty for the config to take affect. 9 - # Alternatively copy paste below directly into kitty.conf 10 - 11 - foreground #f8f8f2 12 - background #282a36 13 - selection_foreground #44475a 14 - selection_background #f8f8f2 15 - 16 - url_color #ffb86c 17 - 18 - # black 19 - color0 #21222c 20 - color8 #6272a4 21 - 22 - # red 23 - color1 #ff5555 24 - color9 #ff6e6e 25 - 26 - # green 27 - color2 #50fa7b 28 - color10 #69ff94 29 - 30 - # yellow 31 - color3 #f1fa8c 32 - color11 #ffffa5 33 - 34 - # blue 35 - color4 #bd93f9 36 - color12 #d6acff 37 - 38 - # magenta 39 - color5 #ff79c6 40 - color13 #ff92df 41 - 42 - # cyan 43 - color6 #8be9fd 44 - color14 #a4ffff 45 - 46 - # white 47 - color7 #f8f8f2 48 - color15 #ffffff 49 - 50 - # Cursor colors 51 - cursor #f8f8f2 52 - cursor_text_color background 53 - 54 - # Tab bar colors 55 - active_tab_foreground #44475a 56 - active_tab_background #f8f8f2 57 - inactive_tab_foreground #282a36 58 - inactive_tab_background #6272a4
-14
theme/.config/kitty/kitty.conf
··· 1 - font_family Fira Code Regular 2 - font_size 16 3 - bold_font Fira Code SemiBold 4 - italic_font auto 5 - bold_italic_font auto 6 - 7 - background_opacity 0.95 8 - 9 - remember_window_size no 10 - initial_window_width 1100 11 - initial_window_height 700 12 - window_padding_width 3 13 - 14 - include colors.conf
-2597
theme/.config/nvim/autoload/plug.vim
··· 1 - " vim-plug: Vim plugin manager 2 - " ============================ 3 - " 4 - " Download plug.vim and put it in ~/.vim/autoload 5 - " 6 - " curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ 7 - " https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim 8 - " 9 - " Edit your .vimrc 10 - " 11 - " call plug#begin('~/.vim/plugged') 12 - " 13 - " " Make sure you use single quotes 14 - " 15 - " " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align 16 - " Plug 'junegunn/vim-easy-align' 17 - " 18 - " " Any valid git URL is allowed 19 - " Plug 'https://github.com/junegunn/vim-github-dashboard.git' 20 - " 21 - " " Multiple Plug commands can be written in a single line using | separators 22 - " Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets' 23 - " 24 - " " On-demand loading 25 - " Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } 26 - " Plug 'tpope/vim-fireplace', { 'for': 'clojure' } 27 - " 28 - " " Using a non-master branch 29 - " Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' } 30 - " 31 - " " Using a tagged release; wildcard allowed (requires git 1.9.2 or above) 32 - " Plug 'fatih/vim-go', { 'tag': '*' } 33 - " 34 - " " Plugin options 35 - " Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' } 36 - " 37 - " " Plugin outside ~/.vim/plugged with post-update hook 38 - " Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } 39 - " 40 - " " Unmanaged plugin (manually installed and updated) 41 - " Plug '~/my-prototype-plugin' 42 - " 43 - " " Initialize plugin system 44 - " call plug#end() 45 - " 46 - " Then reload .vimrc and :PlugInstall to install plugins. 47 - " 48 - " Plug options: 49 - " 50 - "| Option | Description | 51 - "| ----------------------- | ------------------------------------------------ | 52 - "| `branch`/`tag`/`commit` | Branch/tag/commit of the repository to use | 53 - "| `rtp` | Subdirectory that contains Vim plugin | 54 - "| `dir` | Custom directory for the plugin | 55 - "| `as` | Use different name for the plugin | 56 - "| `do` | Post-update hook (string or funcref) | 57 - "| `on` | On-demand loading: Commands or `<Plug>`-mappings | 58 - "| `for` | On-demand loading: File types | 59 - "| `frozen` | Do not update unless explicitly specified | 60 - " 61 - " More information: https://github.com/junegunn/vim-plug 62 - " 63 - " 64 - " Copyright (c) 2017 Junegunn Choi 65 - " 66 - " MIT License 67 - " 68 - " Permission is hereby granted, free of charge, to any person obtaining 69 - " a copy of this software and associated documentation files (the 70 - " "Software"), to deal in the Software without restriction, including 71 - " without limitation the rights to use, copy, modify, merge, publish, 72 - " distribute, sublicense, and/or sell copies of the Software, and to 73 - " permit persons to whom the Software is furnished to do so, subject to 74 - " the following conditions: 75 - " 76 - " The above copyright notice and this permission notice shall be 77 - " included in all copies or substantial portions of the Software. 78 - " 79 - " THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 80 - " EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 81 - " MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 82 - " NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 83 - " LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 84 - " OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 85 - " WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 86 - 87 - if exists('g:loaded_plug') 88 - finish 89 - endif 90 - let g:loaded_plug = 1 91 - 92 - let s:cpo_save = &cpo 93 - set cpo&vim 94 - 95 - let s:plug_src = 'https://github.com/junegunn/vim-plug.git' 96 - let s:plug_tab = get(s:, 'plug_tab', -1) 97 - let s:plug_buf = get(s:, 'plug_buf', -1) 98 - let s:mac_gui = has('gui_macvim') && has('gui_running') 99 - let s:is_win = has('win32') 100 - let s:nvim = has('nvim-0.2') || (has('nvim') && exists('*jobwait') && !s:is_win) 101 - let s:vim8 = has('patch-8.0.0039') && exists('*job_start') 102 - if s:is_win && &shellslash 103 - set noshellslash 104 - let s:me = resolve(expand('<sfile>:p')) 105 - set shellslash 106 - else 107 - let s:me = resolve(expand('<sfile>:p')) 108 - endif 109 - let s:base_spec = { 'branch': 'master', 'frozen': 0 } 110 - let s:TYPE = { 111 - \ 'string': type(''), 112 - \ 'list': type([]), 113 - \ 'dict': type({}), 114 - \ 'funcref': type(function('call')) 115 - \ } 116 - let s:loaded = get(s:, 'loaded', {}) 117 - let s:triggers = get(s:, 'triggers', {}) 118 - 119 - if s:is_win 120 - function! s:plug_call(fn, ...) 121 - let shellslash = &shellslash 122 - try 123 - set noshellslash 124 - return call(a:fn, a:000) 125 - finally 126 - let &shellslash = shellslash 127 - endtry 128 - endfunction 129 - else 130 - function! s:plug_call(fn, ...) 131 - return call(a:fn, a:000) 132 - endfunction 133 - endif 134 - 135 - function! s:plug_getcwd() 136 - return s:plug_call('getcwd') 137 - endfunction 138 - 139 - function! s:plug_fnamemodify(fname, mods) 140 - return s:plug_call('fnamemodify', a:fname, a:mods) 141 - endfunction 142 - 143 - function! s:plug_expand(fmt) 144 - return s:plug_call('expand', a:fmt, 1) 145 - endfunction 146 - 147 - function! s:plug_tempname() 148 - return s:plug_call('tempname') 149 - endfunction 150 - 151 - function! plug#begin(...) 152 - if a:0 > 0 153 - let s:plug_home_org = a:1 154 - let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p')) 155 - elseif exists('g:plug_home') 156 - let home = s:path(g:plug_home) 157 - elseif !empty(&rtp) 158 - let home = s:path(split(&rtp, ',')[0]) . '/plugged' 159 - else 160 - return s:err('Unable to determine plug home. Try calling plug#begin() with a path argument.') 161 - endif 162 - if s:plug_fnamemodify(home, ':t') ==# 'plugin' && s:plug_fnamemodify(home, ':h') ==# s:first_rtp 163 - return s:err('Invalid plug home. '.home.' is a standard Vim runtime path and is not allowed.') 164 - endif 165 - 166 - let g:plug_home = home 167 - let g:plugs = {} 168 - let g:plugs_order = [] 169 - let s:triggers = {} 170 - 171 - call s:define_commands() 172 - return 1 173 - endfunction 174 - 175 - function! s:define_commands() 176 - command! -nargs=+ -bar Plug call plug#(<args>) 177 - if !executable('git') 178 - return s:err('`git` executable not found. Most commands will not be available. To suppress this message, prepend `silent!` to `call plug#begin(...)`.') 179 - endif 180 - if has('win32') 181 - \ && &shellslash 182 - \ && (&shell =~# 'cmd\.exe' || &shell =~# 'powershell\.exe') 183 - return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.') 184 - endif 185 - if !has('nvim') 186 - \ && (has('win32') || has('win32unix')) 187 - \ && !has('multi_byte') 188 - return s:err('Vim needs +multi_byte feature on Windows to run shell commands. Enable +iconv for best results.') 189 - endif 190 - command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(<bang>0, [<f-args>]) 191 - command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate call s:update(<bang>0, [<f-args>]) 192 - command! -nargs=0 -bar -bang PlugClean call s:clean(<bang>0) 193 - command! -nargs=0 -bar PlugUpgrade if s:upgrade() | execute 'source' s:esc(s:me) | endif 194 - command! -nargs=0 -bar PlugStatus call s:status() 195 - command! -nargs=0 -bar PlugDiff call s:diff() 196 - command! -nargs=? -bar -bang -complete=file PlugSnapshot call s:snapshot(<bang>0, <f-args>) 197 - endfunction 198 - 199 - function! s:to_a(v) 200 - return type(a:v) == s:TYPE.list ? a:v : [a:v] 201 - endfunction 202 - 203 - function! s:to_s(v) 204 - return type(a:v) == s:TYPE.string ? a:v : join(a:v, "\n") . "\n" 205 - endfunction 206 - 207 - function! s:glob(from, pattern) 208 - return s:lines(globpath(a:from, a:pattern)) 209 - endfunction 210 - 211 - function! s:source(from, ...) 212 - let found = 0 213 - for pattern in a:000 214 - for vim in s:glob(a:from, pattern) 215 - execute 'source' s:esc(vim) 216 - let found = 1 217 - endfor 218 - endfor 219 - return found 220 - endfunction 221 - 222 - function! s:assoc(dict, key, val) 223 - let a:dict[a:key] = add(get(a:dict, a:key, []), a:val) 224 - endfunction 225 - 226 - function! s:ask(message, ...) 227 - call inputsave() 228 - echohl WarningMsg 229 - let answer = input(a:message.(a:0 ? ' (y/N/a) ' : ' (y/N) ')) 230 - echohl None 231 - call inputrestore() 232 - echo "\r" 233 - return (a:0 && answer =~? '^a') ? 2 : (answer =~? '^y') ? 1 : 0 234 - endfunction 235 - 236 - function! s:ask_no_interrupt(...) 237 - try 238 - return call('s:ask', a:000) 239 - catch 240 - return 0 241 - endtry 242 - endfunction 243 - 244 - function! s:lazy(plug, opt) 245 - return has_key(a:plug, a:opt) && 246 - \ (empty(s:to_a(a:plug[a:opt])) || 247 - \ !isdirectory(a:plug.dir) || 248 - \ len(s:glob(s:rtp(a:plug), 'plugin')) || 249 - \ len(s:glob(s:rtp(a:plug), 'after/plugin'))) 250 - endfunction 251 - 252 - function! plug#end() 253 - if !exists('g:plugs') 254 - return s:err('plug#end() called without calling plug#begin() first') 255 - endif 256 - 257 - if exists('#PlugLOD') 258 - augroup PlugLOD 259 - autocmd! 260 - augroup END 261 - augroup! PlugLOD 262 - endif 263 - let lod = { 'ft': {}, 'map': {}, 'cmd': {} } 264 - 265 - if exists('g:did_load_filetypes') 266 - filetype off 267 - endif 268 - for name in g:plugs_order 269 - if !has_key(g:plugs, name) 270 - continue 271 - endif 272 - let plug = g:plugs[name] 273 - if get(s:loaded, name, 0) || !s:lazy(plug, 'on') && !s:lazy(plug, 'for') 274 - let s:loaded[name] = 1 275 - continue 276 - endif 277 - 278 - if has_key(plug, 'on') 279 - let s:triggers[name] = { 'map': [], 'cmd': [] } 280 - for cmd in s:to_a(plug.on) 281 - if cmd =~? '^<Plug>.\+' 282 - if empty(mapcheck(cmd)) && empty(mapcheck(cmd, 'i')) 283 - call s:assoc(lod.map, cmd, name) 284 - endif 285 - call add(s:triggers[name].map, cmd) 286 - elseif cmd =~# '^[A-Z]' 287 - let cmd = substitute(cmd, '!*$', '', '') 288 - if exists(':'.cmd) != 2 289 - call s:assoc(lod.cmd, cmd, name) 290 - endif 291 - call add(s:triggers[name].cmd, cmd) 292 - else 293 - call s:err('Invalid `on` option: '.cmd. 294 - \ '. Should start with an uppercase letter or `<Plug>`.') 295 - endif 296 - endfor 297 - endif 298 - 299 - if has_key(plug, 'for') 300 - let types = s:to_a(plug.for) 301 - if !empty(types) 302 - augroup filetypedetect 303 - call s:source(s:rtp(plug), 'ftdetect/**/*.vim', 'after/ftdetect/**/*.vim') 304 - augroup END 305 - endif 306 - for type in types 307 - call s:assoc(lod.ft, type, name) 308 - endfor 309 - endif 310 - endfor 311 - 312 - for [cmd, names] in items(lod.cmd) 313 - execute printf( 314 - \ 'command! -nargs=* -range -bang -complete=file %s call s:lod_cmd(%s, "<bang>", <line1>, <line2>, <q-args>, %s)', 315 - \ cmd, string(cmd), string(names)) 316 - endfor 317 - 318 - for [map, names] in items(lod.map) 319 - for [mode, map_prefix, key_prefix] in 320 - \ [['i', '<C-O>', ''], ['n', '', ''], ['v', '', 'gv'], ['o', '', '']] 321 - execute printf( 322 - \ '%snoremap <silent> %s %s:<C-U>call <SID>lod_map(%s, %s, %s, "%s")<CR>', 323 - \ mode, map, map_prefix, string(map), string(names), mode != 'i', key_prefix) 324 - endfor 325 - endfor 326 - 327 - for [ft, names] in items(lod.ft) 328 - augroup PlugLOD 329 - execute printf('autocmd FileType %s call <SID>lod_ft(%s, %s)', 330 - \ ft, string(ft), string(names)) 331 - augroup END 332 - endfor 333 - 334 - call s:reorg_rtp() 335 - filetype plugin indent on 336 - if has('vim_starting') 337 - if has('syntax') && !exists('g:syntax_on') 338 - syntax enable 339 - end 340 - else 341 - call s:reload_plugins() 342 - endif 343 - endfunction 344 - 345 - function! s:loaded_names() 346 - return filter(copy(g:plugs_order), 'get(s:loaded, v:val, 0)') 347 - endfunction 348 - 349 - function! s:load_plugin(spec) 350 - call s:source(s:rtp(a:spec), 'plugin/**/*.vim', 'after/plugin/**/*.vim') 351 - endfunction 352 - 353 - function! s:reload_plugins() 354 - for name in s:loaded_names() 355 - call s:load_plugin(g:plugs[name]) 356 - endfor 357 - endfunction 358 - 359 - function! s:trim(str) 360 - return substitute(a:str, '[\/]\+$', '', '') 361 - endfunction 362 - 363 - function! s:version_requirement(val, min) 364 - for idx in range(0, len(a:min) - 1) 365 - let v = get(a:val, idx, 0) 366 - if v < a:min[idx] | return 0 367 - elseif v > a:min[idx] | return 1 368 - endif 369 - endfor 370 - return 1 371 - endfunction 372 - 373 - function! s:git_version_requirement(...) 374 - if !exists('s:git_version') 375 - let s:git_version = map(split(split(s:system('git --version'))[2], '\.'), 'str2nr(v:val)') 376 - endif 377 - return s:version_requirement(s:git_version, a:000) 378 - endfunction 379 - 380 - function! s:progress_opt(base) 381 - return a:base && !s:is_win && 382 - \ s:git_version_requirement(1, 7, 1) ? '--progress' : '' 383 - endfunction 384 - 385 - function! s:rtp(spec) 386 - return s:path(a:spec.dir . get(a:spec, 'rtp', '')) 387 - endfunction 388 - 389 - if s:is_win 390 - function! s:path(path) 391 - return s:trim(substitute(a:path, '/', '\', 'g')) 392 - endfunction 393 - 394 - function! s:dirpath(path) 395 - return s:path(a:path) . '\' 396 - endfunction 397 - 398 - function! s:is_local_plug(repo) 399 - return a:repo =~? '^[a-z]:\|^[%~]' 400 - endfunction 401 - 402 - " Copied from fzf 403 - function! s:wrap_cmds(cmds) 404 - let cmds = [ 405 - \ '@echo off', 406 - \ 'setlocal enabledelayedexpansion'] 407 - \ + (type(a:cmds) == type([]) ? a:cmds : [a:cmds]) 408 - \ + ['endlocal'] 409 - if has('iconv') 410 - if !exists('s:codepage') 411 - let s:codepage = libcallnr('kernel32.dll', 'GetACP', 0) 412 - endif 413 - return map(cmds, printf('iconv(v:val."\r", "%s", "cp%d")', &encoding, s:codepage)) 414 - endif 415 - return map(cmds, 'v:val."\r"') 416 - endfunction 417 - 418 - function! s:batchfile(cmd) 419 - let batchfile = s:plug_tempname().'.bat' 420 - call writefile(s:wrap_cmds(a:cmd), batchfile) 421 - let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0}) 422 - if &shell =~# 'powershell\.exe' 423 - let cmd = '& ' . cmd 424 - endif 425 - return [batchfile, cmd] 426 - endfunction 427 - else 428 - function! s:path(path) 429 - return s:trim(a:path) 430 - endfunction 431 - 432 - function! s:dirpath(path) 433 - return substitute(a:path, '[/\\]*$', '/', '') 434 - endfunction 435 - 436 - function! s:is_local_plug(repo) 437 - return a:repo[0] =~ '[/$~]' 438 - endfunction 439 - endif 440 - 441 - function! s:err(msg) 442 - echohl ErrorMsg 443 - echom '[vim-plug] '.a:msg 444 - echohl None 445 - endfunction 446 - 447 - function! s:warn(cmd, msg) 448 - echohl WarningMsg 449 - execute a:cmd 'a:msg' 450 - echohl None 451 - endfunction 452 - 453 - function! s:esc(path) 454 - return escape(a:path, ' ') 455 - endfunction 456 - 457 - function! s:escrtp(path) 458 - return escape(a:path, ' ,') 459 - endfunction 460 - 461 - function! s:remove_rtp() 462 - for name in s:loaded_names() 463 - let rtp = s:rtp(g:plugs[name]) 464 - execute 'set rtp-='.s:escrtp(rtp) 465 - let after = globpath(rtp, 'after') 466 - if isdirectory(after) 467 - execute 'set rtp-='.s:escrtp(after) 468 - endif 469 - endfor 470 - endfunction 471 - 472 - function! s:reorg_rtp() 473 - if !empty(s:first_rtp) 474 - execute 'set rtp-='.s:first_rtp 475 - execute 'set rtp-='.s:last_rtp 476 - endif 477 - 478 - " &rtp is modified from outside 479 - if exists('s:prtp') && s:prtp !=# &rtp 480 - call s:remove_rtp() 481 - unlet! s:middle 482 - endif 483 - 484 - let s:middle = get(s:, 'middle', &rtp) 485 - let rtps = map(s:loaded_names(), 's:rtp(g:plugs[v:val])') 486 - let afters = filter(map(copy(rtps), 'globpath(v:val, "after")'), '!empty(v:val)') 487 - let rtp = join(map(rtps, 'escape(v:val, ",")'), ',') 488 - \ . ','.s:middle.',' 489 - \ . join(map(afters, 'escape(v:val, ",")'), ',') 490 - let &rtp = substitute(substitute(rtp, ',,*', ',', 'g'), '^,\|,$', '', 'g') 491 - let s:prtp = &rtp 492 - 493 - if !empty(s:first_rtp) 494 - execute 'set rtp^='.s:first_rtp 495 - execute 'set rtp+='.s:last_rtp 496 - endif 497 - endfunction 498 - 499 - function! s:doautocmd(...) 500 - if exists('#'.join(a:000, '#')) 501 - execute 'doautocmd' ((v:version > 703 || has('patch442')) ? '<nomodeline>' : '') join(a:000) 502 - endif 503 - endfunction 504 - 505 - function! s:dobufread(names) 506 - for name in a:names 507 - let path = s:rtp(g:plugs[name]) 508 - for dir in ['ftdetect', 'ftplugin', 'after/ftdetect', 'after/ftplugin'] 509 - if len(finddir(dir, path)) 510 - if exists('#BufRead') 511 - doautocmd BufRead 512 - endif 513 - return 514 - endif 515 - endfor 516 - endfor 517 - endfunction 518 - 519 - function! plug#load(...) 520 - if a:0 == 0 521 - return s:err('Argument missing: plugin name(s) required') 522 - endif 523 - if !exists('g:plugs') 524 - return s:err('plug#begin was not called') 525 - endif 526 - let names = a:0 == 1 && type(a:1) == s:TYPE.list ? a:1 : a:000 527 - let unknowns = filter(copy(names), '!has_key(g:plugs, v:val)') 528 - if !empty(unknowns) 529 - let s = len(unknowns) > 1 ? 's' : '' 530 - return s:err(printf('Unknown plugin%s: %s', s, join(unknowns, ', '))) 531 - end 532 - let unloaded = filter(copy(names), '!get(s:loaded, v:val, 0)') 533 - if !empty(unloaded) 534 - for name in unloaded 535 - call s:lod([name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) 536 - endfor 537 - call s:dobufread(unloaded) 538 - return 1 539 - end 540 - return 0 541 - endfunction 542 - 543 - function! s:remove_triggers(name) 544 - if !has_key(s:triggers, a:name) 545 - return 546 - endif 547 - for cmd in s:triggers[a:name].cmd 548 - execute 'silent! delc' cmd 549 - endfor 550 - for map in s:triggers[a:name].map 551 - execute 'silent! unmap' map 552 - execute 'silent! iunmap' map 553 - endfor 554 - call remove(s:triggers, a:name) 555 - endfunction 556 - 557 - function! s:lod(names, types, ...) 558 - for name in a:names 559 - call s:remove_triggers(name) 560 - let s:loaded[name] = 1 561 - endfor 562 - call s:reorg_rtp() 563 - 564 - for name in a:names 565 - let rtp = s:rtp(g:plugs[name]) 566 - for dir in a:types 567 - call s:source(rtp, dir.'/**/*.vim') 568 - endfor 569 - if a:0 570 - if !s:source(rtp, a:1) && !empty(s:glob(rtp, a:2)) 571 - execute 'runtime' a:1 572 - endif 573 - call s:source(rtp, a:2) 574 - endif 575 - call s:doautocmd('User', name) 576 - endfor 577 - endfunction 578 - 579 - function! s:lod_ft(pat, names) 580 - let syn = 'syntax/'.a:pat.'.vim' 581 - call s:lod(a:names, ['plugin', 'after/plugin'], syn, 'after/'.syn) 582 - execute 'autocmd! PlugLOD FileType' a:pat 583 - call s:doautocmd('filetypeplugin', 'FileType') 584 - call s:doautocmd('filetypeindent', 'FileType') 585 - endfunction 586 - 587 - function! s:lod_cmd(cmd, bang, l1, l2, args, names) 588 - call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) 589 - call s:dobufread(a:names) 590 - execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args) 591 - endfunction 592 - 593 - function! s:lod_map(map, names, with_prefix, prefix) 594 - call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) 595 - call s:dobufread(a:names) 596 - let extra = '' 597 - while 1 598 - let c = getchar(0) 599 - if c == 0 600 - break 601 - endif 602 - let extra .= nr2char(c) 603 - endwhile 604 - 605 - if a:with_prefix 606 - let prefix = v:count ? v:count : '' 607 - let prefix .= '"'.v:register.a:prefix 608 - if mode(1) == 'no' 609 - if v:operator == 'c' 610 - let prefix = "\<esc>" . prefix 611 - endif 612 - let prefix .= v:operator 613 - endif 614 - call feedkeys(prefix, 'n') 615 - endif 616 - call feedkeys(substitute(a:map, '^<Plug>', "\<Plug>", '') . extra) 617 - endfunction 618 - 619 - function! plug#(repo, ...) 620 - if a:0 > 1 621 - return s:err('Invalid number of arguments (1..2)') 622 - endif 623 - 624 - try 625 - let repo = s:trim(a:repo) 626 - let opts = a:0 == 1 ? s:parse_options(a:1) : s:base_spec 627 - let name = get(opts, 'as', s:plug_fnamemodify(repo, ':t:s?\.git$??')) 628 - let spec = extend(s:infer_properties(name, repo), opts) 629 - if !has_key(g:plugs, name) 630 - call add(g:plugs_order, name) 631 - endif 632 - let g:plugs[name] = spec 633 - let s:loaded[name] = get(s:loaded, name, 0) 634 - catch 635 - return s:err(v:exception) 636 - endtry 637 - endfunction 638 - 639 - function! s:parse_options(arg) 640 - let opts = copy(s:base_spec) 641 - let type = type(a:arg) 642 - if type == s:TYPE.string 643 - let opts.tag = a:arg 644 - elseif type == s:TYPE.dict 645 - call extend(opts, a:arg) 646 - if has_key(opts, 'dir') 647 - let opts.dir = s:dirpath(s:plug_expand(opts.dir)) 648 - endif 649 - else 650 - throw 'Invalid argument type (expected: string or dictionary)' 651 - endif 652 - return opts 653 - endfunction 654 - 655 - function! s:infer_properties(name, repo) 656 - let repo = a:repo 657 - if s:is_local_plug(repo) 658 - return { 'dir': s:dirpath(s:plug_expand(repo)) } 659 - else 660 - if repo =~ ':' 661 - let uri = repo 662 - else 663 - if repo !~ '/' 664 - throw printf('Invalid argument: %s (implicit `vim-scripts'' expansion is deprecated)', repo) 665 - endif 666 - let fmt = get(g:, 'plug_url_format', 'https://git::@github.com/%s.git') 667 - let uri = printf(fmt, repo) 668 - endif 669 - return { 'dir': s:dirpath(g:plug_home.'/'.a:name), 'uri': uri } 670 - endif 671 - endfunction 672 - 673 - function! s:install(force, names) 674 - call s:update_impl(0, a:force, a:names) 675 - endfunction 676 - 677 - function! s:update(force, names) 678 - call s:update_impl(1, a:force, a:names) 679 - endfunction 680 - 681 - function! plug#helptags() 682 - if !exists('g:plugs') 683 - return s:err('plug#begin was not called') 684 - endif 685 - for spec in values(g:plugs) 686 - let docd = join([s:rtp(spec), 'doc'], '/') 687 - if isdirectory(docd) 688 - silent! execute 'helptags' s:esc(docd) 689 - endif 690 - endfor 691 - return 1 692 - endfunction 693 - 694 - function! s:syntax() 695 - syntax clear 696 - syntax region plug1 start=/\%1l/ end=/\%2l/ contains=plugNumber 697 - syntax region plug2 start=/\%2l/ end=/\%3l/ contains=plugBracket,plugX 698 - syn match plugNumber /[0-9]\+[0-9.]*/ contained 699 - syn match plugBracket /[[\]]/ contained 700 - syn match plugX /x/ contained 701 - syn match plugDash /^-/ 702 - syn match plugPlus /^+/ 703 - syn match plugStar /^*/ 704 - syn match plugMessage /\(^- \)\@<=.*/ 705 - syn match plugName /\(^- \)\@<=[^ ]*:/ 706 - syn match plugSha /\%(: \)\@<=[0-9a-f]\{4,}$/ 707 - syn match plugTag /(tag: [^)]\+)/ 708 - syn match plugInstall /\(^+ \)\@<=[^:]*/ 709 - syn match plugUpdate /\(^* \)\@<=[^:]*/ 710 - syn match plugCommit /^ \X*[0-9a-f]\{7,9} .*/ contains=plugRelDate,plugEdge,plugTag 711 - syn match plugEdge /^ \X\+$/ 712 - syn match plugEdge /^ \X*/ contained nextgroup=plugSha 713 - syn match plugSha /[0-9a-f]\{7,9}/ contained 714 - syn match plugRelDate /([^)]*)$/ contained 715 - syn match plugNotLoaded /(not loaded)$/ 716 - syn match plugError /^x.*/ 717 - syn region plugDeleted start=/^\~ .*/ end=/^\ze\S/ 718 - syn match plugH2 /^.*:\n-\+$/ 719 - syn keyword Function PlugInstall PlugStatus PlugUpdate PlugClean 720 - hi def link plug1 Title 721 - hi def link plug2 Repeat 722 - hi def link plugH2 Type 723 - hi def link plugX Exception 724 - hi def link plugBracket Structure 725 - hi def link plugNumber Number 726 - 727 - hi def link plugDash Special 728 - hi def link plugPlus Constant 729 - hi def link plugStar Boolean 730 - 731 - hi def link plugMessage Function 732 - hi def link plugName Label 733 - hi def link plugInstall Function 734 - hi def link plugUpdate Type 735 - 736 - hi def link plugError Error 737 - hi def link plugDeleted Ignore 738 - hi def link plugRelDate Comment 739 - hi def link plugEdge PreProc 740 - hi def link plugSha Identifier 741 - hi def link plugTag Constant 742 - 743 - hi def link plugNotLoaded Comment 744 - endfunction 745 - 746 - function! s:lpad(str, len) 747 - return a:str . repeat(' ', a:len - len(a:str)) 748 - endfunction 749 - 750 - function! s:lines(msg) 751 - return split(a:msg, "[\r\n]") 752 - endfunction 753 - 754 - function! s:lastline(msg) 755 - return get(s:lines(a:msg), -1, '') 756 - endfunction 757 - 758 - function! s:new_window() 759 - execute get(g:, 'plug_window', 'vertical topleft new') 760 - endfunction 761 - 762 - function! s:plug_window_exists() 763 - let buflist = tabpagebuflist(s:plug_tab) 764 - return !empty(buflist) && index(buflist, s:plug_buf) >= 0 765 - endfunction 766 - 767 - function! s:switch_in() 768 - if !s:plug_window_exists() 769 - return 0 770 - endif 771 - 772 - if winbufnr(0) != s:plug_buf 773 - let s:pos = [tabpagenr(), winnr(), winsaveview()] 774 - execute 'normal!' s:plug_tab.'gt' 775 - let winnr = bufwinnr(s:plug_buf) 776 - execute winnr.'wincmd w' 777 - call add(s:pos, winsaveview()) 778 - else 779 - let s:pos = [winsaveview()] 780 - endif 781 - 782 - setlocal modifiable 783 - return 1 784 - endfunction 785 - 786 - function! s:switch_out(...) 787 - call winrestview(s:pos[-1]) 788 - setlocal nomodifiable 789 - if a:0 > 0 790 - execute a:1 791 - endif 792 - 793 - if len(s:pos) > 1 794 - execute 'normal!' s:pos[0].'gt' 795 - execute s:pos[1] 'wincmd w' 796 - call winrestview(s:pos[2]) 797 - endif 798 - endfunction 799 - 800 - function! s:finish_bindings() 801 - nnoremap <silent> <buffer> R :call <SID>retry()<cr> 802 - nnoremap <silent> <buffer> D :PlugDiff<cr> 803 - nnoremap <silent> <buffer> S :PlugStatus<cr> 804 - nnoremap <silent> <buffer> U :call <SID>status_update()<cr> 805 - xnoremap <silent> <buffer> U :call <SID>status_update()<cr> 806 - nnoremap <silent> <buffer> ]] :silent! call <SID>section('')<cr> 807 - nnoremap <silent> <buffer> [[ :silent! call <SID>section('b')<cr> 808 - endfunction 809 - 810 - function! s:prepare(...) 811 - if empty(s:plug_getcwd()) 812 - throw 'Invalid current working directory. Cannot proceed.' 813 - endif 814 - 815 - for evar in ['$GIT_DIR', '$GIT_WORK_TREE'] 816 - if exists(evar) 817 - throw evar.' detected. Cannot proceed.' 818 - endif 819 - endfor 820 - 821 - call s:job_abort() 822 - if s:switch_in() 823 - if b:plug_preview == 1 824 - pc 825 - endif 826 - enew 827 - else 828 - call s:new_window() 829 - endif 830 - 831 - nnoremap <silent> <buffer> q :if b:plug_preview==1<bar>pc<bar>endif<bar>bd<cr> 832 - if a:0 == 0 833 - call s:finish_bindings() 834 - endif 835 - let b:plug_preview = -1 836 - let s:plug_tab = tabpagenr() 837 - let s:plug_buf = winbufnr(0) 838 - call s:assign_name() 839 - 840 - for k in ['<cr>', 'L', 'o', 'X', 'd', 'dd'] 841 - execute 'silent! unmap <buffer>' k 842 - endfor 843 - setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline modifiable nospell 844 - if exists('+colorcolumn') 845 - setlocal colorcolumn= 846 - endif 847 - setf vim-plug 848 - if exists('g:syntax_on') 849 - call s:syntax() 850 - endif 851 - endfunction 852 - 853 - function! s:assign_name() 854 - " Assign buffer name 855 - let prefix = '[Plugins]' 856 - let name = prefix 857 - let idx = 2 858 - while bufexists(name) 859 - let name = printf('%s (%s)', prefix, idx) 860 - let idx = idx + 1 861 - endwhile 862 - silent! execute 'f' fnameescape(name) 863 - endfunction 864 - 865 - function! s:chsh(swap) 866 - let prev = [&shell, &shellcmdflag, &shellredir] 867 - if !s:is_win && a:swap 868 - set shell=sh shellredir=>%s\ 2>&1 869 - endif 870 - return prev 871 - endfunction 872 - 873 - function! s:bang(cmd, ...) 874 - let batchfile = '' 875 - try 876 - let [sh, shellcmdflag, shrd] = s:chsh(a:0) 877 - " FIXME: Escaping is incomplete. We could use shellescape with eval, 878 - " but it won't work on Windows. 879 - let cmd = a:0 ? s:with_cd(a:cmd, a:1) : a:cmd 880 - if s:is_win 881 - let [batchfile, cmd] = s:batchfile(cmd) 882 - endif 883 - let g:_plug_bang = (s:is_win && has('gui_running') ? 'silent ' : '').'!'.escape(cmd, '#!%') 884 - execute "normal! :execute g:_plug_bang\<cr>\<cr>" 885 - finally 886 - unlet g:_plug_bang 887 - let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] 888 - if s:is_win && filereadable(batchfile) 889 - call delete(batchfile) 890 - endif 891 - endtry 892 - return v:shell_error ? 'Exit status: ' . v:shell_error : '' 893 - endfunction 894 - 895 - function! s:regress_bar() 896 - let bar = substitute(getline(2)[1:-2], '.*\zs=', 'x', '') 897 - call s:progress_bar(2, bar, len(bar)) 898 - endfunction 899 - 900 - function! s:is_updated(dir) 901 - return !empty(s:system_chomp('git log --pretty=format:"%h" "HEAD...HEAD@{1}"', a:dir)) 902 - endfunction 903 - 904 - function! s:do(pull, force, todo) 905 - for [name, spec] in items(a:todo) 906 - if !isdirectory(spec.dir) 907 - continue 908 - endif 909 - let installed = has_key(s:update.new, name) 910 - let updated = installed ? 0 : 911 - \ (a:pull && index(s:update.errors, name) < 0 && s:is_updated(spec.dir)) 912 - if a:force || installed || updated 913 - execute 'cd' s:esc(spec.dir) 914 - call append(3, '- Post-update hook for '. name .' ... ') 915 - let error = '' 916 - let type = type(spec.do) 917 - if type == s:TYPE.string 918 - if spec.do[0] == ':' 919 - if !get(s:loaded, name, 0) 920 - let s:loaded[name] = 1 921 - call s:reorg_rtp() 922 - endif 923 - call s:load_plugin(spec) 924 - try 925 - execute spec.do[1:] 926 - catch 927 - let error = v:exception 928 - endtry 929 - if !s:plug_window_exists() 930 - cd - 931 - throw 'Warning: vim-plug was terminated by the post-update hook of '.name 932 - endif 933 - else 934 - let error = s:bang(spec.do) 935 - endif 936 - elseif type == s:TYPE.funcref 937 - try 938 - let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged') 939 - call spec.do({ 'name': name, 'status': status, 'force': a:force }) 940 - catch 941 - let error = v:exception 942 - endtry 943 - else 944 - let error = 'Invalid hook type' 945 - endif 946 - call s:switch_in() 947 - call setline(4, empty(error) ? (getline(4) . 'OK') 948 - \ : ('x' . getline(4)[1:] . error)) 949 - if !empty(error) 950 - call add(s:update.errors, name) 951 - call s:regress_bar() 952 - endif 953 - cd - 954 - endif 955 - endfor 956 - endfunction 957 - 958 - function! s:hash_match(a, b) 959 - return stridx(a:a, a:b) == 0 || stridx(a:b, a:a) == 0 960 - endfunction 961 - 962 - function! s:checkout(spec) 963 - let sha = a:spec.commit 964 - let output = s:system('git rev-parse HEAD', a:spec.dir) 965 - if !v:shell_error && !s:hash_match(sha, s:lines(output)[0]) 966 - let output = s:system( 967 - \ 'git fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir) 968 - endif 969 - return output 970 - endfunction 971 - 972 - function! s:finish(pull) 973 - let new_frozen = len(filter(keys(s:update.new), 'g:plugs[v:val].frozen')) 974 - if new_frozen 975 - let s = new_frozen > 1 ? 's' : '' 976 - call append(3, printf('- Installed %d frozen plugin%s', new_frozen, s)) 977 - endif 978 - call append(3, '- Finishing ... ') | 4 979 - redraw 980 - call plug#helptags() 981 - call plug#end() 982 - call setline(4, getline(4) . 'Done!') 983 - redraw 984 - let msgs = [] 985 - if !empty(s:update.errors) 986 - call add(msgs, "Press 'R' to retry.") 987 - endif 988 - if a:pull && len(s:update.new) < len(filter(getline(5, '$'), 989 - \ "v:val =~ '^- ' && v:val !~# 'Already up.to.date'")) 990 - call add(msgs, "Press 'D' to see the updated changes.") 991 - endif 992 - echo join(msgs, ' ') 993 - call s:finish_bindings() 994 - endfunction 995 - 996 - function! s:retry() 997 - if empty(s:update.errors) 998 - return 999 - endif 1000 - echo 1001 - call s:update_impl(s:update.pull, s:update.force, 1002 - \ extend(copy(s:update.errors), [s:update.threads])) 1003 - endfunction 1004 - 1005 - function! s:is_managed(name) 1006 - return has_key(g:plugs[a:name], 'uri') 1007 - endfunction 1008 - 1009 - function! s:names(...) 1010 - return sort(filter(keys(g:plugs), 'stridx(v:val, a:1) == 0 && s:is_managed(v:val)')) 1011 - endfunction 1012 - 1013 - function! s:check_ruby() 1014 - silent! ruby require 'thread'; VIM::command("let g:plug_ruby = '#{RUBY_VERSION}'") 1015 - if !exists('g:plug_ruby') 1016 - redraw! 1017 - return s:warn('echom', 'Warning: Ruby interface is broken') 1018 - endif 1019 - let ruby_version = split(g:plug_ruby, '\.') 1020 - unlet g:plug_ruby 1021 - return s:version_requirement(ruby_version, [1, 8, 7]) 1022 - endfunction 1023 - 1024 - function! s:update_impl(pull, force, args) abort 1025 - let sync = index(a:args, '--sync') >= 0 || has('vim_starting') 1026 - let args = filter(copy(a:args), 'v:val != "--sync"') 1027 - let threads = (len(args) > 0 && args[-1] =~ '^[1-9][0-9]*$') ? 1028 - \ remove(args, -1) : get(g:, 'plug_threads', 16) 1029 - 1030 - let managed = filter(copy(g:plugs), 's:is_managed(v:key)') 1031 - let todo = empty(args) ? filter(managed, '!v:val.frozen || !isdirectory(v:val.dir)') : 1032 - \ filter(managed, 'index(args, v:key) >= 0') 1033 - 1034 - if empty(todo) 1035 - return s:warn('echo', 'No plugin to '. (a:pull ? 'update' : 'install')) 1036 - endif 1037 - 1038 - if !s:is_win && s:git_version_requirement(2, 3) 1039 - let s:git_terminal_prompt = exists('$GIT_TERMINAL_PROMPT') ? $GIT_TERMINAL_PROMPT : '' 1040 - let $GIT_TERMINAL_PROMPT = 0 1041 - for plug in values(todo) 1042 - let plug.uri = substitute(plug.uri, 1043 - \ '^https://git::@github\.com', 'https://github.com', '') 1044 - endfor 1045 - endif 1046 - 1047 - if !isdirectory(g:plug_home) 1048 - try 1049 - call mkdir(g:plug_home, 'p') 1050 - catch 1051 - return s:err(printf('Invalid plug directory: %s. '. 1052 - \ 'Try to call plug#begin with a valid directory', g:plug_home)) 1053 - endtry 1054 - endif 1055 - 1056 - if has('nvim') && !exists('*jobwait') && threads > 1 1057 - call s:warn('echom', '[vim-plug] Update Neovim for parallel installer') 1058 - endif 1059 - 1060 - let use_job = s:nvim || s:vim8 1061 - let python = (has('python') || has('python3')) && !use_job 1062 - let ruby = has('ruby') && !use_job && (v:version >= 703 || v:version == 702 && has('patch374')) && !(s:is_win && has('gui_running')) && threads > 1 && s:check_ruby() 1063 - 1064 - let s:update = { 1065 - \ 'start': reltime(), 1066 - \ 'all': todo, 1067 - \ 'todo': copy(todo), 1068 - \ 'errors': [], 1069 - \ 'pull': a:pull, 1070 - \ 'force': a:force, 1071 - \ 'new': {}, 1072 - \ 'threads': (python || ruby || use_job) ? min([len(todo), threads]) : 1, 1073 - \ 'bar': '', 1074 - \ 'fin': 0 1075 - \ } 1076 - 1077 - call s:prepare(1) 1078 - call append(0, ['', '']) 1079 - normal! 2G 1080 - silent! redraw 1081 - 1082 - let s:clone_opt = get(g:, 'plug_shallow', 1) ? 1083 - \ '--depth 1' . (s:git_version_requirement(1, 7, 10) ? ' --no-single-branch' : '') : '' 1084 - 1085 - if has('win32unix') || has('wsl') 1086 - let s:clone_opt .= ' -c core.eol=lf -c core.autocrlf=input' 1087 - endif 1088 - 1089 - let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : '' 1090 - 1091 - " Python version requirement (>= 2.7) 1092 - if python && !has('python3') && !ruby && !use_job && s:update.threads > 1 1093 - redir => pyv 1094 - silent python import platform; print platform.python_version() 1095 - redir END 1096 - let python = s:version_requirement( 1097 - \ map(split(split(pyv)[0], '\.'), 'str2nr(v:val)'), [2, 6]) 1098 - endif 1099 - 1100 - if (python || ruby) && s:update.threads > 1 1101 - try 1102 - let imd = &imd 1103 - if s:mac_gui 1104 - set noimd 1105 - endif 1106 - if ruby 1107 - call s:update_ruby() 1108 - else 1109 - call s:update_python() 1110 - endif 1111 - catch 1112 - let lines = getline(4, '$') 1113 - let printed = {} 1114 - silent! 4,$d _ 1115 - for line in lines 1116 - let name = s:extract_name(line, '.', '') 1117 - if empty(name) || !has_key(printed, name) 1118 - call append('$', line) 1119 - if !empty(name) 1120 - let printed[name] = 1 1121 - if line[0] == 'x' && index(s:update.errors, name) < 0 1122 - call add(s:update.errors, name) 1123 - end 1124 - endif 1125 - endif 1126 - endfor 1127 - finally 1128 - let &imd = imd 1129 - call s:update_finish() 1130 - endtry 1131 - else 1132 - call s:update_vim() 1133 - while use_job && sync 1134 - sleep 100m 1135 - if s:update.fin 1136 - break 1137 - endif 1138 - endwhile 1139 - endif 1140 - endfunction 1141 - 1142 - function! s:log4(name, msg) 1143 - call setline(4, printf('- %s (%s)', a:msg, a:name)) 1144 - redraw 1145 - endfunction 1146 - 1147 - function! s:update_finish() 1148 - if exists('s:git_terminal_prompt') 1149 - let $GIT_TERMINAL_PROMPT = s:git_terminal_prompt 1150 - endif 1151 - if s:switch_in() 1152 - call append(3, '- Updating ...') | 4 1153 - for [name, spec] in items(filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && (s:update.force || s:update.pull || has_key(s:update.new, v:key))')) 1154 - let [pos, _] = s:logpos(name) 1155 - if !pos 1156 - continue 1157 - endif 1158 - if has_key(spec, 'commit') 1159 - call s:log4(name, 'Checking out '.spec.commit) 1160 - let out = s:checkout(spec) 1161 - elseif has_key(spec, 'tag') 1162 - let tag = spec.tag 1163 - if tag =~ '\*' 1164 - let tags = s:lines(s:system('git tag --list '.plug#shellescape(tag).' --sort -version:refname 2>&1', spec.dir)) 1165 - if !v:shell_error && !empty(tags) 1166 - let tag = tags[0] 1167 - call s:log4(name, printf('Latest tag for %s -> %s', spec.tag, tag)) 1168 - call append(3, '') 1169 - endif 1170 - endif 1171 - call s:log4(name, 'Checking out '.tag) 1172 - let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir) 1173 - else 1174 - let branch = get(spec, 'branch', 'master') 1175 - call s:log4(name, 'Merging origin/'.s:esc(branch)) 1176 - let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1' 1177 - \. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir) 1178 - endif 1179 - if !v:shell_error && filereadable(spec.dir.'/.gitmodules') && 1180 - \ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir)) 1181 - call s:log4(name, 'Updating submodules. This may take a while.') 1182 - let out .= s:bang('git submodule update --init --recursive'.s:submodule_opt.' 2>&1', spec.dir) 1183 - endif 1184 - let msg = s:format_message(v:shell_error ? 'x': '-', name, out) 1185 - if v:shell_error 1186 - call add(s:update.errors, name) 1187 - call s:regress_bar() 1188 - silent execute pos 'd _' 1189 - call append(4, msg) | 4 1190 - elseif !empty(out) 1191 - call setline(pos, msg[0]) 1192 - endif 1193 - redraw 1194 - endfor 1195 - silent 4 d _ 1196 - try 1197 - call s:do(s:update.pull, s:update.force, filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && has_key(v:val, "do")')) 1198 - catch 1199 - call s:warn('echom', v:exception) 1200 - call s:warn('echo', '') 1201 - return 1202 - endtry 1203 - call s:finish(s:update.pull) 1204 - call setline(1, 'Updated. Elapsed time: ' . split(reltimestr(reltime(s:update.start)))[0] . ' sec.') 1205 - call s:switch_out('normal! gg') 1206 - endif 1207 - endfunction 1208 - 1209 - function! s:job_abort() 1210 - if (!s:nvim && !s:vim8) || !exists('s:jobs') 1211 - return 1212 - endif 1213 - 1214 - for [name, j] in items(s:jobs) 1215 - if s:nvim 1216 - silent! call jobstop(j.jobid) 1217 - elseif s:vim8 1218 - silent! call job_stop(j.jobid) 1219 - endif 1220 - if j.new 1221 - call s:rm_rf(g:plugs[name].dir) 1222 - endif 1223 - endfor 1224 - let s:jobs = {} 1225 - endfunction 1226 - 1227 - function! s:last_non_empty_line(lines) 1228 - let len = len(a:lines) 1229 - for idx in range(len) 1230 - let line = a:lines[len-idx-1] 1231 - if !empty(line) 1232 - return line 1233 - endif 1234 - endfor 1235 - return '' 1236 - endfunction 1237 - 1238 - function! s:job_out_cb(self, data) abort 1239 - let self = a:self 1240 - let data = remove(self.lines, -1) . a:data 1241 - let lines = map(split(data, "\n", 1), 'split(v:val, "\r", 1)[-1]') 1242 - call extend(self.lines, lines) 1243 - " To reduce the number of buffer updates 1244 - let self.tick = get(self, 'tick', -1) + 1 1245 - if !self.running || self.tick % len(s:jobs) == 0 1246 - let bullet = self.running ? (self.new ? '+' : '*') : (self.error ? 'x' : '-') 1247 - let result = self.error ? join(self.lines, "\n") : s:last_non_empty_line(self.lines) 1248 - call s:log(bullet, self.name, result) 1249 - endif 1250 - endfunction 1251 - 1252 - function! s:job_exit_cb(self, data) abort 1253 - let a:self.running = 0 1254 - let a:self.error = a:data != 0 1255 - call s:reap(a:self.name) 1256 - call s:tick() 1257 - endfunction 1258 - 1259 - function! s:job_cb(fn, job, ch, data) 1260 - if !s:plug_window_exists() " plug window closed 1261 - return s:job_abort() 1262 - endif 1263 - call call(a:fn, [a:job, a:data]) 1264 - endfunction 1265 - 1266 - function! s:nvim_cb(job_id, data, event) dict abort 1267 - return a:event == 'stdout' ? 1268 - \ s:job_cb('s:job_out_cb', self, 0, join(a:data, "\n")) : 1269 - \ s:job_cb('s:job_exit_cb', self, 0, a:data) 1270 - endfunction 1271 - 1272 - function! s:spawn(name, cmd, opts) 1273 - let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''], 1274 - \ 'new': get(a:opts, 'new', 0) } 1275 - let s:jobs[a:name] = job 1276 - let cmd = has_key(a:opts, 'dir') ? s:with_cd(a:cmd, a:opts.dir, 0) : a:cmd 1277 - let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd] 1278 - 1279 - if s:nvim 1280 - call extend(job, { 1281 - \ 'on_stdout': function('s:nvim_cb'), 1282 - \ 'on_exit': function('s:nvim_cb'), 1283 - \ }) 1284 - let jid = s:plug_call('jobstart', argv, job) 1285 - if jid > 0 1286 - let job.jobid = jid 1287 - else 1288 - let job.running = 0 1289 - let job.error = 1 1290 - let job.lines = [jid < 0 ? argv[0].' is not executable' : 1291 - \ 'Invalid arguments (or job table is full)'] 1292 - endif 1293 - elseif s:vim8 1294 - let jid = job_start(s:is_win ? join(argv, ' ') : argv, { 1295 - \ 'out_cb': function('s:job_cb', ['s:job_out_cb', job]), 1296 - \ 'exit_cb': function('s:job_cb', ['s:job_exit_cb', job]), 1297 - \ 'out_mode': 'raw' 1298 - \}) 1299 - if job_status(jid) == 'run' 1300 - let job.jobid = jid 1301 - else 1302 - let job.running = 0 1303 - let job.error = 1 1304 - let job.lines = ['Failed to start job'] 1305 - endif 1306 - else 1307 - let job.lines = s:lines(call('s:system', [cmd])) 1308 - let job.error = v:shell_error != 0 1309 - let job.running = 0 1310 - endif 1311 - endfunction 1312 - 1313 - function! s:reap(name) 1314 - let job = s:jobs[a:name] 1315 - if job.error 1316 - call add(s:update.errors, a:name) 1317 - elseif get(job, 'new', 0) 1318 - let s:update.new[a:name] = 1 1319 - endif 1320 - let s:update.bar .= job.error ? 'x' : '=' 1321 - 1322 - let bullet = job.error ? 'x' : '-' 1323 - let result = job.error ? join(job.lines, "\n") : s:last_non_empty_line(job.lines) 1324 - call s:log(bullet, a:name, empty(result) ? 'OK' : result) 1325 - call s:bar() 1326 - 1327 - call remove(s:jobs, a:name) 1328 - endfunction 1329 - 1330 - function! s:bar() 1331 - if s:switch_in() 1332 - let total = len(s:update.all) 1333 - call setline(1, (s:update.pull ? 'Updating' : 'Installing'). 1334 - \ ' plugins ('.len(s:update.bar).'/'.total.')') 1335 - call s:progress_bar(2, s:update.bar, total) 1336 - call s:switch_out() 1337 - endif 1338 - endfunction 1339 - 1340 - function! s:logpos(name) 1341 - let max = line('$') 1342 - for i in range(4, max > 4 ? max : 4) 1343 - if getline(i) =~# '^[-+x*] '.a:name.':' 1344 - for j in range(i + 1, max > 5 ? max : 5) 1345 - if getline(j) !~ '^ ' 1346 - return [i, j - 1] 1347 - endif 1348 - endfor 1349 - return [i, i] 1350 - endif 1351 - endfor 1352 - return [0, 0] 1353 - endfunction 1354 - 1355 - function! s:log(bullet, name, lines) 1356 - if s:switch_in() 1357 - let [b, e] = s:logpos(a:name) 1358 - if b > 0 1359 - silent execute printf('%d,%d d _', b, e) 1360 - if b > winheight('.') 1361 - let b = 4 1362 - endif 1363 - else 1364 - let b = 4 1365 - endif 1366 - " FIXME For some reason, nomodifiable is set after :d in vim8 1367 - setlocal modifiable 1368 - call append(b - 1, s:format_message(a:bullet, a:name, a:lines)) 1369 - call s:switch_out() 1370 - endif 1371 - endfunction 1372 - 1373 - function! s:update_vim() 1374 - let s:jobs = {} 1375 - 1376 - call s:bar() 1377 - call s:tick() 1378 - endfunction 1379 - 1380 - function! s:tick() 1381 - let pull = s:update.pull 1382 - let prog = s:progress_opt(s:nvim || s:vim8) 1383 - while 1 " Without TCO, Vim stack is bound to explode 1384 - if empty(s:update.todo) 1385 - if empty(s:jobs) && !s:update.fin 1386 - call s:update_finish() 1387 - let s:update.fin = 1 1388 - endif 1389 - return 1390 - endif 1391 - 1392 - let name = keys(s:update.todo)[0] 1393 - let spec = remove(s:update.todo, name) 1394 - let new = empty(globpath(spec.dir, '.git', 1)) 1395 - 1396 - call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...') 1397 - redraw 1398 - 1399 - let has_tag = has_key(spec, 'tag') 1400 - if !new 1401 - let [error, _] = s:git_validate(spec, 0) 1402 - if empty(error) 1403 - if pull 1404 - let fetch_opt = (has_tag && !empty(globpath(spec.dir, '.git/shallow'))) ? '--depth 99999999' : '' 1405 - call s:spawn(name, printf('git fetch %s %s 2>&1', fetch_opt, prog), { 'dir': spec.dir }) 1406 - else 1407 - let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 } 1408 - endif 1409 - else 1410 - let s:jobs[name] = { 'running': 0, 'lines': s:lines(error), 'error': 1 } 1411 - endif 1412 - else 1413 - call s:spawn(name, 1414 - \ printf('git clone %s %s %s %s 2>&1', 1415 - \ has_tag ? '' : s:clone_opt, 1416 - \ prog, 1417 - \ plug#shellescape(spec.uri, {'script': 0}), 1418 - \ plug#shellescape(s:trim(spec.dir), {'script': 0})), { 'new': 1 }) 1419 - endif 1420 - 1421 - if !s:jobs[name].running 1422 - call s:reap(name) 1423 - endif 1424 - if len(s:jobs) >= s:update.threads 1425 - break 1426 - endif 1427 - endwhile 1428 - endfunction 1429 - 1430 - function! s:update_python() 1431 - let py_exe = has('python') ? 'python' : 'python3' 1432 - execute py_exe "<< EOF" 1433 - import datetime 1434 - import functools 1435 - import os 1436 - try: 1437 - import queue 1438 - except ImportError: 1439 - import Queue as queue 1440 - import random 1441 - import re 1442 - import shutil 1443 - import signal 1444 - import subprocess 1445 - import tempfile 1446 - import threading as thr 1447 - import time 1448 - import traceback 1449 - import vim 1450 - 1451 - G_NVIM = vim.eval("has('nvim')") == '1' 1452 - G_PULL = vim.eval('s:update.pull') == '1' 1453 - G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1 1454 - G_TIMEOUT = int(vim.eval('get(g:, "plug_timeout", 60)')) 1455 - G_CLONE_OPT = vim.eval('s:clone_opt') 1456 - G_PROGRESS = vim.eval('s:progress_opt(1)') 1457 - G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads')) 1458 - G_STOP = thr.Event() 1459 - G_IS_WIN = vim.eval('s:is_win') == '1' 1460 - 1461 - class PlugError(Exception): 1462 - def __init__(self, msg): 1463 - self.msg = msg 1464 - class CmdTimedOut(PlugError): 1465 - pass 1466 - class CmdFailed(PlugError): 1467 - pass 1468 - class InvalidURI(PlugError): 1469 - pass 1470 - class Action(object): 1471 - INSTALL, UPDATE, ERROR, DONE = ['+', '*', 'x', '-'] 1472 - 1473 - class Buffer(object): 1474 - def __init__(self, lock, num_plugs, is_pull): 1475 - self.bar = '' 1476 - self.event = 'Updating' if is_pull else 'Installing' 1477 - self.lock = lock 1478 - self.maxy = int(vim.eval('winheight(".")')) 1479 - self.num_plugs = num_plugs 1480 - 1481 - def __where(self, name): 1482 - """ Find first line with name in current buffer. Return line num. """ 1483 - found, lnum = False, 0 1484 - matcher = re.compile('^[-+x*] {0}:'.format(name)) 1485 - for line in vim.current.buffer: 1486 - if matcher.search(line) is not None: 1487 - found = True 1488 - break 1489 - lnum += 1 1490 - 1491 - if not found: 1492 - lnum = -1 1493 - return lnum 1494 - 1495 - def header(self): 1496 - curbuf = vim.current.buffer 1497 - curbuf[0] = self.event + ' plugins ({0}/{1})'.format(len(self.bar), self.num_plugs) 1498 - 1499 - num_spaces = self.num_plugs - len(self.bar) 1500 - curbuf[1] = '[{0}{1}]'.format(self.bar, num_spaces * ' ') 1501 - 1502 - with self.lock: 1503 - vim.command('normal! 2G') 1504 - vim.command('redraw') 1505 - 1506 - def write(self, action, name, lines): 1507 - first, rest = lines[0], lines[1:] 1508 - msg = ['{0} {1}{2}{3}'.format(action, name, ': ' if first else '', first)] 1509 - msg.extend([' ' + line for line in rest]) 1510 - 1511 - try: 1512 - if action == Action.ERROR: 1513 - self.bar += 'x' 1514 - vim.command("call add(s:update.errors, '{0}')".format(name)) 1515 - elif action == Action.DONE: 1516 - self.bar += '=' 1517 - 1518 - curbuf = vim.current.buffer 1519 - lnum = self.__where(name) 1520 - if lnum != -1: # Found matching line num 1521 - del curbuf[lnum] 1522 - if lnum > self.maxy and action in set([Action.INSTALL, Action.UPDATE]): 1523 - lnum = 3 1524 - else: 1525 - lnum = 3 1526 - curbuf.append(msg, lnum) 1527 - 1528 - self.header() 1529 - except vim.error: 1530 - pass 1531 - 1532 - class Command(object): 1533 - CD = 'cd /d' if G_IS_WIN else 'cd' 1534 - 1535 - def __init__(self, cmd, cmd_dir=None, timeout=60, cb=None, clean=None): 1536 - self.cmd = cmd 1537 - if cmd_dir: 1538 - self.cmd = '{0} {1} && {2}'.format(Command.CD, cmd_dir, self.cmd) 1539 - self.timeout = timeout 1540 - self.callback = cb if cb else (lambda msg: None) 1541 - self.clean = clean if clean else (lambda: None) 1542 - self.proc = None 1543 - 1544 - @property 1545 - def alive(self): 1546 - """ Returns true only if command still running. """ 1547 - return self.proc and self.proc.poll() is None 1548 - 1549 - def execute(self, ntries=3): 1550 - """ Execute the command with ntries if CmdTimedOut. 1551 - Returns the output of the command if no Exception. 1552 - """ 1553 - attempt, finished, limit = 0, False, self.timeout 1554 - 1555 - while not finished: 1556 - try: 1557 - attempt += 1 1558 - result = self.try_command() 1559 - finished = True 1560 - return result 1561 - except CmdTimedOut: 1562 - if attempt != ntries: 1563 - self.notify_retry() 1564 - self.timeout += limit 1565 - else: 1566 - raise 1567 - 1568 - def notify_retry(self): 1569 - """ Retry required for command, notify user. """ 1570 - for count in range(3, 0, -1): 1571 - if G_STOP.is_set(): 1572 - raise KeyboardInterrupt 1573 - msg = 'Timeout. Will retry in {0} second{1} ...'.format( 1574 - count, 's' if count != 1 else '') 1575 - self.callback([msg]) 1576 - time.sleep(1) 1577 - self.callback(['Retrying ...']) 1578 - 1579 - def try_command(self): 1580 - """ Execute a cmd & poll for callback. Returns list of output. 1581 - Raises CmdFailed -> return code for Popen isn't 0 1582 - Raises CmdTimedOut -> command exceeded timeout without new output 1583 - """ 1584 - first_line = True 1585 - 1586 - try: 1587 - tfile = tempfile.NamedTemporaryFile(mode='w+b') 1588 - preexec_fn = not G_IS_WIN and os.setsid or None 1589 - self.proc = subprocess.Popen(self.cmd, stdout=tfile, 1590 - stderr=subprocess.STDOUT, 1591 - stdin=subprocess.PIPE, shell=True, 1592 - preexec_fn=preexec_fn) 1593 - thrd = thr.Thread(target=(lambda proc: proc.wait()), args=(self.proc,)) 1594 - thrd.start() 1595 - 1596 - thread_not_started = True 1597 - while thread_not_started: 1598 - try: 1599 - thrd.join(0.1) 1600 - thread_not_started = False 1601 - except RuntimeError: 1602 - pass 1603 - 1604 - while self.alive: 1605 - if G_STOP.is_set(): 1606 - raise KeyboardInterrupt 1607 - 1608 - if first_line or random.random() < G_LOG_PROB: 1609 - first_line = False 1610 - line = '' if G_IS_WIN else nonblock_read(tfile.name) 1611 - if line: 1612 - self.callback([line]) 1613 - 1614 - time_diff = time.time() - os.path.getmtime(tfile.name) 1615 - if time_diff > self.timeout: 1616 - raise CmdTimedOut(['Timeout!']) 1617 - 1618 - thrd.join(0.5) 1619 - 1620 - tfile.seek(0) 1621 - result = [line.decode('utf-8', 'replace').rstrip() for line in tfile] 1622 - 1623 - if self.proc.returncode != 0: 1624 - raise CmdFailed([''] + result) 1625 - 1626 - return result 1627 - except: 1628 - self.terminate() 1629 - raise 1630 - 1631 - def terminate(self): 1632 - """ Terminate process and cleanup. """ 1633 - if self.alive: 1634 - if G_IS_WIN: 1635 - os.kill(self.proc.pid, signal.SIGINT) 1636 - else: 1637 - os.killpg(self.proc.pid, signal.SIGTERM) 1638 - self.clean() 1639 - 1640 - class Plugin(object): 1641 - def __init__(self, name, args, buf_q, lock): 1642 - self.name = name 1643 - self.args = args 1644 - self.buf_q = buf_q 1645 - self.lock = lock 1646 - self.tag = args.get('tag', 0) 1647 - 1648 - def manage(self): 1649 - try: 1650 - if os.path.exists(self.args['dir']): 1651 - self.update() 1652 - else: 1653 - self.install() 1654 - with self.lock: 1655 - thread_vim_command("let s:update.new['{0}'] = 1".format(self.name)) 1656 - except PlugError as exc: 1657 - self.write(Action.ERROR, self.name, exc.msg) 1658 - except KeyboardInterrupt: 1659 - G_STOP.set() 1660 - self.write(Action.ERROR, self.name, ['Interrupted!']) 1661 - except: 1662 - # Any exception except those above print stack trace 1663 - msg = 'Trace:\n{0}'.format(traceback.format_exc().rstrip()) 1664 - self.write(Action.ERROR, self.name, msg.split('\n')) 1665 - raise 1666 - 1667 - def install(self): 1668 - target = self.args['dir'] 1669 - if target[-1] == '\\': 1670 - target = target[0:-1] 1671 - 1672 - def clean(target): 1673 - def _clean(): 1674 - try: 1675 - shutil.rmtree(target) 1676 - except OSError: 1677 - pass 1678 - return _clean 1679 - 1680 - self.write(Action.INSTALL, self.name, ['Installing ...']) 1681 - callback = functools.partial(self.write, Action.INSTALL, self.name) 1682 - cmd = 'git clone {0} {1} {2} {3} 2>&1'.format( 1683 - '' if self.tag else G_CLONE_OPT, G_PROGRESS, self.args['uri'], 1684 - esc(target)) 1685 - com = Command(cmd, None, G_TIMEOUT, callback, clean(target)) 1686 - result = com.execute(G_RETRIES) 1687 - self.write(Action.DONE, self.name, result[-1:]) 1688 - 1689 - def repo_uri(self): 1690 - cmd = 'git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url' 1691 - command = Command(cmd, self.args['dir'], G_TIMEOUT,) 1692 - result = command.execute(G_RETRIES) 1693 - return result[-1] 1694 - 1695 - def update(self): 1696 - actual_uri = self.repo_uri() 1697 - expect_uri = self.args['uri'] 1698 - regex = re.compile(r'^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$') 1699 - ma = regex.match(actual_uri) 1700 - mb = regex.match(expect_uri) 1701 - if ma is None or mb is None or ma.groups() != mb.groups(): 1702 - msg = ['', 1703 - 'Invalid URI: {0}'.format(actual_uri), 1704 - 'Expected {0}'.format(expect_uri), 1705 - 'PlugClean required.'] 1706 - raise InvalidURI(msg) 1707 - 1708 - if G_PULL: 1709 - self.write(Action.UPDATE, self.name, ['Updating ...']) 1710 - callback = functools.partial(self.write, Action.UPDATE, self.name) 1711 - fetch_opt = '--depth 99999999' if self.tag and os.path.isfile(os.path.join(self.args['dir'], '.git/shallow')) else '' 1712 - cmd = 'git fetch {0} {1} 2>&1'.format(fetch_opt, G_PROGRESS) 1713 - com = Command(cmd, self.args['dir'], G_TIMEOUT, callback) 1714 - result = com.execute(G_RETRIES) 1715 - self.write(Action.DONE, self.name, result[-1:]) 1716 - else: 1717 - self.write(Action.DONE, self.name, ['Already installed']) 1718 - 1719 - def write(self, action, name, msg): 1720 - self.buf_q.put((action, name, msg)) 1721 - 1722 - class PlugThread(thr.Thread): 1723 - def __init__(self, tname, args): 1724 - super(PlugThread, self).__init__() 1725 - self.tname = tname 1726 - self.args = args 1727 - 1728 - def run(self): 1729 - thr.current_thread().name = self.tname 1730 - buf_q, work_q, lock = self.args 1731 - 1732 - try: 1733 - while not G_STOP.is_set(): 1734 - name, args = work_q.get_nowait() 1735 - plug = Plugin(name, args, buf_q, lock) 1736 - plug.manage() 1737 - work_q.task_done() 1738 - except queue.Empty: 1739 - pass 1740 - 1741 - class RefreshThread(thr.Thread): 1742 - def __init__(self, lock): 1743 - super(RefreshThread, self).__init__() 1744 - self.lock = lock 1745 - self.running = True 1746 - 1747 - def run(self): 1748 - while self.running: 1749 - with self.lock: 1750 - thread_vim_command('noautocmd normal! a') 1751 - time.sleep(0.33) 1752 - 1753 - def stop(self): 1754 - self.running = False 1755 - 1756 - if G_NVIM: 1757 - def thread_vim_command(cmd): 1758 - vim.session.threadsafe_call(lambda: vim.command(cmd)) 1759 - else: 1760 - def thread_vim_command(cmd): 1761 - vim.command(cmd) 1762 - 1763 - def esc(name): 1764 - return '"' + name.replace('"', '\"') + '"' 1765 - 1766 - def nonblock_read(fname): 1767 - """ Read a file with nonblock flag. Return the last line. """ 1768 - fread = os.open(fname, os.O_RDONLY | os.O_NONBLOCK) 1769 - buf = os.read(fread, 100000).decode('utf-8', 'replace') 1770 - os.close(fread) 1771 - 1772 - line = buf.rstrip('\r\n') 1773 - left = max(line.rfind('\r'), line.rfind('\n')) 1774 - if left != -1: 1775 - left += 1 1776 - line = line[left:] 1777 - 1778 - return line 1779 - 1780 - def main(): 1781 - thr.current_thread().name = 'main' 1782 - nthreads = int(vim.eval('s:update.threads')) 1783 - plugs = vim.eval('s:update.todo') 1784 - mac_gui = vim.eval('s:mac_gui') == '1' 1785 - 1786 - lock = thr.Lock() 1787 - buf = Buffer(lock, len(plugs), G_PULL) 1788 - buf_q, work_q = queue.Queue(), queue.Queue() 1789 - for work in plugs.items(): 1790 - work_q.put(work) 1791 - 1792 - start_cnt = thr.active_count() 1793 - for num in range(nthreads): 1794 - tname = 'PlugT-{0:02}'.format(num) 1795 - thread = PlugThread(tname, (buf_q, work_q, lock)) 1796 - thread.start() 1797 - if mac_gui: 1798 - rthread = RefreshThread(lock) 1799 - rthread.start() 1800 - 1801 - while not buf_q.empty() or thr.active_count() != start_cnt: 1802 - try: 1803 - action, name, msg = buf_q.get(True, 0.25) 1804 - buf.write(action, name, ['OK'] if not msg else msg) 1805 - buf_q.task_done() 1806 - except queue.Empty: 1807 - pass 1808 - except KeyboardInterrupt: 1809 - G_STOP.set() 1810 - 1811 - if mac_gui: 1812 - rthread.stop() 1813 - rthread.join() 1814 - 1815 - main() 1816 - EOF 1817 - endfunction 1818 - 1819 - function! s:update_ruby() 1820 - ruby << EOF 1821 - module PlugStream 1822 - SEP = ["\r", "\n", nil] 1823 - def get_line 1824 - buffer = '' 1825 - loop do 1826 - char = readchar rescue return 1827 - if SEP.include? char.chr 1828 - buffer << $/ 1829 - break 1830 - else 1831 - buffer << char 1832 - end 1833 - end 1834 - buffer 1835 - end 1836 - end unless defined?(PlugStream) 1837 - 1838 - def esc arg 1839 - %["#{arg.gsub('"', '\"')}"] 1840 - end 1841 - 1842 - def killall pid 1843 - pids = [pid] 1844 - if /mswin|mingw|bccwin/ =~ RUBY_PLATFORM 1845 - pids.each { |pid| Process.kill 'INT', pid.to_i rescue nil } 1846 - else 1847 - unless `which pgrep 2> /dev/null`.empty? 1848 - children = pids 1849 - until children.empty? 1850 - children = children.map { |pid| 1851 - `pgrep -P #{pid}`.lines.map { |l| l.chomp } 1852 - }.flatten 1853 - pids += children 1854 - end 1855 - end 1856 - pids.each { |pid| Process.kill 'TERM', pid.to_i rescue nil } 1857 - end 1858 - end 1859 - 1860 - def compare_git_uri a, b 1861 - regex = %r{^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$} 1862 - regex.match(a).to_a.drop(1) == regex.match(b).to_a.drop(1) 1863 - end 1864 - 1865 - require 'thread' 1866 - require 'fileutils' 1867 - require 'timeout' 1868 - running = true 1869 - iswin = VIM::evaluate('s:is_win').to_i == 1 1870 - pull = VIM::evaluate('s:update.pull').to_i == 1 1871 - base = VIM::evaluate('g:plug_home') 1872 - all = VIM::evaluate('s:update.todo') 1873 - limit = VIM::evaluate('get(g:, "plug_timeout", 60)') 1874 - tries = VIM::evaluate('get(g:, "plug_retries", 2)') + 1 1875 - nthr = VIM::evaluate('s:update.threads').to_i 1876 - maxy = VIM::evaluate('winheight(".")').to_i 1877 - vim7 = VIM::evaluate('v:version').to_i <= 703 && RUBY_PLATFORM =~ /darwin/ 1878 - cd = iswin ? 'cd /d' : 'cd' 1879 - tot = VIM::evaluate('len(s:update.todo)') || 0 1880 - bar = '' 1881 - skip = 'Already installed' 1882 - mtx = Mutex.new 1883 - take1 = proc { mtx.synchronize { running && all.shift } } 1884 - logh = proc { 1885 - cnt = bar.length 1886 - $curbuf[1] = "#{pull ? 'Updating' : 'Installing'} plugins (#{cnt}/#{tot})" 1887 - $curbuf[2] = '[' + bar.ljust(tot) + ']' 1888 - VIM::command('normal! 2G') 1889 - VIM::command('redraw') 1890 - } 1891 - where = proc { |name| (1..($curbuf.length)).find { |l| $curbuf[l] =~ /^[-+x*] #{name}:/ } } 1892 - log = proc { |name, result, type| 1893 - mtx.synchronize do 1894 - ing = ![true, false].include?(type) 1895 - bar += type ? '=' : 'x' unless ing 1896 - b = case type 1897 - when :install then '+' when :update then '*' 1898 - when true, nil then '-' else 1899 - VIM::command("call add(s:update.errors, '#{name}')") 1900 - 'x' 1901 - end 1902 - result = 1903 - if type || type.nil? 1904 - ["#{b} #{name}: #{result.lines.to_a.last || 'OK'}"] 1905 - elsif result =~ /^Interrupted|^Timeout/ 1906 - ["#{b} #{name}: #{result}"] 1907 - else 1908 - ["#{b} #{name}"] + result.lines.map { |l| " " << l } 1909 - end 1910 - if lnum = where.call(name) 1911 - $curbuf.delete lnum 1912 - lnum = 4 if ing && lnum > maxy 1913 - end 1914 - result.each_with_index do |line, offset| 1915 - $curbuf.append((lnum || 4) - 1 + offset, line.gsub(/\e\[./, '').chomp) 1916 - end 1917 - logh.call 1918 - end 1919 - } 1920 - bt = proc { |cmd, name, type, cleanup| 1921 - tried = timeout = 0 1922 - begin 1923 - tried += 1 1924 - timeout += limit 1925 - fd = nil 1926 - data = '' 1927 - if iswin 1928 - Timeout::timeout(timeout) do 1929 - tmp = VIM::evaluate('tempname()') 1930 - system("(#{cmd}) > #{tmp}") 1931 - data = File.read(tmp).chomp 1932 - File.unlink tmp rescue nil 1933 - end 1934 - else 1935 - fd = IO.popen(cmd).extend(PlugStream) 1936 - first_line = true 1937 - log_prob = 1.0 / nthr 1938 - while line = Timeout::timeout(timeout) { fd.get_line } 1939 - data << line 1940 - log.call name, line.chomp, type if name && (first_line || rand < log_prob) 1941 - first_line = false 1942 - end 1943 - fd.close 1944 - end 1945 - [$? == 0, data.chomp] 1946 - rescue Timeout::Error, Interrupt => e 1947 - if fd && !fd.closed? 1948 - killall fd.pid 1949 - fd.close 1950 - end 1951 - cleanup.call if cleanup 1952 - if e.is_a?(Timeout::Error) && tried < tries 1953 - 3.downto(1) do |countdown| 1954 - s = countdown > 1 ? 's' : '' 1955 - log.call name, "Timeout. Will retry in #{countdown} second#{s} ...", type 1956 - sleep 1 1957 - end 1958 - log.call name, 'Retrying ...', type 1959 - retry 1960 - end 1961 - [false, e.is_a?(Interrupt) ? "Interrupted!" : "Timeout!"] 1962 - end 1963 - } 1964 - main = Thread.current 1965 - threads = [] 1966 - watcher = Thread.new { 1967 - if vim7 1968 - while VIM::evaluate('getchar(1)') 1969 - sleep 0.1 1970 - end 1971 - else 1972 - require 'io/console' # >= Ruby 1.9 1973 - nil until IO.console.getch == 3.chr 1974 - end 1975 - mtx.synchronize do 1976 - running = false 1977 - threads.each { |t| t.raise Interrupt } unless vim7 1978 - end 1979 - threads.each { |t| t.join rescue nil } 1980 - main.kill 1981 - } 1982 - refresh = Thread.new { 1983 - while true 1984 - mtx.synchronize do 1985 - break unless running 1986 - VIM::command('noautocmd normal! a') 1987 - end 1988 - sleep 0.2 1989 - end 1990 - } if VIM::evaluate('s:mac_gui') == 1 1991 - 1992 - clone_opt = VIM::evaluate('s:clone_opt') 1993 - progress = VIM::evaluate('s:progress_opt(1)') 1994 - nthr.times do 1995 - mtx.synchronize do 1996 - threads << Thread.new { 1997 - while pair = take1.call 1998 - name = pair.first 1999 - dir, uri, tag = pair.last.values_at *%w[dir uri tag] 2000 - exists = File.directory? dir 2001 - ok, result = 2002 - if exists 2003 - chdir = "#{cd} #{iswin ? dir : esc(dir)}" 2004 - ret, data = bt.call "#{chdir} && git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url", nil, nil, nil 2005 - current_uri = data.lines.to_a.last 2006 - if !ret 2007 - if data =~ /^Interrupted|^Timeout/ 2008 - [false, data] 2009 - else 2010 - [false, [data.chomp, "PlugClean required."].join($/)] 2011 - end 2012 - elsif !compare_git_uri(current_uri, uri) 2013 - [false, ["Invalid URI: #{current_uri}", 2014 - "Expected: #{uri}", 2015 - "PlugClean required."].join($/)] 2016 - else 2017 - if pull 2018 - log.call name, 'Updating ...', :update 2019 - fetch_opt = (tag && File.exist?(File.join(dir, '.git/shallow'))) ? '--depth 99999999' : '' 2020 - bt.call "#{chdir} && git fetch #{fetch_opt} #{progress} 2>&1", name, :update, nil 2021 - else 2022 - [true, skip] 2023 - end 2024 - end 2025 - else 2026 - d = esc dir.sub(%r{[\\/]+$}, '') 2027 - log.call name, 'Installing ...', :install 2028 - bt.call "git clone #{clone_opt unless tag} #{progress} #{uri} #{d} 2>&1", name, :install, proc { 2029 - FileUtils.rm_rf dir 2030 - } 2031 - end 2032 - mtx.synchronize { VIM::command("let s:update.new['#{name}'] = 1") } if !exists && ok 2033 - log.call name, result, ok 2034 - end 2035 - } if running 2036 - end 2037 - end 2038 - threads.each { |t| t.join rescue nil } 2039 - logh.call 2040 - refresh.kill if refresh 2041 - watcher.kill 2042 - EOF 2043 - endfunction 2044 - 2045 - function! s:shellesc_cmd(arg, script) 2046 - let escaped = substitute('"'.a:arg.'"', '[&|<>()@^!"]', '^&', 'g') 2047 - return substitute(escaped, '%', (a:script ? '%' : '^') . '&', 'g') 2048 - endfunction 2049 - 2050 - function! s:shellesc_ps1(arg) 2051 - return "'".substitute(escape(a:arg, '\"'), "'", "''", 'g')."'" 2052 - endfunction 2053 - 2054 - function! s:shellesc_sh(arg) 2055 - return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'" 2056 - endfunction 2057 - 2058 - function! plug#shellescape(arg, ...) 2059 - let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {} 2060 - let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh') 2061 - let script = get(opts, 'script', 1) 2062 - if shell =~# 'cmd\.exe' 2063 - return s:shellesc_cmd(a:arg, script) 2064 - elseif shell =~# 'powershell\.exe' || shell =~# 'pwsh$' 2065 - return s:shellesc_ps1(a:arg) 2066 - endif 2067 - return s:shellesc_sh(a:arg) 2068 - endfunction 2069 - 2070 - function! s:glob_dir(path) 2071 - return map(filter(s:glob(a:path, '**'), 'isdirectory(v:val)'), 's:dirpath(v:val)') 2072 - endfunction 2073 - 2074 - function! s:progress_bar(line, bar, total) 2075 - call setline(a:line, '[' . s:lpad(a:bar, a:total) . ']') 2076 - endfunction 2077 - 2078 - function! s:compare_git_uri(a, b) 2079 - " See `git help clone' 2080 - " https:// [user@] github.com[:port] / junegunn/vim-plug [.git] 2081 - " [git@] github.com[:port] : junegunn/vim-plug [.git] 2082 - " file:// / junegunn/vim-plug [/] 2083 - " / junegunn/vim-plug [/] 2084 - let pat = '^\%(\w\+://\)\='.'\%([^@/]*@\)\='.'\([^:/]*\%(:[0-9]*\)\=\)'.'[:/]'.'\(.\{-}\)'.'\%(\.git\)\=/\?$' 2085 - let ma = matchlist(a:a, pat) 2086 - let mb = matchlist(a:b, pat) 2087 - return ma[1:2] ==# mb[1:2] 2088 - endfunction 2089 - 2090 - function! s:format_message(bullet, name, message) 2091 - if a:bullet != 'x' 2092 - return [printf('%s %s: %s', a:bullet, a:name, s:lastline(a:message))] 2093 - else 2094 - let lines = map(s:lines(a:message), '" ".v:val') 2095 - return extend([printf('x %s:', a:name)], lines) 2096 - endif 2097 - endfunction 2098 - 2099 - function! s:with_cd(cmd, dir, ...) 2100 - let script = a:0 > 0 ? a:1 : 1 2101 - return printf('cd%s %s && %s', s:is_win ? ' /d' : '', plug#shellescape(a:dir, {'script': script}), a:cmd) 2102 - endfunction 2103 - 2104 - function! s:system(cmd, ...) 2105 - let batchfile = '' 2106 - try 2107 - let [sh, shellcmdflag, shrd] = s:chsh(1) 2108 - let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd 2109 - if s:is_win 2110 - let [batchfile, cmd] = s:batchfile(cmd) 2111 - endif 2112 - return system(cmd) 2113 - finally 2114 - let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] 2115 - if s:is_win && filereadable(batchfile) 2116 - call delete(batchfile) 2117 - endif 2118 - endtry 2119 - endfunction 2120 - 2121 - function! s:system_chomp(...) 2122 - let ret = call('s:system', a:000) 2123 - return v:shell_error ? '' : substitute(ret, '\n$', '', '') 2124 - endfunction 2125 - 2126 - function! s:git_validate(spec, check_branch) 2127 - let err = '' 2128 - if isdirectory(a:spec.dir) 2129 - let result = s:lines(s:system('git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url', a:spec.dir)) 2130 - let remote = result[-1] 2131 - if v:shell_error 2132 - let err = join([remote, 'PlugClean required.'], "\n") 2133 - elseif !s:compare_git_uri(remote, a:spec.uri) 2134 - let err = join(['Invalid URI: '.remote, 2135 - \ 'Expected: '.a:spec.uri, 2136 - \ 'PlugClean required.'], "\n") 2137 - elseif a:check_branch && has_key(a:spec, 'commit') 2138 - let result = s:lines(s:system('git rev-parse HEAD 2>&1', a:spec.dir)) 2139 - let sha = result[-1] 2140 - if v:shell_error 2141 - let err = join(add(result, 'PlugClean required.'), "\n") 2142 - elseif !s:hash_match(sha, a:spec.commit) 2143 - let err = join([printf('Invalid HEAD (expected: %s, actual: %s)', 2144 - \ a:spec.commit[:6], sha[:6]), 2145 - \ 'PlugUpdate required.'], "\n") 2146 - endif 2147 - elseif a:check_branch 2148 - let branch = result[0] 2149 - " Check tag 2150 - if has_key(a:spec, 'tag') 2151 - let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir) 2152 - if a:spec.tag !=# tag && a:spec.tag !~ '\*' 2153 - let err = printf('Invalid tag: %s (expected: %s). Try PlugUpdate.', 2154 - \ (empty(tag) ? 'N/A' : tag), a:spec.tag) 2155 - endif 2156 - " Check branch 2157 - elseif a:spec.branch !=# branch 2158 - let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.', 2159 - \ branch, a:spec.branch) 2160 - endif 2161 - if empty(err) 2162 - let [ahead, behind] = split(s:lastline(s:system(printf( 2163 - \ 'git rev-list --count --left-right HEAD...origin/%s', 2164 - \ a:spec.branch), a:spec.dir)), '\t') 2165 - if !v:shell_error && ahead 2166 - if behind 2167 - " Only mention PlugClean if diverged, otherwise it's likely to be 2168 - " pushable (and probably not that messed up). 2169 - let err = printf( 2170 - \ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n" 2171 - \ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', a:spec.branch, ahead, behind) 2172 - else 2173 - let err = printf("Ahead of origin/%s by %d commit(s).\n" 2174 - \ .'Cannot update until local changes are pushed.', 2175 - \ a:spec.branch, ahead) 2176 - endif 2177 - endif 2178 - endif 2179 - endif 2180 - else 2181 - let err = 'Not found' 2182 - endif 2183 - return [err, err =~# 'PlugClean'] 2184 - endfunction 2185 - 2186 - function! s:rm_rf(dir) 2187 - if isdirectory(a:dir) 2188 - call s:system((s:is_win ? 'rmdir /S /Q ' : 'rm -rf ') . plug#shellescape(a:dir)) 2189 - endif 2190 - endfunction 2191 - 2192 - function! s:clean(force) 2193 - call s:prepare() 2194 - call append(0, 'Searching for invalid plugins in '.g:plug_home) 2195 - call append(1, '') 2196 - 2197 - " List of valid directories 2198 - let dirs = [] 2199 - let errs = {} 2200 - let [cnt, total] = [0, len(g:plugs)] 2201 - for [name, spec] in items(g:plugs) 2202 - if !s:is_managed(name) 2203 - call add(dirs, spec.dir) 2204 - else 2205 - let [err, clean] = s:git_validate(spec, 1) 2206 - if clean 2207 - let errs[spec.dir] = s:lines(err)[0] 2208 - else 2209 - call add(dirs, spec.dir) 2210 - endif 2211 - endif 2212 - let cnt += 1 2213 - call s:progress_bar(2, repeat('=', cnt), total) 2214 - normal! 2G 2215 - redraw 2216 - endfor 2217 - 2218 - let allowed = {} 2219 - for dir in dirs 2220 - let allowed[s:dirpath(s:plug_fnamemodify(dir, ':h:h'))] = 1 2221 - let allowed[dir] = 1 2222 - for child in s:glob_dir(dir) 2223 - let allowed[child] = 1 2224 - endfor 2225 - endfor 2226 - 2227 - let todo = [] 2228 - let found = sort(s:glob_dir(g:plug_home)) 2229 - while !empty(found) 2230 - let f = remove(found, 0) 2231 - if !has_key(allowed, f) && isdirectory(f) 2232 - call add(todo, f) 2233 - call append(line('$'), '- ' . f) 2234 - if has_key(errs, f) 2235 - call append(line('$'), ' ' . errs[f]) 2236 - endif 2237 - let found = filter(found, 'stridx(v:val, f) != 0') 2238 - end 2239 - endwhile 2240 - 2241 - 4 2242 - redraw 2243 - if empty(todo) 2244 - call append(line('$'), 'Already clean.') 2245 - else 2246 - let s:clean_count = 0 2247 - call append(3, ['Directories to delete:', '']) 2248 - redraw! 2249 - if a:force || s:ask_no_interrupt('Delete all directories?') 2250 - call s:delete([6, line('$')], 1) 2251 - else 2252 - call setline(4, 'Cancelled.') 2253 - nnoremap <silent> <buffer> d :set opfunc=<sid>delete_op<cr>g@ 2254 - nmap <silent> <buffer> dd d_ 2255 - xnoremap <silent> <buffer> d :<c-u>call <sid>delete_op(visualmode(), 1)<cr> 2256 - echo 'Delete the lines (d{motion}) to delete the corresponding directories' 2257 - endif 2258 - endif 2259 - 4 2260 - setlocal nomodifiable 2261 - endfunction 2262 - 2263 - function! s:delete_op(type, ...) 2264 - call s:delete(a:0 ? [line("'<"), line("'>")] : [line("'["), line("']")], 0) 2265 - endfunction 2266 - 2267 - function! s:delete(range, force) 2268 - let [l1, l2] = a:range 2269 - let force = a:force 2270 - while l1 <= l2 2271 - let line = getline(l1) 2272 - if line =~ '^- ' && isdirectory(line[2:]) 2273 - execute l1 2274 - redraw! 2275 - let answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1) 2276 - let force = force || answer > 1 2277 - if answer 2278 - call s:rm_rf(line[2:]) 2279 - setlocal modifiable 2280 - call setline(l1, '~'.line[1:]) 2281 - let s:clean_count += 1 2282 - call setline(4, printf('Removed %d directories.', s:clean_count)) 2283 - setlocal nomodifiable 2284 - endif 2285 - endif 2286 - let l1 += 1 2287 - endwhile 2288 - endfunction 2289 - 2290 - function! s:upgrade() 2291 - echo 'Downloading the latest version of vim-plug' 2292 - redraw 2293 - let tmp = s:plug_tempname() 2294 - let new = tmp . '/plug.vim' 2295 - 2296 - try 2297 - let out = s:system(printf('git clone --depth 1 %s %s', plug#shellescape(s:plug_src), plug#shellescape(tmp))) 2298 - if v:shell_error 2299 - return s:err('Error upgrading vim-plug: '. out) 2300 - endif 2301 - 2302 - if readfile(s:me) ==# readfile(new) 2303 - echo 'vim-plug is already up-to-date' 2304 - return 0 2305 - else 2306 - call rename(s:me, s:me . '.old') 2307 - call rename(new, s:me) 2308 - unlet g:loaded_plug 2309 - echo 'vim-plug has been upgraded' 2310 - return 1 2311 - endif 2312 - finally 2313 - silent! call s:rm_rf(tmp) 2314 - endtry 2315 - endfunction 2316 - 2317 - function! s:upgrade_specs() 2318 - for spec in values(g:plugs) 2319 - let spec.frozen = get(spec, 'frozen', 0) 2320 - endfor 2321 - endfunction 2322 - 2323 - function! s:status() 2324 - call s:prepare() 2325 - call append(0, 'Checking plugins') 2326 - call append(1, '') 2327 - 2328 - let ecnt = 0 2329 - let unloaded = 0 2330 - let [cnt, total] = [0, len(g:plugs)] 2331 - for [name, spec] in items(g:plugs) 2332 - let is_dir = isdirectory(spec.dir) 2333 - if has_key(spec, 'uri') 2334 - if is_dir 2335 - let [err, _] = s:git_validate(spec, 1) 2336 - let [valid, msg] = [empty(err), empty(err) ? 'OK' : err] 2337 - else 2338 - let [valid, msg] = [0, 'Not found. Try PlugInstall.'] 2339 - endif 2340 - else 2341 - if is_dir 2342 - let [valid, msg] = [1, 'OK'] 2343 - else 2344 - let [valid, msg] = [0, 'Not found.'] 2345 - endif 2346 - endif 2347 - let cnt += 1 2348 - let ecnt += !valid 2349 - " `s:loaded` entry can be missing if PlugUpgraded 2350 - if is_dir && get(s:loaded, name, -1) == 0 2351 - let unloaded = 1 2352 - let msg .= ' (not loaded)' 2353 - endif 2354 - call s:progress_bar(2, repeat('=', cnt), total) 2355 - call append(3, s:format_message(valid ? '-' : 'x', name, msg)) 2356 - normal! 2G 2357 - redraw 2358 - endfor 2359 - call setline(1, 'Finished. '.ecnt.' error(s).') 2360 - normal! gg 2361 - setlocal nomodifiable 2362 - if unloaded 2363 - echo "Press 'L' on each line to load plugin, or 'U' to update" 2364 - nnoremap <silent> <buffer> L :call <SID>status_load(line('.'))<cr> 2365 - xnoremap <silent> <buffer> L :call <SID>status_load(line('.'))<cr> 2366 - end 2367 - endfunction 2368 - 2369 - function! s:extract_name(str, prefix, suffix) 2370 - return matchstr(a:str, '^'.a:prefix.' \zs[^:]\+\ze:.*'.a:suffix.'$') 2371 - endfunction 2372 - 2373 - function! s:status_load(lnum) 2374 - let line = getline(a:lnum) 2375 - let name = s:extract_name(line, '-', '(not loaded)') 2376 - if !empty(name) 2377 - call plug#load(name) 2378 - setlocal modifiable 2379 - call setline(a:lnum, substitute(line, ' (not loaded)$', '', '')) 2380 - setlocal nomodifiable 2381 - endif 2382 - endfunction 2383 - 2384 - function! s:status_update() range 2385 - let lines = getline(a:firstline, a:lastline) 2386 - let names = filter(map(lines, 's:extract_name(v:val, "[x-]", "")'), '!empty(v:val)') 2387 - if !empty(names) 2388 - echo 2389 - execute 'PlugUpdate' join(names) 2390 - endif 2391 - endfunction 2392 - 2393 - function! s:is_preview_window_open() 2394 - silent! wincmd P 2395 - if &previewwindow 2396 - wincmd p 2397 - return 1 2398 - endif 2399 - endfunction 2400 - 2401 - function! s:find_name(lnum) 2402 - for lnum in reverse(range(1, a:lnum)) 2403 - let line = getline(lnum) 2404 - if empty(line) 2405 - return '' 2406 - endif 2407 - let name = s:extract_name(line, '-', '') 2408 - if !empty(name) 2409 - return name 2410 - endif 2411 - endfor 2412 - return '' 2413 - endfunction 2414 - 2415 - function! s:preview_commit() 2416 - if b:plug_preview < 0 2417 - let b:plug_preview = !s:is_preview_window_open() 2418 - endif 2419 - 2420 - let sha = matchstr(getline('.'), '^ \X*\zs[0-9a-f]\{7,9}') 2421 - if empty(sha) 2422 - return 2423 - endif 2424 - 2425 - let name = s:find_name(line('.')) 2426 - if empty(name) || !has_key(g:plugs, name) || !isdirectory(g:plugs[name].dir) 2427 - return 2428 - endif 2429 - 2430 - if exists('g:plug_pwindow') && !s:is_preview_window_open() 2431 - execute g:plug_pwindow 2432 - execute 'e' sha 2433 - else 2434 - execute 'pedit' sha 2435 - wincmd P 2436 - endif 2437 - setlocal previewwindow filetype=git buftype=nofile nobuflisted modifiable 2438 - let batchfile = '' 2439 - try 2440 - let [sh, shellcmdflag, shrd] = s:chsh(1) 2441 - let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && git show --no-color --pretty=medium '.sha 2442 - if s:is_win 2443 - let [batchfile, cmd] = s:batchfile(cmd) 2444 - endif 2445 - execute 'silent %!' cmd 2446 - finally 2447 - let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] 2448 - if s:is_win && filereadable(batchfile) 2449 - call delete(batchfile) 2450 - endif 2451 - endtry 2452 - setlocal nomodifiable 2453 - nnoremap <silent> <buffer> q :q<cr> 2454 - wincmd p 2455 - endfunction 2456 - 2457 - function! s:section(flags) 2458 - call search('\(^[x-] \)\@<=[^:]\+:', a:flags) 2459 - endfunction 2460 - 2461 - function! s:format_git_log(line) 2462 - let indent = ' ' 2463 - let tokens = split(a:line, nr2char(1)) 2464 - if len(tokens) != 5 2465 - return indent.substitute(a:line, '\s*$', '', '') 2466 - endif 2467 - let [graph, sha, refs, subject, date] = tokens 2468 - let tag = matchstr(refs, 'tag: [^,)]\+') 2469 - let tag = empty(tag) ? ' ' : ' ('.tag.') ' 2470 - return printf('%s%s%s%s%s (%s)', indent, graph, sha, tag, subject, date) 2471 - endfunction 2472 - 2473 - function! s:append_ul(lnum, text) 2474 - call append(a:lnum, ['', a:text, repeat('-', len(a:text))]) 2475 - endfunction 2476 - 2477 - function! s:diff() 2478 - call s:prepare() 2479 - call append(0, ['Collecting changes ...', '']) 2480 - let cnts = [0, 0] 2481 - let bar = '' 2482 - let total = filter(copy(g:plugs), 's:is_managed(v:key) && isdirectory(v:val.dir)') 2483 - call s:progress_bar(2, bar, len(total)) 2484 - for origin in [1, 0] 2485 - let plugs = reverse(sort(items(filter(copy(total), (origin ? '' : '!').'(has_key(v:val, "commit") || has_key(v:val, "tag"))')))) 2486 - if empty(plugs) 2487 - continue 2488 - endif 2489 - call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:') 2490 - for [k, v] in plugs 2491 - let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..' 2492 - let cmd = 'git log --graph --color=never ' 2493 - \ . (s:git_version_requirement(2, 10, 0) ? '--no-show-signature ' : '') 2494 - \ . join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 'plug#shellescape(v:val)')) 2495 - if has_key(v, 'rtp') 2496 - let cmd .= ' -- '.plug#shellescape(v.rtp) 2497 - endif 2498 - let diff = s:system_chomp(cmd, v.dir) 2499 - if !empty(diff) 2500 - let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : '' 2501 - call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)'))) 2502 - let cnts[origin] += 1 2503 - endif 2504 - let bar .= '=' 2505 - call s:progress_bar(2, bar, len(total)) 2506 - normal! 2G 2507 - redraw 2508 - endfor 2509 - if !cnts[origin] 2510 - call append(5, ['', 'N/A']) 2511 - endif 2512 - endfor 2513 - call setline(1, printf('%d plugin(s) updated.', cnts[0]) 2514 - \ . (cnts[1] ? printf(' %d plugin(s) have pending updates.', cnts[1]) : '')) 2515 - 2516 - if cnts[0] || cnts[1] 2517 - nnoremap <silent> <buffer> <plug>(plug-preview) :silent! call <SID>preview_commit()<cr> 2518 - if empty(maparg("\<cr>", 'n')) 2519 - nmap <buffer> <cr> <plug>(plug-preview) 2520 - endif 2521 - if empty(maparg('o', 'n')) 2522 - nmap <buffer> o <plug>(plug-preview) 2523 - endif 2524 - endif 2525 - if cnts[0] 2526 - nnoremap <silent> <buffer> X :call <SID>revert()<cr> 2527 - echo "Press 'X' on each block to revert the update" 2528 - endif 2529 - normal! gg 2530 - setlocal nomodifiable 2531 - endfunction 2532 - 2533 - function! s:revert() 2534 - if search('^Pending updates', 'bnW') 2535 - return 2536 - endif 2537 - 2538 - let name = s:find_name(line('.')) 2539 - if empty(name) || !has_key(g:plugs, name) || 2540 - \ input(printf('Revert the update of %s? (y/N) ', name)) !~? '^y' 2541 - return 2542 - endif 2543 - 2544 - call s:system('git reset --hard HEAD@{1} && git checkout '.plug#shellescape(g:plugs[name].branch).' --', g:plugs[name].dir) 2545 - setlocal modifiable 2546 - normal! "_dap 2547 - setlocal nomodifiable 2548 - echo 'Reverted' 2549 - endfunction 2550 - 2551 - function! s:snapshot(force, ...) abort 2552 - call s:prepare() 2553 - setf vim 2554 - call append(0, ['" Generated by vim-plug', 2555 - \ '" '.strftime("%c"), 2556 - \ '" :source this file in vim to restore the snapshot', 2557 - \ '" or execute: vim -S snapshot.vim', 2558 - \ '', '', 'PlugUpdate!']) 2559 - 1 2560 - let anchor = line('$') - 3 2561 - let names = sort(keys(filter(copy(g:plugs), 2562 - \'has_key(v:val, "uri") && !has_key(v:val, "commit") && isdirectory(v:val.dir)'))) 2563 - for name in reverse(names) 2564 - let sha = s:system_chomp('git rev-parse --short HEAD', g:plugs[name].dir) 2565 - if !empty(sha) 2566 - call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha)) 2567 - redraw 2568 - endif 2569 - endfor 2570 - 2571 - if a:0 > 0 2572 - let fn = s:plug_expand(a:1) 2573 - if filereadable(fn) && !(a:force || s:ask(a:1.' already exists. Overwrite?')) 2574 - return 2575 - endif 2576 - call writefile(getline(1, '$'), fn) 2577 - echo 'Saved as '.a:1 2578 - silent execute 'e' s:esc(fn) 2579 - setf vim 2580 - endif 2581 - endfunction 2582 - 2583 - function! s:split_rtp() 2584 - return split(&rtp, '\\\@<!,') 2585 - endfunction 2586 - 2587 - let s:first_rtp = s:escrtp(get(s:split_rtp(), 0, '')) 2588 - let s:last_rtp = s:escrtp(get(s:split_rtp(), -1, '')) 2589 - 2590 - if exists('g:plugs') 2591 - let g:plugs_order = get(g:, 'plugs_order', keys(g:plugs)) 2592 - call s:upgrade_specs() 2593 - call s:define_commands() 2594 - endif 2595 - 2596 - let &cpo = s:cpo_save 2597 - unlet s:cpo_save
-6
theme/.config/nvim/coc-settings.json
··· 1 - { 2 - "python.linting.enabled": false, 3 - "rust-client.disableRustup": true, 4 - "python.jediEnabled": false, 5 - "java.home": "/usr/lib/jvm/default/" 6 - }
-183
theme/.config/nvim/init.vim
··· 1 - let mapleader ="," 2 - let maplocalleader = "\\" 3 - 4 - if ! filereadable(expand('~/.config/nvim/autoload/plug.vim')) 5 - echo "Downloading junegunn/vim-plug to manage plugins..." 6 - silent !mkdir -p ~/.config/nvim/autoload/ 7 - silent !curl "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" > ~/.config/nvim/autoload/plug.vim 8 - endif 9 - 10 - call plug#begin('~/.config/nvim/plugged') 11 - Plug 'mhinz/vim-startify' 12 - Plug 'bagrat/vim-buffet' 13 - Plug 'majutsushi/tagbar' 14 - Plug 'scrooloose/nerdtree' 15 - Plug 'godlygeek/tabular' 16 - 17 - Plug 'neoclide/coc.nvim', {'branch': 'release'} 18 - Plug 'itchyny/lightline.vim' 19 - 20 - Plug 'rust-lang/rust.vim' 21 - Plug 'cespare/vim-toml' 22 - Plug 'plasticboy/vim-markdown' 23 - Plug 'PotatoesMaster/i3-vim-syntax' 24 - Plug 'dracula/vim', { 'as': 'dracula' } 25 - Plug 'ap/vim-css-color' 26 - 27 - Plug 'tpope/vim-surround' 28 - Plug 'rbgrouleff/bclose.vim' 29 - Plug 'jreybert/vimagit' 30 - Plug 'LukeSmithxyz/vimling' 31 - Plug 'vimwiki/vimwiki' 32 - Plug 'tpope/vim-commentary' 33 - call plug#end() 34 - 35 - set go=a 36 - set mouse=a 37 - set nohlsearch 38 - set clipboard+=unnamedplus 39 - 40 - 41 - " Some basics: 42 - nnoremap c "_c 43 - set nocompatible 44 - filetype plugin on 45 - set bg=dark 46 - colorscheme dracula 47 - syntax on 48 - set encoding=utf-8 49 - set number relativenumber 50 - " Enable autocompletion: 51 - set wildmode=longest,list,full 52 - " Disables automatic commenting on newline: 53 - autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o 54 - 55 - " Spell-check set to <leader>o, 'o' for 'orthography': 56 - map <leader>o :setlocal spell! spelllang=en_us<CR> 57 - 58 - " Splits open at the bottom and right, unlike vim defaults. 59 - set splitbelow splitright 60 - 61 - " Nerd tree 62 - map <leader>n :NERDTreeToggle<CR> 63 - autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif 64 - let NERDTreeMinimalUI = 1 65 - let NERDTreeDirArrows = 1 66 - " vimling: 67 - nm <leader>d :call ToggleDeadKeys()<CR> 68 - imap <leader>d <esc>:call ToggleDeadKeys()<CR>a 69 - nm <leader>i :call ToggleIPA()<CR> 70 - imap <leader>i <esc>:call ToggleIPA()<CR>a 71 - nm <leader>q :call ToggleProse()<CR> 72 - 73 - " Shortcutting split navigation, saving a keypress: 74 - map <C-h> <C-w>h 75 - map <C-j> <C-w>j 76 - map <C-k> <C-w>k 77 - map <C-l> <C-w>l 78 - 79 - " Replace all is aliased to S. 80 - nnoremap S :%s//g<Left><Left> 81 - 82 - " Open corresponding .pdf/.html or preview 83 - map <leader>p :!opout <c-r>%<CR><CR> 84 - 85 - " Ensure files are read as what I want: 86 - " let g:vimwiki_ext2syntax = {'.Rmd': 'markdown', '.rmd': 'markdown','.md': 'markdown', '.markdown': 'markdown', '.mdown': 'markdown'} 87 - autocmd BufRead,BufNewFile *.ms,*.me,*.mom,*.man set filetype=groff 88 - autocmd BufRead,BufNewFile *.tex set filetype=tex 89 - 90 - " Copy to clipboard: 91 - vnoremap <leader>y "+y 92 - nnoremap <leader>Y "+yg_ 93 - nnoremap <leader>y "+y 94 - nnoremap <leader>yy "+yy 95 - 96 - " Paste from clipboard: 97 - nnoremap <leader>p "+p 98 - nnoremap <leader>P "+P 99 - vnoremap <leader>p "+p 100 - vnoremap <leader>P "+P 101 - 102 - " Automatically deletes all trailing whitespace on save. 103 - autocmd BufWritePre * %s/\s\+$//e 104 - 105 - " Vim Buffet: 106 - nmap <leader>1 <Plug>BuffetSwitch(1) 107 - nmap <leader>2 <Plug>BuffetSwitch(2) 108 - nmap <leader>3 <Plug>BuffetSwitch(3) 109 - nmap <leader>4 <Plug>BuffetSwitch(4) 110 - nmap <leader>5 <Plug>BuffetSwitch(5) 111 - nmap <leader>6 <Plug>BuffetSwitch(6) 112 - nmap <leader>7 <Plug>BuffetSwitch(7) 113 - nmap <leader>8 <Plug>BuffetSwitch(8) 114 - nmap <leader>9 <Plug>BuffetSwitch(9) 115 - nmap <leader>0 <Plug>BuffetSwitch(10) 116 - 117 - noremap <Tab> :bn<CR> 118 - noremap <S-Tab> :bp<CR> 119 - noremap <Leader><Tab> :Bw<CR> 120 - noremap <Leader><S-Tab> :Bw!<CR> 121 - noremap <C-t> :tabnew split<CR> 122 - 123 - " use <tab> for trigger completion and navigate to the next complete item 124 - function! s:check_back_space() abort 125 - let col = col('.') - 1 126 - return !col || getline('.')[col - 1] =~ '\s' 127 - endfunction 128 - 129 - " Coc autocompletion on Tab 130 - inoremap <silent><expr> <Tab> 131 - \ pumvisible() ? "\<C-n>" : 132 - \ <SID>check_back_space() ? "\<Tab>" : 133 - \ coc#refresh() 134 - 135 - " Enable folding 136 - set foldmethod=indent 137 - 138 - " Rust autofmt on save 139 - let g:rustfmt_autosave = 1 140 - 141 - " Word warp 142 - set wrap linebreak nolist 143 - 144 - " Markdown 145 - let g:vimwiki_list = [{'path': '~/vimwiki/', 146 - \ 'syntax': 'markdown', 'ext': '.md'}] 147 - 148 - set conceallevel=2 149 - let g:vim_markdown_conceal_code_blocks = 0 150 - let g:vim_markdown_new_list_item_indent = 0 151 - let g:vim_markdown_auto_insert_bullets = 1 152 - let g:vim_markdown_folding_disabled = 1 153 - let g:vim_markdown_fenced_languages = ['csharp=cs', 'rust=rs'] 154 - let g:vim_markdown_frontmatter = 1 155 - let g:vim_markdown_strikethrough = 1 156 - let g:vim_markdown_autowrite = 1 157 - autocmd FileType markdown setlocal commentstring=<!--\ %s\ --> 158 - 159 - " Save file as sudo on files that require root permission 160 - cnoremap w!! execute 'silent! write !sudo tee % >/dev/null' <bar> edit! 161 - 162 - let g:NERDTreeDirArrowExpandable = '' 163 - let g:NERDTreeDirArrowCollapsible = '' 164 - 165 - 166 - 167 - " let g:airline_powerline_fonts = 1 168 - let g:lightline = { 169 - \ 'colorscheme': 'dracula' 170 - \} 171 - 172 - set termguicolors 173 - let g:dracula_bold = 1 174 - let g:dracula_italic = 1 175 - let g:dracula_underline = 1 176 - let g:dracula_undercurl = 1 177 - let g:dracula_inverse = 1 178 - let g:dracula_colorterm = 1 179 - 180 - set noshowmode 181 - let g:buffet_powerline_separators = 1 182 - nmap <leader>t :TagbarToggle<CR> 183 -
theme/.fonts/Feenacasual.ttf

This is a binary file and will not be displayed.

theme/.fonts/Iosevka Nerd Font Complete.ttf

This is a binary file and will not be displayed.

theme/.fonts/iosevka-regular.ttf

This is a binary file and will not be displayed.

theme/.fonts/siji.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x11b.icons.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x11b.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x11b.psfu

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x11b2.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x11b2.psfu

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x11r.icons.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x11r.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x11r.psfu

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x11r2.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x11r2.psfu

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x13b.icons.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x13b.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x13b.psfu

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x13b2.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x13b2.psfu

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x13r.icons.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x13r.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x13r.psfu

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x13r2.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn6x13r2.psfu

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x12b.icons.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x12b.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x12b.psfu

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x12b2.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x12b2.psfu

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x12r.icons.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x12r.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x12r.psfu

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x12r2.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x12r2.psfu

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x14b.icons.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x14b.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x14b.psfu

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x14b2.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x14b2.psfu

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x14r.icons.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x14r.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x14r.psfu

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x14r2.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsyn7x14r2.psfu

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsynu6x11b.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsynu6x11r.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsynu6x13b.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsynu6x13r.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsynu7x12b.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsynu7x12r.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsynu7x14b.pcf

This is a binary file and will not be displayed.

theme/.fonts/termsyn/termsynu7x14r.pcf

This is a binary file and will not be displayed.

-37
theme/README.md
··· 1 - # Soothe: A leftwm configured theme 2 - 3 - If you're here, you would obviously want to know how it looks. 4 - ![Looks](./res.png) 5 - 6 - ## Configuration: 7 - 8 - ``` 9 - DE : Arch 10 - WM : Leftwm 11 - terminal : Alacritty 12 - colorscheme : Dracula 13 - bar : Polybar 14 - Launcher : Rofi 15 - ``` 16 - ## Installation 17 - 18 - Clone this repo to get started. 19 - 20 - ``` 21 - git clone https://github.com/b4skyx/leftwm-soothe.git 22 - cd leftwm-soothe 23 - ``` 24 - 25 - You would want to have the fonts installed first, so that everything is rendered correctly. 26 - To do so 27 - ``` 28 - cp -r .fonts/* ~/.fonts/ 29 - ``` 30 - 31 - To use the this theme, symlink the theme folder to your current leftwm theme 32 - ``` 33 - ln -s $PWD/theme $HOME/.config/leftwm/themes/current 34 - ``` 35 - 36 - Application specific themes such as rofi can be configured manually. Refer to their man pages in detail. 37 - Usually their specific configuration can be found in ``.config`` directory.
-195
theme/leftwm/config.toml
··· 1 - modkey = "Mod4" 2 - workspaces = [] 3 - tags = ["1", "2", "3", "4", "5", "6", "7", "8", "9"] 4 - 5 - [[keybind]] 6 - command = "Execute" 7 - value = "rofi -show drun" 8 - modifier = ["Mod1"] 9 - key = "space" 10 - 11 - [[keybind]] 12 - command = "Execute" 13 - value = "alacritty" 14 - modifier = ["modkey"] 15 - key = "Return" 16 - 17 - [[keybind]] 18 - command = "CloseWindow" 19 - modifier = ["modkey", "Shift"] 20 - key = "q" 21 - 22 - [[keybind]] 23 - command = "SoftReload" 24 - modifier = ["modkey", "Shift"] 25 - key = "r" 26 - 27 - [[keybind]] 28 - command = "Execute" 29 - value = "pkill leftwm" 30 - modifier = ["modkey", "Shift"] 31 - key = "x" 32 - 33 - [[keybind]] 34 - command = "Execute" 35 - value = "slock" 36 - modifier = ["modkey", "Control"] 37 - key = "l" 38 - 39 - [[keybind]] 40 - command = "MoveToLastWorkspace" 41 - modifier = ["modkey", "Shift"] 42 - key = "w" 43 - 44 - [[keybind]] 45 - command = "SwapTags" 46 - modifier = ["modkey"] 47 - key = "w" 48 - 49 - [[keybind]] 50 - command = "MoveWindowUp" 51 - modifier = ["modkey", "Shift"] 52 - key = "Up" 53 - 54 - [[keybind]] 55 - command = "MoveWindowDown" 56 - modifier = ["modkey", "Shift"] 57 - key = "Down" 58 - 59 - [[keybind]] 60 - command = "FocusWindowUp" 61 - modifier = ["modkey"] 62 - key = "Up" 63 - 64 - [[keybind]] 65 - command = "FocusWindowDown" 66 - modifier = ["modkey"] 67 - key = "Down" 68 - 69 - [[keybind]] 70 - command = "NextLayout" 71 - modifier = ["modkey", "Control"] 72 - key = "Up" 73 - 74 - [[keybind]] 75 - command = "PreviousLayout" 76 - modifier = ["modkey", "Control"] 77 - key = "Down" 78 - 79 - [[keybind]] 80 - command = "FocusWorkspaceNext" 81 - modifier = ["modkey"] 82 - key = "Right" 83 - 84 - [[keybind]] 85 - command = "FocusWorkspacePrevious" 86 - modifier = ["modkey"] 87 - key = "Left" 88 - 89 - [[keybind]] 90 - command = "GotoTag" 91 - value = "1" 92 - modifier = ["modkey"] 93 - key = "1" 94 - 95 - [[keybind]] 96 - command = "GotoTag" 97 - value = "2" 98 - modifier = ["modkey"] 99 - key = "2" 100 - 101 - [[keybind]] 102 - command = "GotoTag" 103 - value = "3" 104 - modifier = ["modkey"] 105 - key = "3" 106 - 107 - [[keybind]] 108 - command = "GotoTag" 109 - value = "4" 110 - modifier = ["modkey"] 111 - key = "4" 112 - 113 - [[keybind]] 114 - command = "GotoTag" 115 - value = "5" 116 - modifier = ["modkey"] 117 - key = "5" 118 - 119 - [[keybind]] 120 - command = "GotoTag" 121 - value = "6" 122 - modifier = ["modkey"] 123 - key = "6" 124 - 125 - [[keybind]] 126 - command = "GotoTag" 127 - value = "7" 128 - modifier = ["modkey"] 129 - key = "7" 130 - 131 - [[keybind]] 132 - command = "GotoTag" 133 - value = "8" 134 - modifier = ["modkey"] 135 - key = "8" 136 - 137 - [[keybind]] 138 - command = "GotoTag" 139 - value = "9" 140 - modifier = ["modkey"] 141 - key = "9" 142 - 143 - [[keybind]] 144 - command = "MoveToTag" 145 - value = "1" 146 - modifier = ["modkey", "Shift"] 147 - key = "1" 148 - 149 - [[keybind]] 150 - command = "MoveToTag" 151 - value = "2" 152 - modifier = ["modkey", "Shift"] 153 - key = "2" 154 - 155 - [[keybind]] 156 - command = "MoveToTag" 157 - value = "3" 158 - modifier = ["modkey", "Shift"] 159 - key = "3" 160 - 161 - [[keybind]] 162 - command = "MoveToTag" 163 - value = "4" 164 - modifier = ["modkey", "Shift"] 165 - key = "4" 166 - 167 - [[keybind]] 168 - command = "MoveToTag" 169 - value = "5" 170 - modifier = ["modkey", "Shift"] 171 - key = "5" 172 - 173 - [[keybind]] 174 - command = "MoveToTag" 175 - value = "6" 176 - modifier = ["modkey", "Shift"] 177 - key = "6" 178 - 179 - [[keybind]] 180 - command = "MoveToTag" 181 - value = "7" 182 - modifier = ["modkey", "Shift"] 183 - key = "7" 184 - 185 - [[keybind]] 186 - command = "MoveToTag" 187 - value = "8" 188 - modifier = ["modkey", "Shift"] 189 - key = "8" 190 - 191 - [[keybind]] 192 - command = "MoveToTag" 193 - value = "9" 194 - modifier = ["modkey", "Shift"] 195 - key = "9"
-14
theme/redshift.conf
··· 1 - [redshift] 2 - ; Set the day and night screen temperatures 3 - temp-day=6000 4 - temp-night=3700 5 - ; enabling smooth transition 6 - transition=1 7 - adjustment-method=randr 8 - ; Now specify the location manually 9 - location-provider=manual 10 - [manual] 11 - ; use the Internet to get your latitudes and longitudes 12 - ; below is the latitude and longitude for Delhi 13 - lat=28.38 14 - lon=77.12
theme/res.png

This is a binary file and will not be displayed.

theme/theme/background.jpg

This is a binary file and will not be displayed.

-2
theme/theme/change_to_tag
··· 1 - #!/bin/bash 2 - leftwm-command "SendWorkspaceToTag $1 $2"
-16
theme/theme/down
··· 1 - #!/usr/bin/env bash 2 - 3 - SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )" 4 - 5 - #set background 6 - if [ -x "$(command -v feh)" ]; then 7 - feh --bg-scale $SCRIPTPATH/down.jpg 8 - fi 9 - 10 - leftwm-command "UnloadTheme" 11 - 12 - pkill compton 13 - pkill picom 14 - pkill polybar 15 - pkill conky 16 -
theme/theme/down.jpg

This is a binary file and will not be displayed.

-1
theme/theme/fonts/.uuid
··· 1 - e07ef533-2869-4ebf-babe-8781586db690
theme/theme/fonts/Feenacasual.ttf

This is a binary file and will not be displayed.

theme/theme/fonts/Iosevka Nerd Font Complete.ttf

This is a binary file and will not be displayed.

theme/theme/fonts/iosevka-regular.ttf

This is a binary file and will not be displayed.

theme/theme/fonts/siji.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x11b.icons.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x11b.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x11b.psfu

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x11b2.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x11b2.psfu

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x11r.icons.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x11r.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x11r.psfu

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x11r2.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x11r2.psfu

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x13b.icons.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x13b.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x13b.psfu

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x13b2.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x13b2.psfu

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x13r.icons.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x13r.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x13r.psfu

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x13r2.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn6x13r2.psfu

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x12b.icons.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x12b.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x12b.psfu

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x12b2.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x12b2.psfu

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x12r.icons.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x12r.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x12r.psfu

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x12r2.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x12r2.psfu

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x14b.icons.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x14b.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x14b.psfu

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x14b2.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x14b2.psfu

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x14r.icons.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x14r.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x14r.psfu

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x14r2.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsyn7x14r2.psfu

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsynu6x11b.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsynu6x11r.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsynu6x13b.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsynu6x13r.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsynu7x12b.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsynu7x12r.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsynu7x14b.pcf

This is a binary file and will not be displayed.

theme/theme/fonts/termsyn/termsynu7x14r.pcf

This is a binary file and will not be displayed.

-551
theme/theme/forest/bars.ini
··· 1 - ;; ┌────────────────────────────────────────────────────┐ 2 - ;; │░█▀█░█▀█░█░░░█░█░█▀▄░█▀█░█▀▄░░░░░░░░░█▀▄░█▀█░█▀▄░█▀▀│ 3 - ;; │░█▀▀░█░█░█░░░░█░░█▀▄░█▀█░█▀▄░░░░▀░░░░█▀▄░█▀█░█▀▄░▀▀█│ 4 - ;; │░▀░░░▀▀▀░▀▀▀░░▀░░▀▀░░▀░▀░▀░▀░░░░▀░░░░▀▀░░▀░▀░▀░▀░▀▀▀│ 5 - ;; │░Created░By░Aditya░Shakya░@adi1090x░░░░░░░░░░░░░░░░░│ 6 - ;; └────────────────────────────────────────────────────┘ 7 - 8 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 9 - 10 - [bar] 11 - fill = ⏽ 12 - empty = ⏽ 13 - indicator = 14 - ; Nerd font :   ,  ⏽,  樂 籠 錄 , 雷 絛 15 - 16 - [module/volume] 17 - type = internal/alsa 18 - 19 - ; Soundcard to be used 20 - ; Usually in the format hw:# where # is the card number 21 - ; You can find the different card numbers in `/proc/asound/cards` 22 - master-soundcard = default 23 - speaker-soundcard = default 24 - headphone-soundcard = default 25 - 26 - ; Name of the master, speaker and headphone mixers 27 - ; Use the following command to list available mixer controls: 28 - ; $ amixer scontrols | sed -nr "s/.*'([[:alnum:]]+)'.*/\1/p" 29 - ; If master, speaker or headphone-soundcard isn't the default, 30 - ; use `amixer -c # scontrols` instead where # is the number 31 - ; of the master, speaker or headphone soundcard respectively 32 - ; 33 - ; Default: Master 34 - master-mixer = Master 35 - 36 - ; Optionally define speaker and headphone mixers 37 - ; Default: none 38 - ;;speaker-mixer = Speaker 39 - ; Default: none 40 - ;;headphone-mixer = Headphone 41 - 42 - ; NOTE: This is required if headphone_mixer is defined 43 - ; Use the following command to list available device controls 44 - ; $ amixer controls | sed -r "/CARD/\!d; s/.*=([0-9]+).*name='([^']+)'.*/printf '%3.0f: %s\n' '\1' '\2'/e" | sort 45 - ; You may also need to use `amixer -c # controls` as above for the mixer names 46 - ; Default: none 47 - ;;headphone-id = 9 48 - 49 - ; Use volume mapping (similar to amixer -M and alsamixer), where the increase in volume is linear to the ear 50 - ; Default: false 51 - ;;mapped = true 52 - 53 - ; Interval for volume increase/decrease (in percent points) 54 - ; Default: 5 55 - interval = 5 56 - 57 - ; Available tags: 58 - ; <label-volume> (default) 59 - ; <ramp-volume> 60 - ; <bar-volume> 61 - format-volume = <ramp-volume> <bar-volume> 62 - 63 - ; Available tags: 64 - ; <label-muted> (default) 65 - ; <ramp-volume> 66 - ; <bar-volume> 67 - format-muted = <label-muted> 68 - format-muted-prefix =  69 - format-muted-prefix-foreground = ${color.red} 70 - 71 - ; Available tokens: 72 - ; %percentage% (default) 73 - label-volume = %percentage%% 74 - 75 - ; Available tokens: 76 - ; %percentage% (default 77 - label-muted = " Muted" 78 - label-muted-foreground = ${color.sep} 79 - 80 - ; Only applies if <ramp-volume> is used 81 - ramp-volume-0 =  82 - ramp-volume-1 =  83 - ramp-volume-2 =  84 - ramp-volume-foreground = ${color.blue} 85 - 86 - ; Only applies if <bar-volume> is used 87 - bar-volume-format = "%fill%%indicator%%empty%" 88 - bar-volume-width = 11 89 - bar-volume-gradient = false 90 - 91 - bar-volume-indicator = ${bar.indicator} 92 - bar-volume-indicator-foreground = ${color.foreground} 93 - bar-volume-indicator-font = 2 94 - 95 - bar-volume-fill = ${bar.fill} 96 - bar-volume-fill-font = 2 97 - bar-volume-foreground-0 = ${color.green} 98 - bar-volume-foreground-1 = ${color.green} 99 - bar-volume-foreground-2 = ${color.yellow} 100 - bar-volume-foreground-3 = ${color.yellow} 101 - bar-volume-foreground-4 = ${color.red} 102 - 103 - bar-volume-empty = ${bar.empty} 104 - bar-volume-empty-font = 2 105 - bar-volume-empty-foreground = ${color.sep} 106 - 107 - ; If defined, it will replace <ramp-volume> when 108 - ; headphones are plugged in to `headphone_control_numid` 109 - ; If undefined, <ramp-volume> will be used for both 110 - ; Only applies if <ramp-volume> is used 111 - ramp-headphones-0 =  112 - 113 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 114 - 115 - [module/brightness] 116 - ;type = internal/xbacklight 117 - type = internal/backlight 118 - 119 - ; Use the following command to list available cards: 120 - ; $ ls -1 /sys/class/backlight/ 121 - ;card = intel_backlight 122 - card = amdgpu_bl0 123 - 124 - ; Available tags: 125 - ; <label> (default) 126 - ; <ramp> 127 - ; <bar> 128 - format = <ramp> <bar> 129 - 130 - ; Available tokens: 131 - ; %percentage% (default) 132 - label = %percentage%% 133 - 134 - ; Only applies if <ramp> is used 135 - ramp-0 =  136 - ramp-1 =  137 - ramp-2 =  138 - ramp-3 =  139 - ramp-4 =  140 - ramp-foreground = ${color.lime} 141 - 142 - ; Only applies if <bar> is used 143 - bar-format = "%fill%%indicator%%empty%" 144 - bar-width = 11 145 - bar-gradient = false 146 - 147 - bar-indicator = ${bar.indicator} 148 - bar-indicator-foreground = ${color.foreground} 149 - bar-indicator-font = 2 150 - 151 - bar-fill = ${bar.fill} 152 - bar-fill-font = 2 153 - bar-foreground-0 = ${color.green} 154 - bar-foreground-1 = ${color.green} 155 - bar-foreground-2 = ${color.yellow} 156 - bar-foreground-3 = ${color.yellow} 157 - bar-foreground-4 = ${color.red} 158 - 159 - bar-empty = ${bar.empty} 160 - bar-empty-font = 2 161 - bar-empty-foreground = ${color.sep} 162 - 163 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 164 - 165 - [module/battery_bar] 166 - type = internal/battery 167 - 168 - ; This is useful in case the battery never reports 100% charge 169 - full-at = 99 170 - 171 - ; Use the following command to list batteries and adapters: 172 - ; $ ls -1 /sys/class/power_supply/ 173 - battery = BAT1 174 - adapter = ACAD 175 - 176 - ; If an inotify event haven't been reported in this many 177 - ; seconds, manually poll for new values. 178 - ; 179 - ; Needed as a fallback for systems that don't report events 180 - ; on sysfs/procfs. 181 - ; 182 - ; Disable polling by setting the interval to 0. 183 - ; 184 - ; Default: 5 185 - poll-interval = 2 186 - 187 - ; see "man date" for details on how to format the time string 188 - ; NOTE: if you want to use syntax tags here you need to use %%{...} 189 - ; Default: %H:%M:%S 190 - time-format = %H:%M 191 - 192 - ; Available tags: 193 - ; <label-charging> (default) 194 - ; <bar-capacity> 195 - ; <ramp-capacity> 196 - ; <animation-charging> 197 - format-charging = <bar-capacity> 198 - format-charging-prefix = "" 199 - format-charging-prefix-foreground = ${color.green} 200 - 201 - ; Available tags: 202 - ; <label-discharging> (default) 203 - ; <bar-capacity> 204 - ; <ramp-capacity> 205 - ; <animation-discharging> 206 - format-discharging = <bar-capacity> 207 - format-discharging-prefix = "" 208 - format-discharging-prefix-foreground = ${color.pink} 209 - 210 - ; Available tags: 211 - ; <label-full> (default) 212 - ; <bar-capacity> 213 - ; <ramp-capacity> 214 - format-full = <label-full> 215 - format-full-prefix = "" 216 - format-full-prefix-foreground = ${color.red} 217 - 218 - ; Available tokens: 219 - ; %percentage% (default) 220 - ; %time% 221 - ; %consumption% (shows current charge rate in watts) 222 - 223 - label-charging = %percentage%% 224 - 225 - ; Available tokens: 226 - ; %percentage% (default) 227 - ; %time% 228 - ; %consumption% (shows current discharge rate in watts) 229 - label-discharging = %percentage%% 230 - 231 - ; Available tokens: 232 - ; %percentage% (default) 233 - label-full = Full 234 - 235 - ; Only applies if <bar-capacity> is used 236 - bar-capacity-format = " %fill%%indicator%%empty%" 237 - bar-capacity-width = 11 238 - bar-capacity-gradient = false 239 - 240 - bar-capacity-indicator = ${bar.indicator} 241 - bar-capacity-indicator-font = 2 242 - bar-capacity-indicator-foreground = ${color.foreground} 243 - 244 - bar-capacity-fill = ${bar.fill} 245 - bar-capacity-fill-font = 2 246 - bar-capacity-foreground-0 = ${color.green} 247 - bar-capacity-foreground-1 = ${color.green} 248 - bar-capacity-foreground-2 = ${color.yellow} 249 - bar-capacity-foreground-3 = ${color.yellow} 250 - bar-capacity-foreground-4 = ${color.red} 251 - 252 - bar-capacity-empty = ${bar.empty} 253 - bar-capacity-empty-font = 2 254 - bar-capacity-empty-foreground = ${color.sep} 255 - bar-fill-font = 2 256 - 257 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 258 - 259 - [module/cpu_bar] 260 - type = internal/cpu 261 - 262 - ; Seconds to sleep between updates 263 - ; Default: 1 264 - interval = 0.5 265 - 266 - ; Available tags: 267 - ; <label> (default) 268 - ; <bar-load> 269 - ; <ramp-load> 270 - ; <ramp-coreload> 271 - ;;format = <label> <ramp-coreload> 272 - format = <bar-load><label> 273 - format-prefix =  274 - format-prefix-foreground = ${color.teal} 275 - 276 - ; Available tokens: 277 - ; %percentage% (default) - total cpu load averaged over all cores 278 - ; %percentage-sum% - Cumulative load on all cores 279 - ; %percentage-cores% - load percentage for each core 280 - ; %percentage-core[1-9]% - load percentage for specific core 281 - label = " %percentage%%" 282 - 283 - ; Only applies if <bar-load> is used 284 - bar-load-format = " %fill%%indicator%%empty%" 285 - bar-load-width = 11 286 - bar-load-gradient = false 287 - 288 - bar-load-indicator = ${bar.indicator} 289 - bar-load-indicator-font = 2 290 - bar-load-indicator-foreground = ${color.foreground} 291 - 292 - bar-load-fill = ${bar.fill} 293 - bar-load-fill-font = 2 294 - bar-load-foreground-0 = ${color.green} 295 - bar-load-foreground-1 = ${color.green} 296 - bar-load-foreground-2 = ${color.yellow} 297 - bar-load-foreground-3 = ${color.yellow} 298 - bar-load-foreground-4 = ${color.red} 299 - 300 - bar-load-empty = ${bar.empty} 301 - bar-load-empty-font = 2 302 - bar-load-empty-foreground = ${color.sep} 303 - 304 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 305 - 306 - [module/filesystem_bar] 307 - type = internal/fs 308 - 309 - ; Mountpoints to display 310 - mount-0 = / 311 - ;;mount-1 = /home 312 - ;;mount-2 = /var 313 - 314 - ; Seconds to sleep between updates 315 - ; Default: 30 316 - interval = 30 317 - 318 - ; Display fixed precision values 319 - ; Default: false 320 - fixed-values = false 321 - 322 - ; Spacing between entries 323 - ; Default: 2 324 - ;;spacing = 4 325 - 326 - ; Available tags: 327 - ; <label-mounted> (default) 328 - ; <bar-free> 329 - ; <bar-used> 330 - ; <ramp-capacity> 331 - format-mounted = <bar-used><label-mounted> 332 - format-mounted-prefix =  333 - format-mounted-prefix-foreground = ${color.purple} 334 - 335 - ; Available tags: 336 - ; <label-unmounted> (default) 337 - format-unmounted = <label-unmounted> 338 - format-unmounted-prefix =  339 - format-unmounted-prefix-foreground = ${color.red} 340 - 341 - ; Available tokens: 342 - ; %mountpoint% 343 - ; %type% 344 - ; %fsname% 345 - ; %percentage_free% 346 - ; %percentage_used% 347 - ; %total% 348 - ; %free% 349 - ; %used% 350 - ; Default: %mountpoint% %percentage_free%% 351 - label-mounted = " %used%/%total%" 352 - 353 - ; Available tokens: 354 - ; %mountpoint% 355 - ; Default: %mountpoint% is not mounted 356 - label-unmounted = " %mountpoint%: not mounted" 357 - 358 - ; Only applies if <bar-used> is used 359 - bar-used-format = " %fill%%indicator%%empty%" 360 - bar-used-width = 11 361 - bar-used-gradient = false 362 - 363 - bar-used-indicator = ${bar.indicator} 364 - bar-used-indicator-font = 2 365 - bar-used-indicator-foreground = ${color.foreground} 366 - 367 - bar-used-fill = ${bar.fill} 368 - bar-used-fill-font = 2 369 - bar-used-foreground-0 = ${color.green} 370 - bar-used-foreground-1 = ${color.green} 371 - bar-used-foreground-2 = ${color.yellow} 372 - bar-used-foreground-3 = ${color.yellow} 373 - bar-used-foreground-4 = ${color.red} 374 - 375 - bar-used-empty = ${bar.empty} 376 - bar-used-empty-font = 2 377 - bar-used-empty-foreground = ${color.sep} 378 - 379 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 380 - 381 - [module/memory_bar] 382 - type = internal/memory 383 - 384 - ; Seconds to sleep between updates 385 - ; Default: 1 386 - interval = 2 387 - 388 - ; Available tags: 389 - ; <label> (default) 390 - ; <bar-used> 391 - ; <bar-free> 392 - ; <ramp-used> 393 - ; <ramp-free> 394 - ; <bar-swap-used> 395 - ; <bar-swap-free> 396 - ; <ramp-swap-used> 397 - ; <ramp-swap-free> 398 - format = <bar-used><label> 399 - format-prefix =  400 - format-prefix-foreground = ${color.indigo} 401 - 402 - ; Available tokens: 403 - ; %percentage_used% (default) 404 - ; %percentage_free% 405 - ; %gb_used% 406 - ; %gb_free% 407 - ; %gb_total% 408 - ; %mb_used% 409 - ; %mb_free% 410 - ; %mb_total% 411 - ; %percentage_swap_used% 412 - ; %percentage_swap_free% 413 - ; %mb_swap_total% 414 - ; %mb_swap_free% 415 - ; %mb_swap_used% 416 - ; %gb_swap_total% 417 - ; %gb_swap_free% 418 - ; %gb_swap_used% 419 - 420 - label = " %mb_used%" 421 - 422 - ; Only applies if <bar-used> is used 423 - bar-used-format = " %fill%%indicator%%empty%" 424 - bar-used-width = 11 425 - bar-used-gradient = false 426 - 427 - bar-used-indicator = ${bar.indicator} 428 - bar-used-indicator-font = 2 429 - bar-used-indicator-foreground = ${color.foreground} 430 - 431 - bar-used-fill = ${bar.fill} 432 - bar-used-fill-font = 2 433 - bar-used-foreground-0 = ${color.green} 434 - bar-used-foreground-1 = ${color.green} 435 - bar-used-foreground-2 = ${color.yellow} 436 - bar-used-foreground-3 = ${color.yellow} 437 - bar-used-foreground-4 = ${color.red} 438 - 439 - bar-used-empty = ${bar.empty} 440 - bar-used-empty-font = 2 441 - bar-used-empty-foreground = ${color.sep} 442 - 443 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 444 - 445 - [module/mpd_bar] 446 - type = internal/mpd 447 - 448 - ; Host where mpd is running (either ip or domain name) 449 - ; Can also be the full path to a unix socket where mpd is running. 450 - ;;host = 127.0.0.1 451 - ;;port = 6600 452 - ;;password = mysecretpassword 453 - 454 - ; Seconds to sleep between progressbar/song timer sync 455 - ; Default: 1 456 - interval = 1 457 - 458 - ; Available tags: 459 - ; <label-song> (default) 460 - ; <label-time> 461 - ; <bar-progress> 462 - ; <toggle> - gets replaced with <icon-(pause|play)> 463 - ; <toggle-stop> - gets replaced with <icon-(stop|play)> 464 - ; <icon-random> 465 - ; <icon-repeat> 466 - ; <icon-repeatone> (deprecated) 467 - ; <icon-single> - Toggle playing only a single song. Replaces <icon-repeatone> 468 - ; <icon-consume> 469 - ; <icon-prev> 470 - ; <icon-stop> 471 - ; <icon-play> 472 - ; <icon-pause> 473 - ; <icon-next> 474 - ; <icon-seekb> 475 - ; <icon-seekf> 476 - format-online = <label-song><bar-progress><label-time> 477 - format-online-prefix =  478 - format-online-prefix-foreground = ${color.green} 479 - 480 - ;format-playing = ${self.format-online} 481 - ;format-paused = ${self.format-online} 482 - ;format-stopped = ${self.format-online} 483 - 484 - ; Available tags: 485 - ; <label-offline> 486 - format-offline = <label-offline> 487 - format-offline-prefix =  488 - format-offline-prefix-foreground = ${color.red} 489 - 490 - ; Available tokens: 491 - ; %artist% 492 - ; %album-artist% 493 - ; %album% 494 - ; %date% 495 - ; %title% 496 - ; Default: %artist% - %title% 497 - label-song = " %artist% - %title%" 498 - label-song-maxlen = 25 499 - label-song-ellipsis = true 500 - 501 - ; Available tokens: 502 - ; %elapsed% 503 - ; %total% 504 - ; Default: %elapsed% / %total% 505 - label-time = " %elapsed% / %total%" 506 - 507 - ; Available tokens: 508 - ; None 509 - label-offline = " Offline" 510 - 511 - ; Only applies if <icon-X> is used 512 - icon-play =  513 - icon-pause =  514 - icon-stop =  515 - icon-next =  516 - icon-prev =  517 - icon-seekf = 518 - icon-seekb = 519 - icon-random = 520 - icon-repeat = 521 - icon-repeatone = 522 - icon-single = 523 - icon-consume = 524 - 525 - ; Used to display the state of random/repeat/repeatone/single 526 - ; Only applies if <icon-[random|repeat|repeatone|single]> is used 527 - toggle-on-foreground = ${color.primary} 528 - toggle-off-foreground = ${color.secondary} 529 - 530 - ; Only applies if <bar-progress> is used 531 - bar-progress-format = " %fill%%indicator%%empty%" 532 - bar-progress-width = 11 533 - bar-progress-gradient = false 534 - 535 - bar-progress-indicator = ${bar.indicator} 536 - bar-progress-indicator-font = 2 537 - bar-progress-indicator-foreground = ${color.foreground} 538 - 539 - bar-progress-fill = ${bar.fill} 540 - bar-progress-fill-font = 2 541 - bar-progress-foreground-0 = ${color.green} 542 - bar-progress-foreground-1 = ${color.green} 543 - bar-progress-foreground-2 = ${color.yellow} 544 - bar-progress-foreground-3 = ${color.yellow} 545 - bar-progress-foreground-4 = ${color.red} 546 - 547 - bar-progress-empty = ${bar.empty} 548 - bar-progress-empty-font = 2 549 - bar-progress-empty-foreground = ${color.sep} 550 - 551 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
-37
theme/theme/forest/colors.ini
··· 1 - ;; ┌────────────────────────────────────────────────────────────┐ 2 - ;; │░█▀█░█▀█░█░░░█░█░█▀▄░█▀█░█▀▄░░░░░░░░░█▀▀░█▀█░█░░░█▀█░█▀▄░█▀▀│ 3 - ;; │░█▀▀░█░█░█░░░░█░░█▀▄░█▀█░█▀▄░░░░▀░░░░█░░░█░█░█░░░█░█░█▀▄░▀▀█│ 4 - ;; │░▀░░░▀▀▀░▀▀▀░░▀░░▀▀░░▀░▀░▀░▀░░░░▀░░░░▀▀▀░▀▀▀░▀▀▀░▀▀▀░▀░▀░▀▀▀│ 5 - ;; │░Created░By░Aditya░Shakya░@adi1090x░░░░░░░░░░░░░░░░░░░░░░░░░│ 6 - ;; └────────────────────────────────────────────────────────────┘ 7 - 8 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 9 - 10 - [color] 11 - 12 - ;; Use pywal.sh in scripts directory to use colors from an image/wallpaper. 13 - 14 - ;; main colors 15 - background = #212B30 16 - foreground = #C4C7C5 17 - sep = #3F5360 18 - 19 - white = #FFFFFF 20 - black = #000000 21 - red = #EC7875 22 - pink = #EC407A 23 - purple = #BA68C8 24 - blue = #42A5F5 25 - cyan = #4DD0E1 26 - teal = #00B19F 27 - green = #61C766 28 - lime = #B9C244 29 - yellow = #FDD835 30 - amber = #FBC02D 31 - orange = #E57C46 32 - brown = #AC8476 33 - indigo = #6C77BB 34 - gray = #9E9E9E 35 - blue-gray = #6D8895 36 - 37 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
-294
theme/theme/forest/config.ini
··· 1 - ;; ┌────────────────────────────────────────────────────────────┐ 2 - ;; │░█▀█░█▀█░█░░░█░█░█▀▄░█▀█░█▀▄░░░░░░░░░█▀▀░█▀█░█▀█░█▀▀░▀█▀░█▀▀│ 3 - ;; │░█▀▀░█░█░█░░░░█░░█▀▄░█▀█░█▀▄░░░░▀░░░░█░░░█░█░█░█░█▀▀░░█░░█░█│ 4 - ;; │░▀░░░▀▀▀░▀▀▀░░▀░░▀▀░░▀░▀░▀░▀░░░░▀░░░░▀▀▀░▀▀▀░▀░▀░▀░░░▀▀▀░▀▀▀│ 5 - ;; │░Created░By░Aditya░Shakya░@adi1090x░░░░░░░░░░░░░░░░░░░░░░░░░│ 6 - ;; └────────────────────────────────────────────────────────────┘ 7 - 8 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 9 - 10 - ;; Global WM Settings 11 - 12 - [global/wm] 13 - ; Adjust the _NET_WM_STRUT_PARTIAL top value 14 - ; Used for top aligned bars 15 - margin-bottom = 0 16 - 17 - ; Adjust the _NET_WM_STRUT_PARTIAL bottom value 18 - ; Used for bottom aligned bars 19 - margin-top = 0 20 - 21 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 22 - 23 - ;; File Inclusion 24 - ; include an external file, like module file, etc. 25 - 26 - include-file = ~/.config/polybar/forest/bars.ini 27 - include-file = ~/.config/polybar/forest/colors.ini 28 - include-file = ~/.config/polybar/forest/modules.ini 29 - include-file = ~/.config/polybar/forest/user_modules.ini 30 - 31 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 32 - 33 - ;; Bar Settings 34 - 35 - [bar/main] 36 - ; Use either of the following command to list available outputs: 37 - ; If unspecified, the application will pick the first one it finds. 38 - ; $ polybar -m | cut -d ':' -f 1 39 - ; $ xrandr -q | grep " connected" | cut -d ' ' -f1 40 - monitor = 41 - 42 - ; Use the specified monitor as a fallback if the main one is not found. 43 - monitor-fallback = 44 - 45 - ; Require the monitor to be in connected state 46 - ; XRandR sometimes reports my monitor as being disconnected (when in use) 47 - monitor-strict = false 48 - 49 - ; Tell the Window Manager not to configure the window. 50 - ; Use this to detach the bar if your WM is locking its size/position. 51 - override-redirect = false 52 - 53 - ; Put the bar at the bottom of the screen 54 - bottom = false 55 - 56 - ; Prefer fixed center position for the `modules-center` block 57 - ; When false, the center position will be based on the size of the other blocks. 58 - fixed-center = true 59 - 60 - ; Dimension defined as pixel value (e.g. 35) or percentage (e.g. 50%), 61 - ; the percentage can optionally be extended with a pixel offset like so: 62 - ; 50%:-10, this will result in a width or height of 50% minus 10 pixels 63 - width = 100% 64 - height = 34 65 - 66 - ; Offset defined as pixel value (e.g. 35) or percentage (e.g. 50%) 67 - ; the percentage can optionally be extended with a pixel offset like so: 68 - ; 50%:-10, this will result in an offset in the x or y direction 69 - ; of 50% minus 10 pixels 70 - offset-x = 0% 71 - offset-y = 0% 72 - 73 - ; Background ARGB color (e.g. #f00, #ff992a, #ddff1023) 74 - background = ${color.background} 75 - 76 - ; Foreground ARGB color (e.g. #f00, #ff992a, #ddff1023) 77 - foreground = ${color.foreground} 78 - 79 - ; Background gradient (vertical steps) 80 - ; background-[0-9]+ = #aarrggbb 81 - ;;background-0 = 82 - 83 - ; Value used for drawing rounded corners 84 - ; Note: This shouldn't be used together with border-size because the border 85 - ; doesn't get rounded 86 - ; Individual top/bottom values can be defined using: 87 - ; radius-{top,bottom} 88 - radius-top = 0.0 89 - radius-bottom = 0.0 90 - 91 - ; Under-/overline pixel size and argb color 92 - ; Individual values can be defined using: 93 - ; {overline,underline}-size 94 - ; {overline,underline}-color 95 - line-size = 0 96 - line-color = ${color.background} 97 - 98 - ; Values applied to all borders 99 - ; Individual side values can be defined using: 100 - ; border-{left,top,right,bottom}-size 101 - ; border-{left,top,right,bottom}-color 102 - ; The top and bottom borders are added to the bar height, so the effective 103 - ; window height is: 104 - ; height + border-top-size + border-bottom-size 105 - ; Meanwhile the effective window width is defined entirely by the width key and 106 - ; the border is placed withing this area. So you effectively only have the 107 - ; following horizontal space on the bar: 108 - ; width - border-right-size - border-left-size 109 - border-bottom-size = 0 110 - border-bottom-color = ${color.foreground} 111 - 112 - ; Number of spaces to add at the beginning/end of the bar 113 - ; Individual side values can be defined using: 114 - ; padding-{left,right} 115 - padding = 2 116 - 117 - ; Number of spaces to add before/after each module 118 - ; Individual side values can be defined using: 119 - ; module-margin-{left,right} 120 - module-margin-left = 1 121 - module-margin-right = 1 122 - 123 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 124 - 125 - ; Fonts are defined using <font-name>;<vertical-offset> 126 - ; Font names are specified using a fontconfig pattern. 127 - ; font-0 = NotoSans-Regular:size=8;2 128 - ; font-1 = MaterialIcons:size=10 129 - ; font-2 = Termsynu:size=8;-1 130 - ; font-3 = FontAwesome:size=10 131 - ; See the Fonts wiki page for more details 132 - 133 - font-0 = "Iosevka Nerd Font:size=10;4" 134 - font-1 = "Iosevka Nerd Font:size=10;3" 135 - font-2 = "feather:size=12;3" 136 - 137 - ; Modules are added to one of the available blocks 138 - ; modules-left = cpu ram 139 - ; modules-center = xwindow xbacklight 140 - ; modules-right = ipc clock 141 - 142 - modules-left = launcher sep workspaces sep cpu memory filesystem 143 - modules-center = mpd sep date 144 - modules-right = battery network sep volume brightness sep sysmenu 145 - 146 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 147 - 148 - ; The separator will be inserted between the output of each module 149 - separator = 150 - 151 - ; Opacity value between 0.0 and 1.0 used on fade in/out 152 - dim-value = 1.0 153 - 154 - ; Value to be used to set the WM_NAME atom 155 - ; If the value is empty or undefined, the atom value 156 - ; will be created from the following template: polybar-[BAR]_[MONITOR] 157 - ; NOTE: The placeholders are not available for custom values 158 - wm-name = 159 - 160 - ; Locale used to localize various module data (e.g. date) 161 - ; Expects a valid libc locale, for example: sv_SE.UTF-8 162 - locale = 163 - 164 - ; Position of the system tray window 165 - ; If empty or undefined, tray support will be disabled 166 - ; NOTE: A center aligned tray will cover center aligned modules 167 - ; 168 - ; Available positions: 169 - ; left 170 - ; center 171 - ; right 172 - ; none 173 - tray-position = none 174 - 175 - ; If true, the bar will not shift its 176 - ; contents when the tray changes 177 - tray-detached = false 178 - 179 - ; Tray icon max size 180 - tray-maxsize = 16 181 - 182 - ; Background color for the tray container 183 - ; ARGB color (e.g. #f00, #ff992a, #ddff1023) 184 - ; By default the tray container will use the bar 185 - ; background color. 186 - tray-background = ${color.background} 187 - 188 - ; Tray offset defined as pixel value (e.g. 35) or percentage (e.g. 50%) 189 - tray-offset-x = 0 190 - tray-offset-y = 0 191 - 192 - ; Pad the sides of each tray icon 193 - tray-padding = 0 194 - 195 - ; Scale factor for tray clients 196 - tray-scale = 1.0 197 - 198 - ; Restack the bar window and put it above the 199 - ; selected window manager's root 200 - ; 201 - ; Fixes the issue where the bar is being drawn 202 - ; on top of fullscreen window's 203 - ; 204 - ; Currently supported WM's: 205 - ; bspwm 206 - ; i3 (requires: `override-redirect = true`) 207 - ;;wm-restack = 208 - 209 - ; Set a DPI values used when rendering text 210 - ; This only affects scalable fonts 211 - ; dpi = 212 - 213 - ; Enable support for inter-process messaging 214 - ; See the Messaging wiki page for more details. 215 - enable-ipc = true 216 - 217 - ; Fallback click handlers that will be called if 218 - ; there's no matching module handler found. 219 - click-left = 220 - click-middle = 221 - click-right = 222 - scroll-up = 223 - scroll-down = 224 - double-click-left = 225 - double-click-middle = 226 - double-click-right = 227 - 228 - ; Requires polybar to be built with xcursor support (xcb-util-cursor) 229 - ; Possible values are: 230 - ; - default : The default pointer as before, can also be an empty string (default) 231 - ; - pointer : Typically in the form of a hand 232 - ; - ns-resize : Up and down arrows, can be used to indicate scrolling 233 - cursor-click = 234 - cursor-scroll = 235 - 236 - ;; WM Workspace Specific 237 - 238 - ; bspwm 239 - ;;scroll-up = bspwm-desknext 240 - ;;scroll-down = bspwm-deskprev 241 - ;;scroll-up = bspc desktop -f prev.local 242 - ;;scroll-down = bspc desktop -f next.local 243 - 244 - ;i3 245 - ;;scroll-up = i3wm-wsnext 246 - ;;scroll-down = i3wm-wsprev 247 - ;;scroll-up = i3-msg workspace next_on_output 248 - ;;scroll-down = i3-msg workspace prev_on_output 249 - 250 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 251 - 252 - ;; Application Settings 253 - 254 - [settings] 255 - ; The throttle settings lets the eventloop swallow up til X events 256 - ; if they happen within Y millisecond after first event was received. 257 - ; This is done to prevent flood of update event. 258 - ; 259 - ; For example if 5 modules emit an update event at the same time, we really 260 - ; just care about the last one. But if we wait too long for events to swallow 261 - ; the bar would appear sluggish so we continue if timeout 262 - ; expires or limit is reached. 263 - throttle-output = 5 264 - throttle-output-for = 10 265 - 266 - ; Time in milliseconds that the input handler will wait between processing events 267 - ;throttle-input-for = 30 268 - 269 - ; Reload upon receiving XCB_RANDR_SCREEN_CHANGE_NOTIFY events 270 - screenchange-reload = false 271 - 272 - ; Compositing operators 273 - ; @see: https://www.cairographics.org/manual/cairo-cairo-t.html#cairo-operator-t 274 - compositing-background = source 275 - compositing-foreground = over 276 - compositing-overline = over 277 - compositing-underline = over 278 - compositing-border = over 279 - 280 - ; Define fallback values used by all module formats 281 - ;format-foreground = 282 - ;format-background = 283 - ;format-underline = 284 - ;format-overline = 285 - ;format-spacing = 286 - ;format-padding = 287 - ;format-margin = 288 - ;format-offset = 289 - 290 - ; Enables pseudo-transparency for the bar 291 - ; If set to true the bar can be transparent without a compositor. 292 - pseudo-transparency = false 293 - 294 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
-14
theme/theme/forest/launch.sh
··· 1 - #!/usr/bin/env bash 2 - 3 - # Add this script to your wm startup file. 4 - 5 - DIR="$HOME/.config/polybar/forest" 6 - 7 - # Terminate already running bar instances 8 - killall -q polybar 9 - 10 - # Wait until the processes have been shut down 11 - while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done 12 - 13 - # Launch the bar 14 - polybar -q main -c "$DIR"/config.ini &
-1091
theme/theme/forest/modules.ini
··· 1 - ;; ┌────────────────────────────────────────────────────────────────┐ 2 - ;; │░█▀█░█▀█░█░░░█░█░█▀▄░█▀█░█▀▄░░░░░░░░░█▄█░█▀█░█▀▄░█░█░█░░░█▀▀░█▀▀│ 3 - ;; │░█▀▀░█░█░█░░░░█░░█▀▄░█▀█░█▀▄░░░░▀░░░░█░█░█░█░█░█░█░█░█░░░█▀▀░▀▀█│ 4 - ;; │░▀░░░▀▀▀░▀▀▀░░▀░░▀▀░░▀░▀░▀░▀░░░░▀░░░░▀░▀░▀▀▀░▀▀░░▀▀▀░▀▀▀░▀▀▀░▀▀▀│ 5 - ;; │░Created░By░Aditya░Shakya░@adi1090x░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│ 6 - ;; └────────────────────────────────────────────────────────────────┘ 7 - 8 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 9 - 10 - [module/alsa] 11 - type = internal/alsa 12 - 13 - ; Soundcard to be used 14 - ; Usually in the format hw:# where # is the card number 15 - ; You can find the different card numbers in `/proc/asound/cards` 16 - master-soundcard = default 17 - speaker-soundcard = default 18 - headphone-soundcard = default 19 - 20 - ; Name of the master, speaker and headphone mixers 21 - ; Use the following command to list available mixer controls: 22 - ; $ amixer scontrols | sed -nr "s/.*'([[:alnum:]]+)'.*/\1/p" 23 - ; If master, speaker or headphone-soundcard isn't the default, 24 - ; use `amixer -c # scontrols` instead where # is the number 25 - ; of the master, speaker or headphone soundcard respectively 26 - ; 27 - ; Default: Master 28 - master-mixer = Master 29 - 30 - ; Optionally define speaker and headphone mixers 31 - ; Default: none 32 - ;;speaker-mixer = Speaker 33 - ; Default: none 34 - ;;headphone-mixer = Headphone 35 - 36 - ; NOTE: This is required if headphone_mixer is defined 37 - ; Use the following command to list available device controls 38 - ; $ amixer controls | sed -r "/CARD/\!d; s/.*=([0-9]+).*name='([^']+)'.*/printf '%3.0f: %s\n' '\1' '\2'/e" | sort 39 - ; You may also need to use `amixer -c # controls` as above for the mixer names 40 - ; Default: none 41 - ;;headphone-id = 9 42 - 43 - ; Use volume mapping (similar to amixer -M and alsamixer), where the increase in volume is linear to the ear 44 - ; Default: false 45 - ;;mapped = true 46 - 47 - ; Interval for volume increase/decrease (in percent points) 48 - ; Default: 5 49 - interval = 5 50 - 51 - ; Available tags: 52 - ; <label-volume> (default) 53 - ; <ramp-volume> 54 - ; <bar-volume> 55 - format-volume = <ramp-volume> <label-volume> 56 - 57 - ; Available tags: 58 - ; <label-muted> (default) 59 - ; <ramp-volume> 60 - ; <bar-volume> 61 - format-muted = <label-muted> 62 - format-muted-prefix =  63 - format-muted-prefix-foreground = ${color.red} 64 - 65 - ; Available tokens: 66 - ; %percentage% (default) 67 - label-volume = %percentage%% 68 - 69 - ; Available tokens: 70 - ; %percentage% (default 71 - label-muted = " Muted" 72 - label-muted-foreground = ${color.sep} 73 - 74 - ; Only applies if <ramp-volume> is used 75 - ramp-volume-0 =  76 - ramp-volume-1 =  77 - ramp-volume-2 =  78 - ramp-volume-foreground = ${color.blue} 79 - 80 - ; If defined, it will replace <ramp-volume> when 81 - ; headphones are plugged in to `headphone_control_numid` 82 - ; If undefined, <ramp-volume> will be used for both 83 - ; Only applies if <ramp-volume> is used 84 - ramp-headphones-0 =  85 - ramp-headphones-background = ${color.blue} 86 - 87 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 88 - 89 - [module/backlight] 90 - ;type = internal/xbacklight 91 - type = internal/backlight 92 - 93 - ; Use the following command to list available cards: 94 - ; $ ls -1 /sys/class/backlight/ 95 - ;card = intel_backlight 96 - card = amdgpu_bl0 97 - 98 - ; Available tags: 99 - ; <label> (default) 100 - ; <ramp> 101 - ; <bar> 102 - format = <ramp> <label> 103 - 104 - ; Available tokens: 105 - ; %percentage% (default) 106 - label = %percentage%% 107 - 108 - ; Only applies if <ramp> is used 109 - ramp-0 =  110 - ramp-1 =  111 - ramp-2 =  112 - ramp-3 =  113 - ramp-4 =  114 - ramp-foreground = ${color.lime} 115 - 116 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 117 - 118 - [module/battery] 119 - type = internal/battery 120 - 121 - ; This is useful in case the battery never reports 100% charge 122 - full-at = 99 123 - 124 - ; Use the following command to list batteries and adapters: 125 - ; $ ls -1 /sys/class/power_supply/ 126 - battery = BAT1 127 - adapter = ACAD 128 - 129 - ; If an inotify event haven't been reported in this many 130 - ; seconds, manually poll for new values. 131 - ; 132 - ; Needed as a fallback for systems that don't report events 133 - ; on sysfs/procfs. 134 - ; 135 - ; Disable polling by setting the interval to 0. 136 - ; 137 - ; Default: 5 138 - poll-interval = 2 139 - 140 - ; see "man date" for details on how to format the time string 141 - ; NOTE: if you want to use syntax tags here you need to use %%{...} 142 - ; Default: %H:%M:%S 143 - time-format = %H:%M 144 - 145 - ; Available tags: 146 - ; <label-charging> (default) 147 - ; <bar-capacity> 148 - ; <ramp-capacity> 149 - ; <animation-charging> 150 - format-charging = <label-charging> 151 - format-charging-prefix = "" 152 - format-charging-prefix-foreground = ${color.green} 153 - 154 - ; Available tags: 155 - ; <label-discharging> (default) 156 - ; <bar-capacity> 157 - ; <ramp-capacity> 158 - ; <animation-discharging> 159 - format-discharging = <label-discharging> 160 - format-discharging-prefix = "" 161 - format-discharging-prefix-foreground = ${color.pink} 162 - 163 - ; Available tags: 164 - ; <label-full> (default) 165 - ; <bar-capacity> 166 - ; <ramp-capacity> 167 - format-full = <label-full> 168 - format-full-prefix =  169 - format-full-prefix-foreground = ${color.red} 170 - 171 - ; Available tokens: 172 - ; %percentage% (default) 173 - ; %time% 174 - ; %consumption% (shows current charge rate in watts) 175 - label-charging = " %percentage%%" 176 - 177 - ; Available tokens: 178 - ; %percentage% (default) 179 - ; %time% 180 - ; %consumption% (shows current discharge rate in watts) 181 - label-discharging = " %percentage%%" 182 - 183 - ; Available tokens: 184 - ; %percentage% (default) 185 - label-full = " Full" 186 - 187 - ; Only applies if <ramp-capacity> is used 188 - ramp-capacity-0 = 189 - ramp-capacity-1 = 190 - ramp-capacity-2 = 191 - ramp-capacity-3 = 192 - ramp-capacity-4 = 193 - 194 - ; Only applies if <bar-capacity> is used 195 - ;bar-capacity-width = 10 196 - 197 - ; Only applies if <animation-charging> is used 198 - animation-charging-0 = 199 - animation-charging-1 = 200 - 201 - ; Framerate in milliseconds 202 - animation-charging-framerate = 750 203 - 204 - ; Only applies if <animation-discharging> is used 205 - ;;animation-discharging-0 = ${battery.anim0} 206 - ;;animation-discharging-1 = ${battery.anim1} 207 - 208 - ; Framerate in milliseconds 209 - ;animation-discharging-framerate = 500 210 - 211 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 212 - 213 - ;;[module/bspwm] 214 - ;;type = internal/bspwm 215 - 216 - ; Only show workspaces defined on the same output as the bar 217 - ; NOTE: The bspwm and XRandR monitor names must match, which they do by default. 218 - ; Default: true 219 - ;;pin-workspaces = true 220 - 221 - ; Output mode flags after focused state label 222 - ; Default: false 223 - ;;inline-mode = false 224 - 225 - ; Create click handler used to focus workspace 226 - ; Default: true 227 - ;;enable-click = false 228 - 229 - ; Create scroll handlers used to cycle workspaces 230 - ; Default: true 231 - ;;enable-scroll = false 232 - 233 - ; Set the scroll cycle direction 234 - ; Default: true 235 - ;;reverse-scroll = false 236 - 237 - ; Use fuzzy (partial) matching on labels when assigning 238 - ; icons to workspaces 239 - ; Example: code;♚ will apply the icon to all workspaces 240 - ; containing 'code' in the label 241 - ; Default: false 242 - ;;fuzzy-match = true 243 - 244 - ; ws-icon-[0-9]+ = label;icon 245 - ; Note that the label needs to correspond with the bspwm workspace name 246 - ;;ws-icon-0 = code;♚ 247 - ;;ws-icon-1 = office;♛ 248 - ;;ws-icon-2 = graphics;♜ 249 - ;;ws-icon-3 = mail;♝ 250 - ;;ws-icon-4 = web;♞ 251 - ;;ws-icon-default = ♟ 252 - 253 - ; Available tags: 254 - ; <label-monitor> 255 - ; <label-state> - gets replaced with <label-(focused|urgent|occupied|empty)> 256 - ; <label-mode> - gets replaced with <label-(monocle|tiled|fullscreen|floating|locked|sticky|private)> 257 - ; Default: <label-state> 258 - ;;format = <label-state> <label-mode> 259 - 260 - ; Available tokens: 261 - ; %name% 262 - ; Default: %name% 263 - ;;label-monitor = %name% 264 - 265 - ; If any values for label-dimmed-N are defined, the workspace/mode 266 - ; colors will get overridden with those values if the monitor is out of focus 267 - ; To only override workspaces in a specific state, use: 268 - ; label-dimmed-focused 269 - ; label-dimmed-occupied 270 - ; label-dimmed-urgent 271 - ; label-dimmed-empty 272 - ;;label-dimmed-foreground = #555 273 - ;;label-dimmed-underline = ${bar/top.background} 274 - ;;label-dimmed-focused-background = #f00 275 - 276 - ; Available tokens: 277 - ; %name% 278 - ; %icon% 279 - ; %index% 280 - ; Default: %icon% %name% 281 - ;;label-focused = %icon% 282 - ;;label-focused-foreground = #ffffff 283 - ;;label-focused-background = #3f3f3f 284 - ;;label-focused-underline = #fba922 285 - 286 - ; Available tokens: 287 - ; %name% 288 - ; %icon% 289 - ; %index% 290 - ; Default: %icon% %name% 291 - ;;label-occupied = %icon% 292 - ;;label-occupied-underline = #555555 293 - 294 - ; Available tokens: 295 - ; %name% 296 - ; %icon% 297 - ; %index% 298 - ; Default: %icon% %name% 299 - ;;label-urgent = %icon% 300 - ;;label-urgent-foreground = #000000 301 - ;;label-urgent-background = #bd2c40 302 - ;;label-urgent-underline = #9b0a20 303 - 304 - ; Available tokens: 305 - ; %name% 306 - ; %icon% 307 - ; %index% 308 - ; Default: %icon% %name% 309 - ;;label-empty = %icon% 310 - ;;label-empty-foreground = #55 311 - 312 - ; The following labels will be used to indicate the layout/mode 313 - ; for the focused workspace. Requires <label-mode> 314 - ; 315 - ; Available tokens: 316 - ; None 317 - ;label-monocle =  318 - ;label-tiled =  319 - ;label-fullscreen =  320 - ;label-floating =  321 - ;label-pseudotiled = P 322 - ;label-locked =  323 - ;label-locked-foreground = #bd2c40 324 - ;label-sticky =  325 - ;label-sticky-foreground = #fba922 326 - ;label-private =  327 - ;label-private-foreground = #bd2c40 328 - 329 - ; Separator in between workspaces 330 - ;;label-separator = | 331 - ;;label-separator-padding = 2 332 - ;;label-separator-foreground = #ffb52a 333 - 334 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 335 - 336 - [module/cpu] 337 - type = internal/cpu 338 - 339 - ; Seconds to sleep between updates 340 - ; Default: 1 341 - interval = 1 342 - 343 - ; Available tags: 344 - ; <label> (default) 345 - ; <bar-load> 346 - ; <ramp-load> 347 - ; <ramp-coreload> 348 - ;;format = <label> <ramp-coreload> 349 - format = <label> 350 - format-prefix =  351 - format-prefix-foreground = ${color.yellow} 352 - 353 - ; Available tokens: 354 - ; %percentage% (default) - total cpu load averaged over all cores 355 - ; %percentage-sum% - Cumulative load on all cores 356 - ; %percentage-cores% - load percentage for each core 357 - ; %percentage-core[1-9]% - load percentage for specific core 358 - label = " %percentage%%" 359 - 360 - ; Spacing between individual per-core ramps 361 - ;;ramp-coreload-spacing = 1 362 - ;;ramp-coreload-0 = ${cpu.load0} 363 - ;;ramp-coreload-1 = ${cpu.load1} 364 - 365 - ;;ramp-load-0 = ${cpu.load0} 366 - ;;ramp-load-1 = ${cpu.load1} 367 - 368 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 369 - 370 - [module/date] 371 - type = internal/date 372 - 373 - ; Seconds to sleep between updates 374 - interval = 1.0 375 - 376 - ; See "http://en.cppreference.com/w/cpp/io/manip/put_time" for details on how to format the date string 377 - ; NOTE: if you want to use syntax tags here you need to use %%{...} 378 - date = %A, %d %B 379 - 380 - ; Optional time format 381 - time = at %I:%M %p 382 - 383 - ; if `date-alt` or `time-alt` is defined, clicking 384 - ; the module will toggle between formats 385 - date-alt = It's %A, %d %B %Y 386 - time-alt = at %k:%M:%S 387 - 388 - ; Available tags: 389 - ; <label> (default) 390 - format = <label> 391 - format-prefix = " " 392 - format-prefix-foreground = ${color.red} 393 - 394 - ; Available tokens: 395 - ; %date% 396 - ; %time% 397 - ; Default: %date% 398 - label = %date% %time% 399 - 400 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 401 - 402 - [module/filesystem] 403 - type = internal/fs 404 - 405 - ; Mountpoints to display 406 - mount-0 = / 407 - ;;mount-1 = /home 408 - ;;mount-2 = /var 409 - 410 - ; Seconds to sleep between updates 411 - ; Default: 30 412 - interval = 30 413 - 414 - ; Display fixed precision values 415 - ; Default: false 416 - fixed-values = true 417 - 418 - ; Spacing between entries 419 - ; Default: 2 420 - ;;spacing = 4 421 - 422 - ; Available tags: 423 - ; <label-mounted> (default) 424 - ; <bar-free> 425 - ; <bar-used> 426 - ; <ramp-capacity> 427 - format-mounted = <label-mounted> 428 - format-mounted-prefix =  429 - format-mounted-prefix-foreground = ${color.orange} 430 - 431 - ; Available tags: 432 - ; <label-unmounted> (default) 433 - format-unmounted = <label-unmounted> 434 - format-unmounted-prefix =  435 - format-unmounted-prefix-foreground = ${color.red} 436 - 437 - ; Available tokens: 438 - ; %mountpoint% 439 - ; %type% 440 - ; %fsname% 441 - ; %percentage_free% 442 - ; %percentage_used% 443 - ; %total% 444 - ; %free% 445 - ; %used% 446 - ; Default: %mountpoint% %percentage_free%% 447 - label-mounted = " %free%" 448 - 449 - ; Available tokens: 450 - ; %mountpoint% 451 - ; Default: %mountpoint% is not mounted 452 - label-unmounted = " %mountpoint%: NA" 453 - 454 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 455 - 456 - ;;[module/github] 457 - ;;type = internal/github 458 - 459 - ; Accessing an access token stored in file 460 - ;;token = ${file:/path/to/file/containing/github/access.token} 461 - 462 - ; Accessing an access token stored in an environment variable 463 - ;;token = ${env:GITHUB_ACCESS_TOKEN} 464 - 465 - ; Whether empty notifications should be displayed or not 466 - ;;empty-notifications = false 467 - 468 - ; Number of seconds in between requests 469 - ;;interval = 10 470 - 471 - ; Available tags: 472 - ; <label> (default) 473 - ;;format = <label> 474 - ;;format-prefix =  475 - 476 - ; Available tokens: 477 - ; %notifications% (default) 478 - ; Default: Notifications: %notifications% 479 - ;;label = %notifications% 480 - 481 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 482 - 483 - ;;[module/i3] 484 - ;;type = internal/i3 485 - 486 - ; Only show workspaces defined on the same output as the bar 487 - ; 488 - ; Useful if you want to show monitor specific workspaces 489 - ; on different bars 490 - ; 491 - ; Default: false 492 - ;;pin-workspaces = true 493 - 494 - ; This will split the workspace name on ':' 495 - ; Default: false 496 - ;;strip-wsnumbers = true 497 - 498 - ; Sort the workspaces by index instead of the default 499 - ; sorting that groups the workspaces by output 500 - ; Default: false 501 - ;;index-sort = true 502 - 503 - ; Create click handler used to focus workspace 504 - ; Default: true 505 - ;;enable-click = false 506 - 507 - ; Create scroll handlers used to cycle workspaces 508 - ; Default: true 509 - ;;enable-scroll = false 510 - 511 - ; Wrap around when reaching the first/last workspace 512 - ; Default: true 513 - ;;wrapping-scroll = false 514 - 515 - ; Set the scroll cycle direction 516 - ; Default: true 517 - ;;reverse-scroll = false 518 - 519 - ; Use fuzzy (partial) matching on labels when assigning 520 - ; icons to workspaces 521 - ; Example: code;♚ will apply the icon to all workspaces 522 - ; containing 'code' in the label 523 - ; Default: false 524 - ;;fuzzy-match = true 525 - 526 - ; ws-icon-[0-9]+ = label;icon 527 - ; NOTE: The label needs to match the name of the i3 workspace 528 - ;;ws-icon-0 = 1;♚ 529 - ;;ws-icon-1 = 2;♛ 530 - ;;ws-icon-2 = 3;♜ 531 - ;;ws-icon-3 = 4;♝ 532 - ;;ws-icon-4 = 5;♞ 533 - ;;ws-icon-default = ♟ 534 - ; NOTE: You cannot skip icons, e.g. to get a ws-icon-6 535 - ; you must also define a ws-icon-5. 536 - 537 - ; Available tags: 538 - ; <label-state> (default) - gets replaced with <label-(focused|unfocused|visible|urgent)> 539 - ; <label-mode> (default) 540 - ;;format = <label-state> <label-mode> 541 - 542 - ; Available tokens: 543 - ; %mode% 544 - ; Default: %mode% 545 - ;;label-mode = %mode% 546 - ;;label-mode-padding = 2 547 - ;;label-mode-background = #e60053 548 - 549 - ; Available tokens: 550 - ; %name% 551 - ; %icon% 552 - ; %index% 553 - ; %output% 554 - ; Default: %icon% %name% 555 - ;;label-focused = %index% 556 - ;;label-focused-foreground = #ffffff 557 - ;;label-focused-background = #3f3f3f 558 - ;;label-focused-underline = #fba922 559 - ;;label-focused-padding = 4 560 - 561 - ; Available tokens: 562 - ; %name% 563 - ; %icon% 564 - ; %index% 565 - ; %output% 566 - ; Default: %icon% %name% 567 - ;;label-unfocused = %index% 568 - ;;label-unfocused-padding = 4 569 - 570 - ; Available tokens: 571 - ; %name% 572 - ; %icon% 573 - ; %index% 574 - ; %output% 575 - ; Default: %icon% %name% 576 - ;;label-visible = %index% 577 - ;;label-visible-underline = #555555 578 - ;;label-visible-padding = 4 579 - 580 - ; Available tokens: 581 - ; %name% 582 - ; %icon% 583 - ; %index% 584 - ; %output% 585 - ; Default: %icon% %name% 586 - ;;label-urgent = %index% 587 - ;;label-urgent-foreground = #000000 588 - ;;label-urgent-background = #bd2c40 589 - ;;label-urgent-padding = 4 590 - 591 - ; Separator in between workspaces 592 - ;;label-separator = | 593 - ;;label-separator-padding = 2 594 - ;;label-separator-foreground = #ffb52a 595 - 596 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 597 - 598 - [module/memory] 599 - type = internal/memory 600 - 601 - ; Seconds to sleep between updates 602 - ; Default: 1 603 - interval = 1 604 - 605 - ; Available tags: 606 - ; <label> (default) 607 - ; <bar-used> 608 - ; <bar-free> 609 - ; <ramp-used> 610 - ; <ramp-free> 611 - ; <bar-swap-used> 612 - ; <bar-swap-free> 613 - ; <ramp-swap-used> 614 - ; <ramp-swap-free> 615 - format = <label> 616 - format-prefix =  617 - format-prefix-foreground = ${color.blue} 618 - 619 - ; Available tokens: 620 - ; %percentage_used% (default) 621 - ; %percentage_free% 622 - ; %gb_used% 623 - ; %gb_free% 624 - ; %gb_total% 625 - ; %mb_used% 626 - ; %mb_free% 627 - ; %mb_total% 628 - ; %percentage_swap_used% 629 - ; %percentage_swap_free% 630 - ; %mb_swap_total% 631 - ; %mb_swap_free% 632 - ; %mb_swap_used% 633 - ; %gb_swap_total% 634 - ; %gb_swap_free% 635 - ; %gb_swap_used% 636 - 637 - label = " %mb_used%" 638 - 639 - ; Only applies if <ramp-used> is used 640 - ;;ramp-used-0 = ${memory.used0} 641 - ;;ramp-used-1 = ${memory.used1} 642 - ;;ramp-used-2 = ${memory.used2} 643 - 644 - ; Only applies if <ramp-free> is used 645 - ;;ramp-free-0 = ${memory.free0} 646 - ;;ramp-free-1 = ${memory.free1} 647 - ;;ramp-free-2 = ${memory.free2} 648 - 649 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 650 - 651 - [module/mpd] 652 - type = internal/mpd 653 - 654 - ; Host where mpd is running (either ip or domain name) 655 - ; Can also be the full path to a unix socket where mpd is running. 656 - ;;host = 127.0.0.1 657 - ;;port = 6600 658 - ;;password = mysecretpassword 659 - 660 - ; Seconds to sleep between progressbar/song timer sync 661 - ; Default: 1 662 - interval = 1 663 - 664 - ; Available tags: 665 - ; <label-song> (default) 666 - ; <label-time> 667 - ; <bar-progress> 668 - ; <toggle> - gets replaced with <icon-(pause|play)> 669 - ; <toggle-stop> - gets replaced with <icon-(stop|play)> 670 - ; <icon-random> 671 - ; <icon-repeat> 672 - ; <icon-repeatone> (deprecated) 673 - ; <icon-single> - Toggle playing only a single song. Replaces <icon-repeatone> 674 - ; <icon-consume> 675 - ; <icon-prev> 676 - ; <icon-stop> 677 - ; <icon-play> 678 - ; <icon-pause> 679 - ; <icon-next> 680 - ; <icon-seekb> 681 - ; <icon-seekf> 682 - format-online = <label-song> <icon-prev> <toggle> <icon-next> 683 - format-online-prefix =  684 - format-online-prefix-foreground = ${color.green} 685 - 686 - ;format-playing = ${self.format-online} 687 - ;format-paused = ${self.format-online} 688 - ;format-stopped = ${self.format-online} 689 - 690 - ; Available tags: 691 - ; <label-offline> 692 - format-offline = <label-offline> 693 - format-offline-prefix =  694 - format-offline-prefix-foreground = ${color.red} 695 - 696 - ; Available tokens: 697 - ; %artist% 698 - ; %album-artist% 699 - ; %album% 700 - ; %date% 701 - ; %title% 702 - ; Default: %artist% - %title% 703 - label-song = " %artist% - %title%" 704 - label-song-maxlen = 25 705 - label-song-ellipsis = true 706 - 707 - ; Available tokens: 708 - ; %elapsed% 709 - ; %total% 710 - ; Default: %elapsed% / %total% 711 - label-time = %elapsed% / %total% 712 - label-time-background = ${color.background-alt} 713 - label-time-padding = 1 714 - 715 - ; Available tokens: 716 - ; None 717 - label-offline = " Offline" 718 - 719 - ; Only applies if <icon-X> is used 720 - icon-play =  721 - icon-play-foreground = ${color.cyan} 722 - icon-pause =  723 - icon-pause-foreground = ${color.cyan} 724 - icon-stop =  725 - icon-stop-foreground = ${color.red} 726 - icon-next =  727 - icon-next-foreground = ${color.cyan} 728 - icon-prev =  729 - icon-prev-foreground = ${color.cyan} 730 - icon-seekf = 731 - icon-seekb = 732 - icon-random = 733 - icon-repeat = 734 - icon-repeatone = 735 - icon-single = 736 - icon-consume = 737 - 738 - ; Used to display the state of random/repeat/repeatone/single 739 - ; Only applies if <icon-[random|repeat|repeatone|single]> is used 740 - toggle-on-foreground = ${color.primary} 741 - toggle-off-foreground = ${color.red} 742 - 743 - ; Only applies if <bar-progress> is used 744 - ;;bar-progress-width = 45 745 - ;;bar-progress-indicator = | 746 - ;;bar-progress-fill = ─ 747 - ;;bar-progress-empty = ─ 748 - 749 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 750 - 751 - ; If you use both a wired and a wireless network, just add 2 module definitions. For example 752 - [module/wired-network] 753 - type = internal/network 754 - interface = eth0 755 - 756 - [module/wireless-network] 757 - type = internal/network 758 - interface = wlp3s0 759 - 760 - ; Normal Module 761 - [module/network] 762 - type = internal/network 763 - interface = wlan0 764 - 765 - ; Seconds to sleep between updates 766 - ; Default: 1 767 - interval = 1.0 768 - 769 - ; Test connectivity every Nth update 770 - ; A value of 0 disables the feature 771 - ; NOTE: Experimental (needs more testing) 772 - ; Default: 0 773 - ;ping-interval = 3 774 - 775 - ; @deprecated: Define min width using token specifiers (%downspeed:min% and %upspeed:min%) 776 - ; Minimum output width of upload/download rate 777 - ; Default: 3 778 - ;;udspeed-minwidth = 5 779 - 780 - ; Accumulate values from all interfaces 781 - ; when querying for up/downspeed rate 782 - ; Default: false 783 - accumulate-stats = true 784 - 785 - ; Consider an `UNKNOWN` interface state as up. 786 - ; Some devices have an unknown state, even when they're running 787 - ; Default: false 788 - unknown-as-up = true 789 - 790 - ; Available tags: 791 - ; <label-connected> (default) 792 - ; <ramp-signal> 793 - format-connected = <label-connected> 794 - format-connected-prefix =  795 - format-connected-prefix-foreground = ${color.purple} 796 - 797 - ; Available tags: 798 - ; <label-disconnected> (default) 799 - format-disconnected = <label-disconnected> 800 - format-disconnected-prefix =  801 - format-disconnected-prefix-foreground = ${color.orange} 802 - 803 - ; Available tags: 804 - ; <label-connected> (default) 805 - ; <label-packetloss> 806 - ; <animation-packetloss> 807 - ;;format-packetloss = <animation-packetloss> <label-connected> 808 - 809 - ; Available tokens: 810 - ; %ifname% [wireless+wired] 811 - ; %local_ip% [wireless+wired] 812 - ; %local_ip6% [wireless+wired] 813 - ; %essid% [wireless] 814 - ; %signal% [wireless] 815 - ; %upspeed% [wireless+wired] 816 - ; %downspeed% [wireless+wired] 817 - ; %linkspeed% [wired] 818 - ; Default: %ifname% %local_ip% 819 - label-connected = "%{A1:networkmanager_dmenu &:} %essid% %{F#6C77BB}%{F-} %downspeed%%{A}" 820 - 821 - ; Available tokens: 822 - ; %ifname% [wireless+wired] 823 - ; Default: (none) 824 - label-disconnected = "%{A1:networkmanager_dmenu &:} Offline%{A}" 825 - 826 - ; Available tokens: 827 - ; %ifname% [wireless+wired] 828 - ; %local_ip% [wireless+wired] 829 - ; %local_ip6% [wireless+wired] 830 - ; %essid% [wireless] 831 - ; %signal% [wireless] 832 - ; %upspeed% [wireless+wired] 833 - ; %downspeed% [wireless+wired] 834 - ; %linkspeed% [wired] 835 - ; Default: (none) 836 - ;label-packetloss = %essid% 837 - ;label-packetloss-foreground = #eefafafa 838 - 839 - ; Only applies if <ramp-signal> is used 840 - ramp-signal-0 = 841 - ramp-signal-1 = 842 - ramp-signal-2 = 843 - 844 - ; Only applies if <animation-packetloss> is used 845 - ;;animation-packetloss-0 = ⚠ 846 - ;;animation-packetloss-0-foreground = #ffa64c 847 - ;;animation-packetloss-1 = ⚠ 848 - ;;animation-packetloss-1-foreground = #000000 849 - ; Framerate in milliseconds 850 - ;;animation-packetloss-framerate = 500 851 - 852 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 853 - 854 - [module/pulseaudio] 855 - type = internal/pulseaudio 856 - 857 - ; Sink to be used, if it exists (find using `pacmd list-sinks`, name field) 858 - ; If not, uses default sink 859 - sink = alsa_output.pci-0000_03_00.6.analog-stereo 860 - 861 - ; Use PA_VOLUME_UI_MAX (~153%) if true, or PA_VOLUME_NORM (100%) if false 862 - ; Default: true 863 - use-ui-max = false 864 - 865 - ; Interval for volume increase/decrease (in percent points) 866 - ; Default: 5 867 - interval = 5 868 - 869 - ; Available tags: 870 - ; <label-volume> (default) 871 - ; <ramp-volume> 872 - ; <bar-volume> 873 - format-volume = <ramp-volume> <label-volume> 874 - 875 - ; Available tags: 876 - ; <label-muted> (default) 877 - ; <ramp-volume> 878 - ; <bar-volume> 879 - format-muted = <label-muted> 880 - format-muted-prefix =  881 - format-muted-prefix-foreground = ${color.red} 882 - 883 - ; Available tokens: 884 - ; %percentage% (default) 885 - label-volume = %percentage%% 886 - 887 - ; Available tokens: 888 - ; %percentage% (default 889 - label-muted = " Muted" 890 - label-muted-foreground = ${color.sep} 891 - 892 - ; Only applies if <ramp-volume> is used 893 - ramp-volume-0 =  894 - ramp-volume-1 =  895 - ramp-volume-2 =  896 - ramp-volume-foreground = ${color.blue} 897 - 898 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 899 - 900 - [module/temperature] 901 - type = internal/temperature 902 - 903 - ; Seconds to sleep between updates 904 - ; Default: 1 905 - interval = 0.5 906 - 907 - ; Thermal zone to use 908 - ; To list all the zone types, run 909 - ; $ for i in /sys/class/thermal/thermal_zone*; do echo "$i: $(<$i/type)"; done 910 - ; Default: 0 911 - thermal-zone = 0 912 - 913 - ; Full path of temperature sysfs path 914 - ; Use `sensors` to find preferred temperature source, then run 915 - ; $ for i in /sys/class/hwmon/hwmon*/temp*_input; do echo "$(<$(dirname $i)/name): $(cat ${i%_*}_label 2>/dev/null || echo $(basename ${i%_*})) $(readlink -f $i)"; done 916 - ; to find path to desired file 917 - ; Default reverts to thermal zone setting 918 - ;;hwmon-path = /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input 919 - hwmon-path = /sys/devices/pci0000:00/0000:00:01.3/0000:01:00.0/hwmon/hwmon0/temp1_input 920 - 921 - ; Threshold temperature to display warning label (in degrees celsius) 922 - ; Default: 80 923 - warn-temperature = 65 924 - 925 - ; Whether or not to show units next to the temperature tokens (°C, °F) 926 - ; Default: true 927 - units = true 928 - 929 - ; Available tags: 930 - ; <label> (default) 931 - ; <ramp> 932 - format = <ramp> <label> 933 - 934 - ; Available tags: 935 - ; <label-warn> (default) 936 - ; <ramp> 937 - format-warn = <ramp> <label-warn> 938 - 939 - ; Available tokens: 940 - ; %temperature% (deprecated) 941 - ; %temperature-c% (default, temperature in °C) 942 - ; %temperature-f% (temperature in °F) 943 - label = %temperature-c% 944 - 945 - ; Available tokens: 946 - ; %temperature% (deprecated) 947 - ; %temperature-c% (default, temperature in °C) 948 - ; %temperature-f% (temperature in °F) 949 - label-warn = "%temperature-c%" 950 - label-warn-foreground = ${color.red} 951 - 952 - ; Requires the <ramp> tag 953 - ; The icon selection will range from 0 to `warn-temperature` 954 - ; with the current temperature as index. 955 - ramp-0 =  956 - ramp-1 =  957 - ramp-2 =  958 - ramp-3 =  959 - ramp-4 =  960 - ramp-foreground = ${color.cyan} 961 - 962 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 963 - 964 - [module/keyboard] 965 - type = internal/xkeyboard 966 - 967 - ; List of indicators to ignore 968 - blacklist-0 = num lock 969 - blacklist-1 = scroll lock 970 - 971 - ; Available tags: 972 - ; <label-layout> (default) 973 - ; <label-indicator> (default) 974 - format = <label-layout> <label-indicator> 975 - format-prefix =  976 - format-prefix-foreground = ${color.blue-gray} 977 - 978 - ; Available tokens: 979 - ; %layout% 980 - ; %name% 981 - ; %number% 982 - ; Default: %layout% 983 - label-layout = " %layout%" 984 - 985 - ; Available tokens: 986 - ; %name% 987 - ; Default: %name% 988 - label-indicator-on = "%name%" 989 - label-indicator-on-foreground = ${color.cyan} 990 - 991 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 992 - 993 - [module/title] 994 - type = internal/xwindow 995 - 996 - ; Available tags: 997 - ; <label> (default) 998 - format = <label> 999 - format-prefix =  1000 - format-foreground = ${color.foreground} 1001 - 1002 - ; Available tokens: 1003 - ; %title% 1004 - ; Default: %title% 1005 - label = " %title%" 1006 - label-maxlen = 30 1007 - 1008 - ; Used instead of label when there is no window title 1009 - label-empty = " Desktop" 1010 - 1011 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 1012 - 1013 - [module/workspaces] 1014 - type = internal/xworkspaces 1015 - 1016 - ; Only show workspaces defined on the same output as the bar 1017 - ; 1018 - ; Useful if you want to show monitor specific workspaces 1019 - ; on different bars 1020 - ; 1021 - ; Default: false 1022 - pin-workspaces = true 1023 - 1024 - ; Create click handler used to focus desktop 1025 - ; Default: true 1026 - enable-click = true 1027 - 1028 - ; Create scroll handlers used to cycle desktops 1029 - ; Default: true 1030 - enable-scroll = true 1031 - 1032 - ; icon-[0-9]+ = <desktop-name>;<icon> 1033 - ; NOTE: The desktop name needs to match the name configured by the WM 1034 - ; You can get a list of the defined desktops using: 1035 - ; $ xprop -root _NET_DESKTOP_NAMES 1036 - icon-0 = 1; 1037 - icon-1 = 2; 1038 - icon-2 = 3; 1039 - icon-3 = 4; 1040 - icon-4 = 5; 1041 - icon-default =  1042 - 1043 - ; Available tags: 1044 - ; <label-monitor> 1045 - ; <label-state> - gets replaced with <label-(active|urgent|occupied|empty)> 1046 - ; Default: <label-state> 1047 - format = <label-state> 1048 - 1049 - ; Available tokens: 1050 - ; %name% 1051 - ; Default: %name% 1052 - label-monitor = %name% 1053 - 1054 - ; Available tokens: 1055 - ; %name% 1056 - ; %icon% 1057 - ; %index% 1058 - ; Default: %icon% %name% 1059 - label-active = %icon% 1060 - label-active-foreground = ${color.pink} 1061 - 1062 - ; Available tokens: 1063 - ; %name% 1064 - ; %icon% 1065 - ; %index% 1066 - ; Default: %icon% %name% 1067 - label-occupied = %icon% 1068 - label-occupied-foreground = ${color.cyan} 1069 - 1070 - ; Available tokens: 1071 - ; %name% 1072 - ; %icon% 1073 - ; %index% 1074 - ; Default: %icon% %name% 1075 - label-urgent = %icon% 1076 - label-urgent-foreground = ${color.red} 1077 - 1078 - ; Available tokens: 1079 - ; %name% 1080 - ; %icon% 1081 - ; %index% 1082 - ; Default: %icon% %name% 1083 - label-empty = %icon% 1084 - label-empty-foreground = ${color.foreground} 1085 - 1086 - label-active-padding = 1 1087 - label-urgent-padding = 1 1088 - label-occupied-padding = 1 1089 - label-empty-padding = 1 1090 - 1091 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
-310
theme/theme/forest/preview.ini
··· 1 - ;; ┌────────────────────────────────────────────────────────────────────┐ 2 - ;; │░█▀█░█▀█░█░░░█░█░█▀▄░█▀█░█▀▄░░░░░░░░░█▀█░█▀▄░█▀▀░█░█░▀█▀░█▀▀░█░█░█▀▀│ 3 - ;; │░█▀▀░█░█░█░░░░█░░█▀▄░█▀█░█▀▄░░░░▀░░░░█▀▀░█▀▄░█▀▀░▀▄▀░░█░░█▀▀░█▄█░▀▀█│ 4 - ;; │░▀░░░▀▀▀░▀▀▀░░▀░░▀▀░░▀░▀░▀░▀░░░░▀░░░░▀░░░▀░▀░▀▀▀░░▀░░▀▀▀░▀▀▀░▀░▀░▀▀▀│ 5 - ;; │░Created░By░Aditya░Shakya░@adi1090x░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│ 6 - ;; └────────────────────────────────────────────────────────────────────┘ 7 - 8 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 9 - 10 - ;; Global WM Settings 11 - 12 - [global/wm] 13 - ; Adjust the _NET_WM_STRUT_PARTIAL top value 14 - ; Used for top aligned bars 15 - margin-bottom = 0 16 - 17 - ; Adjust the _NET_WM_STRUT_PARTIAL bottom value 18 - ; Used for bottom aligned bars 19 - margin-top = 0 20 - 21 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 22 - 23 - ;; File Inclusion 24 - ; include an external file, like module file, etc. 25 - 26 - include-file = ~/.config/polybar/forest/bars.ini 27 - include-file = ~/.config/polybar/forest/colors.ini 28 - include-file = ~/.config/polybar/forest/modules.ini 29 - include-file = ~/.config/polybar/forest/user_modules.ini 30 - 31 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 32 - 33 - ;; Bar Settings 34 - 35 - [bar/main] 36 - ; Use either of the following command to list available outputs: 37 - ; If unspecified, the application will pick the first one it finds. 38 - ; $ polybar -m | cut -d ':' -f 1 39 - ; $ xrandr -q | grep " connected" | cut -d ' ' -f1 40 - monitor = 41 - 42 - ; Use the specified monitor as a fallback if the main one is not found. 43 - monitor-fallback = 44 - 45 - ; Require the monitor to be in connected state 46 - ; XRandR sometimes reports my monitor as being disconnected (when in use) 47 - monitor-strict = false 48 - 49 - ; Tell the Window Manager not to configure the window. 50 - ; Use this to detach the bar if your WM is locking its size/position. 51 - override-redirect = false 52 - 53 - ; Put the bar at the bottom of the screen 54 - bottom = false 55 - 56 - ; Prefer fixed center position for the `modules-center` block 57 - ; When false, the center position will be based on the size of the other blocks. 58 - fixed-center = true 59 - 60 - ; Dimension defined as pixel value (e.g. 35) or percentage (e.g. 50%), 61 - ; the percentage can optionally be extended with a pixel offset like so: 62 - ; 50%:-10, this will result in a width or height of 50% minus 10 pixels 63 - width = 100% 64 - height = 34 65 - 66 - ; Offset defined as pixel value (e.g. 35) or percentage (e.g. 50%) 67 - ; the percentage can optionally be extended with a pixel offset like so: 68 - ; 50%:-10, this will result in an offset in the x or y direction 69 - ; of 50% minus 10 pixels 70 - offset-x = 0% 71 - offset-y = 0% 72 - 73 - ; Background ARGB color (e.g. #f00, #ff992a, #ddff1023) 74 - background = ${color.background} 75 - 76 - ; Foreground ARGB color (e.g. #f00, #ff992a, #ddff1023) 77 - foreground = ${color.foreground} 78 - 79 - ; Background gradient (vertical steps) 80 - ; background-[0-9]+ = #aarrggbb 81 - ;;background-0 = 82 - 83 - ; Value used for drawing rounded corners 84 - ; Note: This shouldn't be used together with border-size because the border 85 - ; doesn't get rounded 86 - ; Individual top/bottom values can be defined using: 87 - ; radius-{top,bottom} 88 - radius-top = 0.0 89 - radius-bottom = 0.0 90 - 91 - ; Under-/overline pixel size and argb color 92 - ; Individual values can be defined using: 93 - ; {overline,underline}-size 94 - ; {overline,underline}-color 95 - line-size = 5 96 - line-color = ${color.background} 97 - 98 - ; Values applied to all borders 99 - ; Individual side values can be defined using: 100 - ; border-{left,top,right,bottom}-size 101 - ; border-{left,top,right,bottom}-color 102 - ; The top and bottom borders are added to the bar height, so the effective 103 - ; window height is: 104 - ; height + border-top-size + border-bottom-size 105 - ; Meanwhile the effective window width is defined entirely by the width key and 106 - ; the border is placed withing this area. So you effectively only have the 107 - ; following horizontal space on the bar: 108 - ; width - border-right-size - border-left-size 109 - border-bottom-size = 0 110 - border-bottom-color = ${color.foreground} 111 - 112 - ; Number of spaces to add at the beginning/end of the bar 113 - ; Individual side values can be defined using: 114 - ; padding-{left,right} 115 - padding = 0 116 - 117 - ; Number of spaces to add before/after each module 118 - ; Individual side values can be defined using: 119 - ; module-margin-{left,right} 120 - module-margin-left = 1 121 - module-margin-right = 1 122 - 123 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 124 - 125 - ; Fonts are defined using <font-name>;<vertical-offset> 126 - ; Font names are specified using a fontconfig pattern. 127 - ; font-0 = NotoSans-Regular:size=8;2 128 - ; font-1 = MaterialIcons:size=10 129 - ; font-2 = Termsynu:size=8;-1 130 - ; font-3 = FontAwesome:size=10 131 - ; See the Fonts wiki page for more details 132 - 133 - font-0 = "Iosevka Nerd Font:size=10;4" 134 - font-1 = "Iosevka Nerd Font:size=10;3" 135 - font-2 = "feather:size=12;3" 136 - 137 - ; Modules are added to one of the available blocks 138 - ; modules-left = cpu ram 139 - ; modules-center = xwindow xbacklight 140 - ; modules-right = ipc clock 141 - 142 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 143 - 144 - [bar/top] 145 - inherit = bar/main 146 - offset-y = 10 147 - modules-center = title sep menu sep term files browser settings sep filesystem sep temperature sep color-switch sep keyboard sep pulseaudio sep backlight sep updates sep powermenu 148 - enable-ipc = true 149 - 150 - [bar/mid] 151 - inherit = bar/main 152 - offset-y = 54 153 - modules-center = volume sep brightness sep battery_bar sep cpu_bar sep filesystem_bar sep memory_bar sep mpd_bar 154 - enable-ipc = true 155 - 156 - [bar/bottom] 157 - inherit = bar/main 158 - offset-y = 98 159 - modules-center = launcher sep workspaces sep cpu sep memory sep mpd sep alsa sep battery sep network sep date sep sysmenu 160 - enable-ipc = true 161 - 162 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 163 - 164 - ; The separator will be inserted between the output of each module 165 - separator = 166 - 167 - ; Opacity value between 0.0 and 1.0 used on fade in/out 168 - dim-value = 1.0 169 - 170 - ; Value to be used to set the WM_NAME atom 171 - ; If the value is empty or undefined, the atom value 172 - ; will be created from the following template: polybar-[BAR]_[MONITOR] 173 - ; NOTE: The placeholders are not available for custom values 174 - wm-name = 175 - 176 - ; Locale used to localize various module data (e.g. date) 177 - ; Expects a valid libc locale, for example: sv_SE.UTF-8 178 - locale = 179 - 180 - ; Position of the system tray window 181 - ; If empty or undefined, tray support will be disabled 182 - ; NOTE: A center aligned tray will cover center aligned modules 183 - ; 184 - ; Available positions: 185 - ; left 186 - ; center 187 - ; right 188 - ; none 189 - tray-position = none 190 - 191 - ; If true, the bar will not shift its 192 - ; contents when the tray changes 193 - tray-detached = false 194 - 195 - ; Tray icon max size 196 - tray-maxsize = 16 197 - 198 - ; Background color for the tray container 199 - ; ARGB color (e.g. #f00, #ff992a, #ddff1023) 200 - ; By default the tray container will use the bar 201 - ; background color. 202 - tray-background = ${color.background} 203 - 204 - ; Tray offset defined as pixel value (e.g. 35) or percentage (e.g. 50%) 205 - tray-offset-x = 0 206 - tray-offset-y = 0 207 - 208 - ; Pad the sides of each tray icon 209 - tray-padding = 0 210 - 211 - ; Scale factor for tray clients 212 - tray-scale = 1.0 213 - 214 - ; Restack the bar window and put it above the 215 - ; selected window manager's root 216 - ; 217 - ; Fixes the issue where the bar is being drawn 218 - ; on top of fullscreen window's 219 - ; 220 - ; Currently supported WM's: 221 - ; bspwm 222 - ; i3 (requires: `override-redirect = true`) 223 - ;;wm-restack = 224 - 225 - ; Set a DPI values used when rendering text 226 - ; This only affects scalable fonts 227 - ; dpi = 228 - 229 - ; Enable support for inter-process messaging 230 - ; See the Messaging wiki page for more details. 231 - ;enable-ipc = true 232 - 233 - ; Fallback click handlers that will be called if 234 - ; there's no matching module handler found. 235 - click-left = 236 - click-middle = 237 - click-right = 238 - scroll-up = 239 - scroll-down = 240 - double-click-left = 241 - double-click-middle = 242 - double-click-right = 243 - 244 - ; Requires polybar to be built with xcursor support (xcb-util-cursor) 245 - ; Possible values are: 246 - ; - default : The default pointer as before, can also be an empty string (default) 247 - ; - pointer : Typically in the form of a hand 248 - ; - ns-resize : Up and down arrows, can be used to indicate scrolling 249 - cursor-click = 250 - cursor-scroll = 251 - 252 - ;; WM Workspace Specific 253 - 254 - ; bspwm 255 - ;;scroll-up = bspwm-desknext 256 - ;;scroll-down = bspwm-deskprev 257 - ;;scroll-up = bspc desktop -f prev.local 258 - ;;scroll-down = bspc desktop -f next.local 259 - 260 - ;i3 261 - ;;scroll-up = i3wm-wsnext 262 - ;;scroll-down = i3wm-wsprev 263 - ;;scroll-up = i3-msg workspace next_on_output 264 - ;;scroll-down = i3-msg workspace prev_on_output 265 - 266 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 267 - 268 - ;; Application Settings 269 - 270 - [settings] 271 - ; The throttle settings lets the eventloop swallow up til X events 272 - ; if they happen within Y millisecond after first event was received. 273 - ; This is done to prevent flood of update event. 274 - ; 275 - ; For example if 5 modules emit an update event at the same time, we really 276 - ; just care about the last one. But if we wait too long for events to swallow 277 - ; the bar would appear sluggish so we continue if timeout 278 - ; expires or limit is reached. 279 - throttle-output = 5 280 - throttle-output-for = 10 281 - 282 - ; Time in milliseconds that the input handler will wait between processing events 283 - ;throttle-input-for = 30 284 - 285 - ; Reload upon receiving XCB_RANDR_SCREEN_CHANGE_NOTIFY events 286 - screenchange-reload = false 287 - 288 - ; Compositing operators 289 - ; @see: https://www.cairographics.org/manual/cairo-cairo-t.html#cairo-operator-t 290 - compositing-background = source 291 - compositing-foreground = over 292 - compositing-overline = over 293 - compositing-underline = over 294 - compositing-border = over 295 - 296 - ; Define fallback values used by all module formats 297 - ;format-foreground = 298 - ;format-background = 299 - ;format-underline = 300 - ;format-overline = 301 - ;format-spacing = 302 - ;format-padding = 303 - ;format-margin = 304 - ;format-offset = 305 - 306 - ; Enables pseudo-transparency for the bar 307 - ; If set to true the bar can be transparent without a compositor. 308 - pseudo-transparency = false 309 - 310 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
-14
theme/theme/forest/preview.sh
··· 1 - #!/usr/bin/env bash 2 - 3 - DIR="$HOME/.config/polybar/forest" 4 - 5 - # Terminate already running bar instances 6 - killall -q polybar 7 - 8 - # Wait until the processes have been shut down 9 - while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done 10 - 11 - # Launch the preview bar 12 - polybar -q top -c "$DIR"/preview.ini & 13 - polybar -q mid -c "$DIR"/preview.ini & 14 - polybar -q bottom -c "$DIR"/preview.ini &
-117
theme/theme/forest/scripts/checkupdates
··· 1 - #!/usr/bin/bash 2 - # 3 - # checkupdates: Safely print a list of pending updates. 4 - # 5 - # Copyright (c) 2013 Kyle Keen <keenerd@gmail.com> 6 - # 7 - # This program is free software; you can redistribute it and/or modify 8 - # it under the terms of the GNU General Public License as published by 9 - # the Free Software Foundation; either version 2 of the License, or 10 - # (at your option) any later version. 11 - # 12 - # This program is distributed in the hope that it will be useful, 13 - # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 - # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 - # GNU General Public License for more details. 16 - # 17 - # You should have received a copy of the GNU General Public License 18 - # along with this program. If not, see <http://www.gnu.org/licenses/>. 19 - # 20 - 21 - declare -r myname='checkupdates' 22 - declare -r myver='1.0.0' 23 - 24 - plain() { 25 - (( QUIET )) && return 26 - local mesg=$1; shift 27 - printf "${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&1 28 - } 29 - 30 - msg() { 31 - (( QUIET )) && return 32 - local mesg=$1; shift 33 - printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&1 34 - } 35 - 36 - msg2() { 37 - (( QUIET )) && return 38 - local mesg=$1; shift 39 - printf "${BLUE} ->${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&1 40 - } 41 - 42 - ask() { 43 - local mesg=$1; shift 44 - printf "${BLUE}::${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}" "$@" >&1 45 - } 46 - 47 - warning() { 48 - local mesg=$1; shift 49 - printf "${YELLOW}==> $(gettext "WARNING:")${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2 50 - } 51 - 52 - error() { 53 - local mesg=$1; shift 54 - printf "${RED}==> $(gettext "ERROR:")${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2 55 - } 56 - 57 - # check if messages are to be printed using color 58 - unset ALL_OFF BOLD BLUE GREEN RED YELLOW 59 - if [[ -t 2 && ! $USE_COLOR = "n" ]]; then 60 - # prefer terminal safe colored and bold text when tput is supported 61 - if tput setaf 0 &>/dev/null; then 62 - ALL_OFF="$(tput sgr0)" 63 - BOLD="$(tput bold)" 64 - BLUE="${BOLD}$(tput setaf 4)" 65 - GREEN="${BOLD}$(tput setaf 2)" 66 - RED="${BOLD}$(tput setaf 1)" 67 - YELLOW="${BOLD}$(tput setaf 3)" 68 - else 69 - ALL_OFF="\e[1;0m" 70 - BOLD="\e[1;1m" 71 - BLUE="${BOLD}\e[1;34m" 72 - GREEN="${BOLD}\e[1;32m" 73 - RED="${BOLD}\e[1;31m" 74 - YELLOW="${BOLD}\e[1;33m" 75 - fi 76 - fi 77 - readonly ALL_OFF BOLD BLUE GREEN RED YELLOW 78 - 79 - 80 - if (( $# > 0 )); then 81 - echo "${myname} v${myver}" 82 - echo 83 - echo "Safely print a list of pending updates" 84 - echo 85 - echo "Usage: ${myname}" 86 - echo 87 - echo 'Note: Export the "CHECKUPDATES_DB" variable to change the path of the temporary database.' 88 - exit 0 89 - fi 90 - 91 - if ! type -P fakeroot >/dev/null; then 92 - error 'Cannot find the fakeroot binary.' 93 - exit 1 94 - fi 95 - 96 - if [[ -z $CHECKUPDATES_DB ]]; then 97 - CHECKUPDATES_DB="${TMPDIR:-/tmp}/checkup-db-${USER}/" 98 - fi 99 - 100 - trap 'rm -f $CHECKUPDATES_DB/db.lck' INT TERM EXIT 101 - 102 - DBPath="$(pacman-conf DBPath)" 103 - if [[ -z "$DBPath" ]] || [[ ! -d "$DBPath" ]]; then 104 - DBPath="/var/lib/pacman/" 105 - fi 106 - 107 - mkdir -p "$CHECKUPDATES_DB" 108 - ln -s "${DBPath}/local" "$CHECKUPDATES_DB" &> /dev/null 109 - if ! fakeroot -- pacman -Sy --dbpath "$CHECKUPDATES_DB" --logfile /dev/null &> /dev/null; then 110 - error 'Cannot fetch updates' 111 - exit 1 112 - fi 113 - pacman -Qu --dbpath "$CHECKUPDATES_DB" 2> /dev/null | grep -v '\[.*\]' 114 - 115 - exit 0 116 - 117 - # vim: set noet:
-13
theme/theme/forest/scripts/launcher.sh
··· 1 - #!/usr/bin/env bash 2 - 3 - FILE="$HOME/.config/polybar/forest/scripts/rofi/colors.rasi" 4 - 5 - ## random accent color 6 - #COLORS=('#EC7875' '#EC6798' '#BE78D1' '#75A4CD' '#00C7DF' '#00B19F' '#61C766' \ 7 - # '#B9C244' '#EBD369' '#EDB83F' '#E57C46' '#AC8476' '#6C77BB' '#6D8895') 8 - #AC="${COLORS[$(( $RANDOM % 14 ))]}" 9 - #SE="${COLORS[$(( $RANDOM % 14 ))]}" 10 - #sed -i -e "s/ac: .*/ac: ${AC}FF;/g" $FILE 11 - #sed -i -e "s/se: .*/se: ${SE}FF;/g" $FILE 12 - 13 - rofi -no-config -no-lazy-grab -show drun -modi drun -theme ~/.config/polybar/forest/scripts/rofi/launcher.rasi
-95
theme/theme/forest/scripts/powermenu.sh
··· 1 - #!/usr/bin/env bash 2 - 3 - ## Author : Aditya Shakya 4 - ## Mail : adi1090x@gmail.com 5 - ## Github : @adi1090x 6 - ## Twitter : @adi1090x 7 - 8 - dir="~/.config/polybar/forest/scripts/rofi" 9 - uptime=$(uptime -p | sed -e 's/up //g') 10 - 11 - rofi_command="rofi -no-config -theme $dir/powermenu.rasi" 12 - 13 - # Options 14 - shutdown=" Shutdown" 15 - reboot=" Restart" 16 - lock=" Lock" 17 - suspend=" Sleep" 18 - logout=" Logout" 19 - 20 - # Confirmation 21 - confirm_exit() { 22 - rofi -dmenu\ 23 - -no-config\ 24 - -i\ 25 - -no-fixed-num-lines\ 26 - -p "Are You Sure? : "\ 27 - -theme $dir/confirm.rasi 28 - } 29 - 30 - # Message 31 - msg() { 32 - rofi -no-config -theme "$dir/message.rasi" -e "Available Options - yes / y / no / n" 33 - } 34 - 35 - # Variable passed to rofi 36 - options="$lock\n$suspend\n$logout\n$reboot\n$shutdown" 37 - 38 - chosen="$(echo -e "$options" | $rofi_command -p "Uptime: $uptime" -dmenu -selected-row 0)" 39 - case $chosen in 40 - $shutdown) 41 - ans=$(confirm_exit &) 42 - if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then 43 - systemctl poweroff 44 - elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then 45 - exit 0 46 - else 47 - msg 48 - fi 49 - ;; 50 - $reboot) 51 - ans=$(confirm_exit &) 52 - if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then 53 - systemctl reboot 54 - elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then 55 - exit 0 56 - else 57 - msg 58 - fi 59 - ;; 60 - $lock) 61 - if [[ -f /usr/bin/i3lock ]]; then 62 - i3lock 63 - elif [[ -f /usr/bin/betterlockscreen ]]; then 64 - betterlockscreen -l 65 - fi 66 - ;; 67 - $suspend) 68 - ans=$(confirm_exit &) 69 - if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then 70 - mpc -q pause 71 - amixer set Master mute 72 - systemctl suspend 73 - elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then 74 - exit 0 75 - else 76 - msg 77 - fi 78 - ;; 79 - $logout) 80 - ans=$(confirm_exit &) 81 - if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then 82 - if [[ "$DESKTOP_SESSION" == "Openbox" ]]; then 83 - openbox --exit 84 - elif [[ "$DESKTOP_SESSION" == "bspwm" ]]; then 85 - bspc quit 86 - elif [[ "$DESKTOP_SESSION" == "i3" ]]; then 87 - i3-msg exit 88 - fi 89 - elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then 90 - exit 0 91 - else 92 - msg 93 - fi 94 - ;; 95 - esac
-10
theme/theme/forest/scripts/rofi/colors.rasi
··· 1 - /* colors */ 2 - 3 - * { 4 - al: #00000000; 5 - bg: #212B30FF; 6 - bga: #263035FF; 7 - fg: #C4C7C5FF; 8 - ac: #EC407AFF; 9 - se: #4DD0E1FF; 10 - }
-24
theme/theme/forest/scripts/rofi/confirm.rasi
··· 1 - /* Confirm Dialog */ 2 - 3 - @import "colors.rasi" 4 - 5 - * { 6 - background-color: @bg; 7 - text-color: @fg; 8 - font: "Iosevka Nerd Font 10"; 9 - } 10 - 11 - window { 12 - width: 210px; 13 - padding: 25px; 14 - border: 0px 0px 1px 0px; 15 - border-radius: 0px; 16 - border-color: @se; 17 - location: center; 18 - y-offset: -2em; 19 - } 20 - 21 - entry { 22 - expand: true; 23 - text-color: @ac; 24 - }
-119
theme/theme/forest/scripts/rofi/launcher.rasi
··· 1 - /* 2 - * 3 - * Author : Aditya Shakya 4 - * Mail : adi1090x@gmail.com 5 - * Github : @adi1090x 6 - * Twitter : @adi1090x 7 - * 8 - */ 9 - 10 - configuration { 11 - font: "Iosevka Nerd Font 10"; 12 - show-icons: true; 13 - icon-theme: "Papirus"; 14 - display-drun: ""; 15 - drun-display-format: "{name}"; 16 - disable-history: false; 17 - fullscreen: false; 18 - hide-scrollbar: true; 19 - sidebar-mode: false; 20 - } 21 - 22 - @import "colors.rasi" 23 - 24 - window { 25 - transparency: "real"; 26 - background-color: @bg; 27 - text-color: @fg; 28 - border: 0px 0px 0px 0px; 29 - border-color: @ac; 30 - border-radius: 0px; 31 - width: 500px; 32 - location: center; 33 - x-offset: 0; 34 - y-offset: 0; 35 - } 36 - 37 - prompt { 38 - enabled: true; 39 - padding: 0px; 40 - background-color: @bga; 41 - text-color: @ac; 42 - font: "feather 12"; 43 - } 44 - 45 - entry { 46 - background-color: @al; 47 - text-color: @fg; 48 - placeholder-color: @fg; 49 - expand: true; 50 - horizontal-align: 0; 51 - placeholder: "Search..."; 52 - padding: 0px 0px 0px 5px; 53 - blink: true; 54 - } 55 - 56 - inputbar { 57 - children: [ prompt, entry ]; 58 - background-color: @bga; 59 - text-color: @fg; 60 - expand: false; 61 - border: 0px 0px 1px 0px; 62 - border-radius: 0px; 63 - border-color: @se; 64 - margin: 0px; 65 - padding: 10px; 66 - } 67 - 68 - listview { 69 - background-color: @al; 70 - padding: 0px; 71 - columns: 1; 72 - lines: 6; 73 - spacing: 5px; 74 - cycle: true; 75 - dynamic: true; 76 - layout: vertical; 77 - } 78 - 79 - mainbox { 80 - background-color: @al; 81 - border: 0px; 82 - border-radius: 0px; 83 - border-color: @ac; 84 - children: [ inputbar, listview ]; 85 - spacing: 5px; 86 - padding: 5px; 87 - } 88 - 89 - element { 90 - background-color: @al; 91 - text-color: @fg; 92 - orientation: horizontal; 93 - border-radius: 0px; 94 - padding: 8px; 95 - } 96 - 97 - element-icon { 98 - background-color: transparent; 99 - text-color: inherit; 100 - size: 24px; 101 - border: 0px; 102 - } 103 - 104 - element-text { 105 - background-color: transparent; 106 - text-color: inherit; 107 - expand: true; 108 - horizontal-align: 0; 109 - vertical-align: 0.5; 110 - margin: 0px 2.5px 0px 2.5px; 111 - } 112 - 113 - element selected { 114 - background-color: @se; 115 - text-color: @bg; 116 - border: 0px 0px 0px 0px; 117 - border-radius: 0px; 118 - border-color: @ac; 119 - }
-24
theme/theme/forest/scripts/rofi/message.rasi
··· 1 - /* Confirm Dialog */ 2 - 3 - @import "colors.rasi" 4 - 5 - * { 6 - background-color: @bg; 7 - text-color: @fg; 8 - font: "Iosevka Nerd Font 10"; 9 - } 10 - 11 - window { 12 - width: 320px; 13 - padding: 25px; 14 - border: 0px 0px 1px 0px; 15 - border-radius: 0px; 16 - border-color: @se; 17 - location: center; 18 - y-offset: -2em; 19 - } 20 - 21 - entry { 22 - expand: true; 23 - text-color: @ac; 24 - }
-127
theme/theme/forest/scripts/rofi/networkmenu.rasi
··· 1 - /* 2 - * 3 - * Author : Aditya Shakya 4 - * Mail : adi1090x@gmail.com 5 - * Github : @adi1090x 6 - * Twitter : @adi1090x 7 - * 8 - */ 9 - 10 - configuration { 11 - font: "Iosevka Nerd Font 10"; 12 - show-icons: true; 13 - icon-theme: "Papirus"; 14 - display-drun: ""; 15 - drun-display-format: "{name}"; 16 - disable-history: false; 17 - fullscreen: false; 18 - hide-scrollbar: true; 19 - sidebar-mode: false; 20 - } 21 - 22 - @import "colors.rasi" 23 - 24 - window { 25 - transparency: "real"; 26 - background-color: @bg; 27 - text-color: @fg; 28 - border: 0px 0px 0px 0px; 29 - border-color: @ac; 30 - border-radius: 0px; 31 - width: 400px; 32 - location: center; 33 - x-offset: 0; 34 - y-offset: 0; 35 - } 36 - 37 - prompt { 38 - enabled: true; 39 - padding: 0px 0px 0px 10px; 40 - background-color: @bga; 41 - text-color: @fg; 42 - } 43 - 44 - textbox-prompt-colon { 45 - padding: 0px; 46 - background-color: @bga; 47 - text-color: @ac; 48 - expand: false; 49 - str: ""; 50 - font: "feather 12"; 51 - } 52 - 53 - entry { 54 - background-color: @al; 55 - text-color: @fg; 56 - placeholder-color: @fg; 57 - expand: true; 58 - horizontal-align: 0; 59 - placeholder: "Search..."; 60 - padding: 0px 0px 0px 5px; 61 - blink: true; 62 - } 63 - 64 - inputbar { 65 - children: [ textbox-prompt-colon, prompt ]; 66 - background-color: @bga; 67 - text-color: @fg; 68 - expand: false; 69 - border: 0px 0px 1px 0px; 70 - border-radius: 0px; 71 - border-color: @se; 72 - margin: 0px; 73 - padding: 10px; 74 - } 75 - 76 - listview { 77 - background-color: @al; 78 - padding: 0px; 79 - columns: 1; 80 - lines: 8; 81 - spacing: 5px; 82 - cycle: true; 83 - dynamic: true; 84 - layout: vertical; 85 - } 86 - 87 - mainbox { 88 - background-color: @al; 89 - border: 0px; 90 - border-radius: 0px; 91 - border-color: @ac; 92 - children: [ inputbar, listview ]; 93 - spacing: 5px; 94 - padding: 5px; 95 - } 96 - 97 - element { 98 - background-color: @al; 99 - text-color: @fg; 100 - orientation: horizontal; 101 - border-radius: 0px; 102 - padding: 8px 8px 8px -15px; 103 - } 104 - 105 - element-icon { 106 - background-color: transparent; 107 - text-color: inherit; 108 - size: 24px; 109 - border: 0px; 110 - } 111 - 112 - element-text { 113 - background-color: transparent; 114 - text-color: inherit; 115 - expand: true; 116 - horizontal-align: 0; 117 - vertical-align: 0.5; 118 - margin: 0px 2.5px 0px 2.5px; 119 - } 120 - 121 - element selected { 122 - background-color: @se; 123 - text-color: @bg; 124 - border: 0px 0px 0px 0px; 125 - border-radius: 0px; 126 - border-color: @ac; 127 - }
-127
theme/theme/forest/scripts/rofi/powermenu.rasi
··· 1 - /* 2 - * 3 - * Author : Aditya Shakya 4 - * Mail : adi1090x@gmail.com 5 - * Github : @adi1090x 6 - * Twitter : @adi1090x 7 - * 8 - */ 9 - 10 - configuration { 11 - font: "Iosevka Nerd Font 10"; 12 - show-icons: true; 13 - icon-theme: "Papirus"; 14 - display-drun: ""; 15 - drun-display-format: "{name}"; 16 - disable-history: false; 17 - fullscreen: false; 18 - hide-scrollbar: true; 19 - sidebar-mode: false; 20 - } 21 - 22 - @import "colors.rasi" 23 - 24 - window { 25 - transparency: "real"; 26 - background-color: @bg; 27 - text-color: @fg; 28 - border: 0px 0px 0px 0px; 29 - border-color: @ac; 30 - border-radius: 0px; 31 - width: 350px; 32 - location: center; 33 - x-offset: 0; 34 - y-offset: 0; 35 - } 36 - 37 - prompt { 38 - enabled: true; 39 - padding: 0px 0px 0px 10px; 40 - background-color: @bga; 41 - text-color: @fg; 42 - } 43 - 44 - textbox-prompt-colon { 45 - padding: 0px; 46 - background-color: @bga; 47 - text-color: @ac; 48 - expand: false; 49 - str: ""; 50 - font: "feather 12"; 51 - } 52 - 53 - entry { 54 - background-color: @al; 55 - text-color: @fg; 56 - placeholder-color: @fg; 57 - expand: true; 58 - horizontal-align: 0; 59 - placeholder: "Search..."; 60 - padding: 0px 0px 0px 5px; 61 - blink: true; 62 - } 63 - 64 - inputbar { 65 - children: [ textbox-prompt-colon, prompt ]; 66 - background-color: @bga; 67 - text-color: @fg; 68 - expand: false; 69 - border: 0px 0px 1px 0px; 70 - border-radius: 0px; 71 - border-color: @se; 72 - margin: 0px; 73 - padding: 10px; 74 - } 75 - 76 - listview { 77 - background-color: @al; 78 - padding: 0px; 79 - columns: 1; 80 - lines: 5; 81 - spacing: 5px; 82 - cycle: true; 83 - dynamic: true; 84 - layout: vertical; 85 - } 86 - 87 - mainbox { 88 - background-color: @al; 89 - border: 0px; 90 - border-radius: 0px; 91 - border-color: @ac; 92 - children: [ inputbar, listview ]; 93 - spacing: 5px; 94 - padding: 5px; 95 - } 96 - 97 - element { 98 - background-color: @al; 99 - text-color: @fg; 100 - orientation: horizontal; 101 - border-radius: 0px; 102 - padding: 8px 8px 8px -20px; 103 - } 104 - 105 - element-icon { 106 - background-color: transparent; 107 - text-color: inherit; 108 - size: 24px; 109 - border: 0px; 110 - } 111 - 112 - element-text { 113 - background-color: transparent; 114 - text-color: inherit; 115 - expand: true; 116 - horizontal-align: 0; 117 - vertical-align: 0.5; 118 - margin: 0px 2.5px 0px 2.5px; 119 - } 120 - 121 - element selected { 122 - background-color: @se; 123 - text-color: @bg; 124 - border: 0px 0px 0px 0px; 125 - border-radius: 0px; 126 - border-color: @ac; 127 - }
-127
theme/theme/forest/scripts/rofi/styles.rasi
··· 1 - /* 2 - * 3 - * Author : Aditya Shakya 4 - * Mail : adi1090x@gmail.com 5 - * Github : @adi1090x 6 - * Twitter : @adi1090x 7 - * 8 - */ 9 - 10 - configuration { 11 - font: "Iosevka Nerd Font 10"; 12 - show-icons: true; 13 - icon-theme: "Papirus"; 14 - display-drun: ""; 15 - drun-display-format: "{name}"; 16 - disable-history: false; 17 - fullscreen: false; 18 - hide-scrollbar: true; 19 - sidebar-mode: false; 20 - } 21 - 22 - @import "colors.rasi" 23 - 24 - window { 25 - transparency: "real"; 26 - background-color: @bg; 27 - text-color: @fg; 28 - border: 0px 0px 0px 0px; 29 - border-color: @ac; 30 - border-radius: 0px; 31 - width: 350px; 32 - location: center; 33 - x-offset: 0; 34 - y-offset: 0; 35 - } 36 - 37 - prompt { 38 - enabled: true; 39 - padding: 0px 0px 0px 5px; 40 - background-color: @bga; 41 - text-color: @fg; 42 - } 43 - 44 - textbox-prompt-colon { 45 - padding: 0px; 46 - background-color: @bga; 47 - text-color: @ac; 48 - expand: false; 49 - str: ""; 50 - font: "feather 12"; 51 - } 52 - 53 - entry { 54 - background-color: @al; 55 - text-color: @fg; 56 - placeholder-color: @fg; 57 - expand: true; 58 - horizontal-align: 0; 59 - placeholder: "Search..."; 60 - padding: 0px 0px 0px 10px; 61 - blink: true; 62 - } 63 - 64 - inputbar { 65 - children: [ textbox-prompt-colon, entry ]; 66 - background-color: @bga; 67 - text-color: @fg; 68 - expand: false; 69 - border: 0px 0px 1px 0px; 70 - border-radius: 0px; 71 - border-color: @se; 72 - margin: 0px; 73 - padding: 10px; 74 - } 75 - 76 - listview { 77 - background-color: @al; 78 - padding: 0px; 79 - columns: 1; 80 - lines: 5; 81 - spacing: 5px; 82 - cycle: true; 83 - dynamic: true; 84 - layout: vertical; 85 - } 86 - 87 - mainbox { 88 - background-color: @al; 89 - border: 0px; 90 - border-radius: 0px; 91 - border-color: @ac; 92 - children: [ inputbar, listview ]; 93 - spacing: 5px; 94 - padding: 5px; 95 - } 96 - 97 - element { 98 - background-color: @al; 99 - text-color: @fg; 100 - orientation: horizontal; 101 - border-radius: 0px; 102 - padding: 8px 8px 8px -20px; 103 - } 104 - 105 - element-icon { 106 - background-color: transparent; 107 - text-color: inherit; 108 - size: 24px; 109 - border: 0px; 110 - } 111 - 112 - element-text { 113 - background-color: transparent; 114 - text-color: inherit; 115 - expand: true; 116 - horizontal-align: 0; 117 - vertical-align: 0.5; 118 - margin: 0px 2.5px 0px 2.5px; 119 - } 120 - 121 - element selected { 122 - background-color: @se; 123 - text-color: @bg; 124 - border: 0px 0px 0px 0px; 125 - border-radius: 0px; 126 - border-color: @ac; 127 - }
-15
theme/theme/forest/scripts/style-switch.sh
··· 1 - #!/usr/bin/env bash 2 - 3 - SDIR="$HOME/.config/polybar/forest/scripts" 4 - 5 - # Launch Rofi 6 - MENU="$(rofi -no-config -no-lazy-grab -sep "|" -dmenu -i -p '' \ 7 - -theme $SDIR/rofi/styles.rasi \ 8 - <<< " Default| Nord| Gruvbox| Dark| Cherry|")" 9 - case "$MENU" in 10 - *Default) "$SDIR"/styles.sh --default ;; 11 - *Nord) "$SDIR"/styles.sh --nord ;; 12 - *Gruvbox) "$SDIR"/styles.sh --gruvbox ;; 13 - *Dark) "$SDIR"/styles.sh --dark ;; 14 - *Cherry) "$SDIR"/styles.sh --cherry ;; 15 - esac
-76
theme/theme/forest/scripts/styles.sh
··· 1 - #!/usr/bin/env bash 2 - 3 - # Color files 4 - PFILE="$HOME/.config/polybar/forest/colors.ini" 5 - RFILE="$HOME/.config/polybar/forest/scripts/rofi/colors.rasi" 6 - 7 - # Change colors 8 - change_color() { 9 - # polybar 10 - sed -i -e "s/background = #.*/background = $BG/g" $PFILE 11 - sed -i -e "s/foreground = #.*/foreground = $FG/g" $PFILE 12 - sed -i -e "s/sep = #.*/sep = $SEP/g" $PFILE 13 - 14 - # rofi 15 - cat > $RFILE <<- EOF 16 - /* colors */ 17 - 18 - * { 19 - al: #00000000; 20 - bg: ${BG}FF; 21 - bga: ${BGA}FF; 22 - fg: ${FG}FF; 23 - ac: ${AC}FF; 24 - se: ${SE}FF; 25 - } 26 - EOF 27 - 28 - polybar-msg cmd restart 29 - } 30 - 31 - if [[ $1 = "--default" ]]; then 32 - BG="#212B30" 33 - FG="#C4C7C5" 34 - BGA="#263035" 35 - SEP="#3F5360" 36 - AC="#EC407A" 37 - SE="#4DD0E1" 38 - change_color 39 - elif [[ $1 = "--nord" ]]; then 40 - BG="#3B4252" 41 - FG="#E5E9F0" 42 - BGA="#454C5C" 43 - SEP="#5B6579" 44 - AC="#BF616A" 45 - SE="#88C0D0" 46 - change_color 47 - elif [[ $1 = "--gruvbox" ]]; then 48 - BG="#282828" 49 - FG="#EBDBB2" 50 - BGA="#313131" 51 - SEP="#505050" 52 - AC="#FB4934" 53 - SE="#8EC07C" 54 - change_color 55 - elif [[ $1 = "--dark" ]]; then 56 - BG="#141C21" 57 - FG="#93A1A1" 58 - BGA="#1E262B" 59 - SEP="#3C4449" 60 - AC="#D12F2C" 61 - SE="#33C5BA" 62 - change_color 63 - elif [[ $1 = "--cherry" ]]; then 64 - BG="#1F1626" 65 - FG="#FFFFFF" 66 - BGA="#292030" 67 - SEP="#473F4E" 68 - AC="#D94084" 69 - SE="#4F5D95" 70 - change_color 71 - else 72 - cat <<- _EOF_ 73 - No option specified, Available options: 74 - --default --nord --gruvbox --dark --cherry 75 - _EOF_ 76 - fi
-45
theme/theme/forest/scripts/updates.sh
··· 1 - #!/usr/bin/env bash 2 - 3 - NOTIFY_ICON=/usr/share/icons/Papirus/32x32/apps/system-software-update.svg 4 - 5 - get_total_updates() { UPDATES=$(~/.config/polybar/forest/scripts/checkupdates 2>/dev/null | wc -l); } 6 - 7 - while true; do 8 - get_total_updates 9 - 10 - # notify user of updates 11 - if hash notify-send &>/dev/null; then 12 - if (( UPDATES > 50 )); then 13 - notify-send -u critical -i $NOTIFY_ICON \ 14 - "You really need to update!!" "$UPDATES New packages" 15 - elif (( UPDATES > 25 )); then 16 - notify-send -u normal -i $NOTIFY_ICON \ 17 - "You should update soon" "$UPDATES New packages" 18 - elif (( UPDATES > 2 )); then 19 - notify-send -u low -i $NOTIFY_ICON \ 20 - "$UPDATES New packages" 21 - fi 22 - fi 23 - 24 - # when there are updates available 25 - # every 10 seconds another check for updates is done 26 - while (( UPDATES > 0 )); do 27 - if (( UPDATES == 1 )); then 28 - echo "$UPDATES" 29 - elif (( UPDATES > 1 )); then 30 - echo "$UPDATES" 31 - else 32 - echo "None" 33 - fi 34 - sleep 10 35 - get_total_updates 36 - done 37 - 38 - # when no updates are available, use a longer loop, this saves on CPU 39 - # and network uptime, only checking once every 30 min for new updates 40 - while (( UPDATES == 0 )); do 41 - echo "None" 42 - sleep 1800 43 - get_total_updates 44 - done 45 - done
-244
theme/theme/forest/user_modules.ini
··· 1 - ;; ┌──────────────────────────────────────────────────────────────────────────────-----┐ 2 - ;; │░█▀█░█▀█░█░░░█░█░█▀▄░█▀█░█▀▄░░░░░░░░░█░█░█▀▀░█▀▀░█▀▄░░░█▄█░█▀█░█▀▄░█░█░█░░░█▀▀░█▀▀ │ 3 - ;; │░█▀▀░█░█░█░░░░█░░█▀▄░█▀█░█▀▄░░░░▀░░░░█░█░▀▀█░█▀▀░█▀▄░░░█░█░█░█░█░█░█░█░█░░░█▀▀░▀▀█ │ 4 - ;; │░▀░░░▀▀▀░▀▀▀░░▀░░▀▀░░▀░▀░▀░▀░░░░▀░░░░▀▀▀░▀▀▀░▀▀▀░▀░▀░░░▀░▀░▀▀▀░▀▀░░▀▀▀░▀▀▀░▀▀▀░▀▀▀ │ 5 - ;; │░Created░By░Aditya░Shakya░@adi1090x░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│ 6 - ;; └──────────────────────────────────────────────────────────────────────────────-----┘ 7 - 8 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 9 - 10 - [module/updates] 11 - type = custom/script 12 - 13 - ; Available tokens: 14 - ; %counter% 15 - ; Command to be executed (using "/usr/bin/env sh -c [command]") 16 - exec = ~/.config/polybar/forest/scripts/updates.sh 17 - 18 - ; Conditional command that, if defined, needs to exit successfully 19 - ; before the main exec command is invoked. 20 - ; Default: "" 21 - ;;exec-if = "" 22 - 23 - ; Will the script output continous content? 24 - ; Default: false 25 - tail = true 26 - 27 - ; Seconds to sleep between updates 28 - ; Default: 2 (0 if `tail = true`) 29 - interval = 5 30 - 31 - ; Available tags: 32 - ; <output> - deprecated 33 - ; <label> (default) 34 - format = <label> 35 - format-prefix =  36 - format-prefix-foreground = ${color.yellow} 37 - 38 - ; Available tokens: 39 - ; %output% 40 - ; Default: %output% 41 - label = " %output%" 42 - 43 - ; Available tokens: 44 - ; %counter% 45 - ; %pid% 46 - ; 47 - ; "click-(left|middle|right)" will be executed using "/usr/bin/env sh -c [command]" 48 - click-left = exo-open --launch TerminalEmulator & 49 - click-right = exo-open --launch TerminalEmulator & 50 - ;;double-click-left = echo double left %counter% 51 - ;;double-click-middle = echo double middle %counter% 52 - ;;double-click-right = echo double right %counter% 53 - 54 - ; Available tokens: 55 - ; %counter% 56 - ; %pid% 57 - ; 58 - ; "scroll-(up|down)" will be executed using "/usr/bin/env sh -c [command]" 59 - ;;scroll-up = echo scroll up %counter% 60 - ;;scroll-down = echo scroll down %counter% 61 - 62 - 63 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 64 - 65 - [module/launcher] 66 - type = custom/text 67 - 68 - content =  69 - content-foreground = ${color.purple} 70 - 71 - ; "click-(left|middle|right)" will be executed using "/usr/bin/env sh -c $COMMAND" 72 - click-left = ~/.config/polybar/forest/scripts/launcher.sh & 73 - ;;click-middle = ~/.config/polybar/forest/scripts/launcher-full 74 - click-right = ~/.config/polybar/forest/scripts/style-switch.sh & 75 - 76 - ; "scroll-(up|down)" will be executed using "/usr/bin/env sh -c $COMMAND" 77 - ;;scroll-up = ~/.config/polybar/forest/scripts/launcher.sh & 78 - ;;scroll-down = ~/.config/polybar/forest/scripts/color-switch.sh & 79 - 80 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 81 - 82 - [module/sysmenu] 83 - type = custom/text 84 - 85 - content =  86 - content-foreground = ${color.cyan} 87 - 88 - click-left = ~/.config/polybar/forest/scripts/powermenu.sh & 89 - 90 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 91 - 92 - [module/color-switch] 93 - type = custom/text 94 - 95 - content =  96 - content-foreground = ${color.red} 97 - 98 - click-left = ~/.config/polybar/forest/scripts/style-switch.sh & 99 - 100 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 101 - 102 - [module/sep] 103 - type = custom/text 104 - content = | 105 - 106 - content-foreground = ${color.sep} 107 - 108 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 109 - 110 - [module/apps] 111 - type = custom/text 112 - 113 - [module/term] 114 - inherit = module/apps 115 - content =  116 - content-foreground = ${color.blue-gray} 117 - click-left = termite & 118 - click-middle = urxvt & 119 - click-right = xfce4-terminal & 120 - 121 - [module/files] 122 - inherit = module/apps 123 - content =  124 - content-foreground = ${color.blue} 125 - click-left = thunar & 126 - click-right = pcmanfm & 127 - 128 - [module/browser] 129 - inherit = module/apps 130 - content =  131 - content-foreground = ${color.orange} 132 - click-left = firefox & 133 - click-right = chromium & 134 - 135 - [module/settings] 136 - inherit = module/apps 137 - content =  138 - content-foreground = ${color.teal} 139 - click-left = xfce4-settings-manager & 140 - click-right = lxappearance & 141 - 142 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 143 - 144 - [module/powermenu] 145 - type = custom/menu 146 - 147 - ; If true, <label-toggle> will be to the left of the menu items (default). 148 - ; If false, it will be on the right of all the items. 149 - expand-right = true 150 - 151 - ; "menu-LEVEL-N" has the same properties as "label-NAME" with 152 - ; the additional "exec" property 153 - ; 154 - ; Available exec commands: 155 - ; menu-open-LEVEL 156 - ; menu-close 157 - ; Other commands will be executed using "/usr/bin/env sh -c $COMMAND" 158 - menu-0-0 = " Reboot |" 159 - menu-0-0-exec = menu-open-1 160 - menu-0-1 = " Shutdown " 161 - menu-0-1-exec = menu-open-2 162 - 163 - menu-1-0 = " Back |" 164 - menu-1-0-exec = menu-open-0 165 - menu-1-1 = " Reboot " 166 - menu-1-1-exec = systemctl reboot 167 - 168 - menu-2-0 = " Shutdown |" 169 - menu-2-0-exec = systemctl poweroff 170 - menu-2-1 = " Back " 171 - menu-2-1-exec = menu-open-0 172 - 173 - ; Available tags: 174 - ; <label-toggle> (default) - gets replaced with <label-(open|close)> 175 - ; <menu> (default) 176 - ; Note that if you use <label-toggle> you must also include 177 - ; the definition for <label-open> 178 - 179 - format = <label-toggle><menu> 180 - 181 - label-open =  182 - label-open-foreground = ${color.cyan} 183 - label-open-padding = 1 184 - label-close =  185 - label-close-foreground = ${color.red} 186 - label-close-padding = 1 187 - 188 - ; Optional item separator 189 - ; Default: none 190 - ;label-separator = " | " 191 - ;label-separator-foreground = ${color.foreground} 192 - ;label-separator-background = ${color.background-alt} 193 - 194 - ;;label-open-foreground = ${color.foreground} 195 - ;;label-close-foreground = ${color.background} 196 - 197 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 198 - 199 - [module/menu] 200 - type = custom/menu 201 - 202 - ; If true, <label-toggle> will be to the left of the menu items (default). 203 - ; If false, it will be on the right of all the items. 204 - expand-right = true 205 - 206 - ; "menu-LEVEL-N" has the same properties as "label-NAME" with 207 - ; the additional "exec" property 208 - ; 209 - ; Available exec commands: 210 - ; menu-open-LEVEL 211 - ; menu-close 212 - ; Other commands will be executed using "/usr/bin/env sh -c $COMMAND" 213 - menu-0-0 ="  Menu | " 214 - menu-0-0-exec = ~/.config/polybar/forest/scripts/launcher.sh & 215 - 216 - menu-0-1 =" Files | " 217 - menu-0-1-exec = thunar & 218 - 219 - menu-0-2 =" Terminal | " 220 - menu-0-2-exec = termite & 221 - 222 - menu-0-3 =" Browser " 223 - menu-0-3-exec = firefox & 224 - 225 - ; Available tags: 226 - ; <label-toggle> (default) - gets replaced with <label-(open|close)> 227 - ; <menu> (default) 228 - ; Note that if you use <label-toggle> you must also include 229 - ; the definition for <label-open> 230 - 231 - format = <label-toggle><menu> 232 - 233 - label-open =  234 - label-open-foreground = ${color.yellow} 235 - label-open-padding = 1 236 - label-close =  237 - label-close-foreground = ${color.red} 238 - label-close-padding = 1 239 - 240 - ; Optional item separator 241 - ; Default: none 242 - ;label-separator = " | " 243 - 244 - ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
-447
theme/theme/polybar.config
··· 1 - ;========================================================== 2 - ; 3 - ; 4 - ; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗ 5 - ; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗ 6 - ; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝ 7 - ; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗ 8 - ; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║ 9 - ; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ 10 - ; 11 - ; 12 - ; To learn more about how to configure Polybar 13 - ; go to https://github.com/jaagr/polybar 14 - ; 15 - ; The README contains a lot of information 16 - ; 17 - ;========================================================== 18 - 19 - [colors] 20 - background = #99222222 21 - foreground = #dfdfdf 22 - background-alt = #99444444 23 - foreground-alt = #FFFFFF 24 - primary = #ffb52a 25 - secondary = #e60053 26 - alert = #bd2c40 27 - 28 - 29 - [bar/mainbar0] 30 - inherit = bar/barbase 31 - modules-left = workspace0 32 - [module/workspace0] 33 - type = custom/script 34 - exec = leftwm-state -w 0 -t $SCRIPTPATH/template.liquid 35 - tail = true 36 - 37 - [bar/mainbar1] 38 - inherit = bar/barbase 39 - modules-left = workspace1 40 - [module/workspace1] 41 - type = custom/script 42 - exec = leftwm-state -w 1 -t $SCRIPTPATH/template.liquid 43 - tail = true 44 - 45 - [bar/mainbar2] 46 - inherit = bar/barbase 47 - modules-left = workspace2 48 - [module/workspace2] 49 - type = custom/script 50 - exec = leftwm-state -w 2 -t $SCRIPTPATH/template.liquid 51 - tail = true 52 - 53 - [bar/mainbar3] 54 - inherit = bar/barbase 55 - modules-left = workspace3 56 - [module/workspace3] 57 - type = custom/script 58 - exec = leftwm-state -w 3 -t $SCRIPTPATH/template.liquid 59 - tail = true 60 - 61 - 62 - [bar/barbase] 63 - width = ${env:width} 64 - offset-x = ${env:offsetx} 65 - monitor = ${env:monitor} 66 - ;offset-y = ${env:y} 67 - ;width = 100% 68 - height = 27 69 - fixed-center = false 70 - background = ${colors.background} 71 - foreground = ${colors.foreground} 72 - line-size = 3 73 - line-color = #f00 74 - border-size = 0 75 - border-color = #00000000 76 - padding-left = 0 77 - padding-right = 2 78 - module-margin-left = 1 79 - module-margin-right = 2 80 - font-0 = misc fixed:pixelsize=10;1 81 - font-1 = unifont:fontformat=truetype:size=8:antialias=false;0 82 - font-2 = wuncon siji:pixelsize=10;1 83 - modules-center = 84 - modules-right = filesystem xbacklight pulseaudio xkeyboard memory cpu wlan eth battery temperature date powermenu 85 - tray-position = right 86 - tray-padding = 2 87 - cursor-click = pointer 88 - cursor-scroll = ns-resize 89 - 90 - [module/ewmh] 91 - type = internal/xworkspaces 92 - label-active = " %icon% %name% " 93 - label-active-foreground = ${colors.foreground-alt} 94 - label-active-background = ${colors.background-alt} 95 - label-active-underline = ${colors.primary} 96 - label-occupied = " %icon% %name% " 97 - label-occupied-underline = ${colors.secondary} 98 - label-urgent = " %icon% %name% " 99 - label-urgent-foreground = ${colors.foreground} 100 - label-urgent-background = ${colors.background} 101 - label-urgent-underline = ${colors.alert} 102 - label-empty = " %icon% %name% " 103 - label-empty-foreground = ${colors.foreground} 104 - 105 - 106 - [module/xwindow] 107 - type = internal/xwindow 108 - label = %title:0:30:...% 109 - 110 - [module/xkeyboard] 111 - type = internal/xkeyboard 112 - blacklist-0 = num lock 113 - 114 - format-prefix = " " 115 - format-prefix-foreground = ${colors.foreground-alt} 116 - format-prefix-underline = ${colors.secondary} 117 - 118 - label-layout = %layout% 119 - label-layout-underline = ${colors.secondary} 120 - 121 - label-indicator-padding = 2 122 - label-indicator-margin = 1 123 - label-indicator-background = ${colors.secondary} 124 - label-indicator-underline = ${colors.secondary} 125 - 126 - [module/filesystem] 127 - type = internal/fs 128 - interval = 25 129 - 130 - mount-0 = / 131 - 132 - label-mounted = %{F#0a81f5}%mountpoint%%{F-}: %percentage_used%% 133 - label-unmounted = %mountpoint% not mounted 134 - label-unmounted-foreground = ${colors.foreground-alt} 135 - 136 - [module/bspwm] 137 - type = internal/bspwm 138 - 139 - label-focused = %index% 140 - label-focused-background = ${colors.background-alt} 141 - label-focused-underline= ${colors.primary} 142 - label-focused-padding = 2 143 - 144 - label-occupied = %index% 145 - label-occupied-padding = 2 146 - 147 - label-urgent = %index%! 148 - label-urgent-background = ${colors.alert} 149 - label-urgent-padding = 2 150 - 151 - label-empty = %index% 152 - label-empty-foreground = ${colors.foreground-alt} 153 - label-empty-padding = 2 154 - 155 - ; Separator in between workspaces 156 - ; label-separator = | 157 - 158 - [module/i3] 159 - type = internal/i3 160 - format = <label-state> <label-mode> 161 - index-sort = true 162 - wrapping-scroll = false 163 - 164 - ; Only show workspaces on the same output as the bar 165 - ;pin-workspaces = true 166 - 167 - label-mode-padding = 2 168 - label-mode-foreground = #000 169 - label-mode-background = ${colors.primary} 170 - 171 - ; focused = Active workspace on focused monitor 172 - label-focused = %index% 173 - label-focused-background = ${module/bspwm.label-focused-background} 174 - label-focused-underline = ${module/bspwm.label-focused-underline} 175 - label-focused-padding = ${module/bspwm.label-focused-padding} 176 - 177 - ; unfocused = Inactive workspace on any monitor 178 - label-unfocused = %index% 179 - label-unfocused-padding = ${module/bspwm.label-occupied-padding} 180 - 181 - ; visible = Active workspace on unfocused monitor 182 - label-visible = %index% 183 - label-visible-background = ${self.label-focused-background} 184 - label-visible-underline = ${self.label-focused-underline} 185 - label-visible-padding = ${self.label-focused-padding} 186 - 187 - ; urgent = Workspace with urgency hint set 188 - label-urgent = %index% 189 - label-urgent-background = ${module/bspwm.label-urgent-background} 190 - label-urgent-padding = ${module/bspwm.label-urgent-padding} 191 - 192 - ; Separator in between workspaces 193 - ; label-separator = | 194 - 195 - 196 - [module/mpd] 197 - type = internal/mpd 198 - format-online = <label-song> <icon-prev> <icon-stop> <toggle> <icon-next> 199 - 200 - icon-prev =  201 - icon-stop =  202 - icon-play =  203 - icon-pause =  204 - icon-next =  205 - 206 - label-song-maxlen = 25 207 - label-song-ellipsis = true 208 - 209 - [module/xbacklight] 210 - type = internal/xbacklight 211 - 212 - format = <label> <bar> 213 - label = BL 214 - 215 - bar-width = 10 216 - bar-indicator = | 217 - bar-indicator-foreground = #fff 218 - bar-indicator-font = 2 219 - bar-fill = ─ 220 - bar-fill-font = 2 221 - bar-fill-foreground = #9f78e1 222 - bar-empty = ─ 223 - bar-empty-font = 2 224 - bar-empty-foreground = ${colors.foreground-alt} 225 - 226 - [module/backlight-acpi] 227 - inherit = module/xbacklight 228 - type = internal/backlight 229 - card = intel_backlight 230 - 231 - [module/cpu] 232 - type = internal/cpu 233 - interval = 2 234 - format-prefix = " " 235 - format-prefix-foreground = ${colors.foreground-alt} 236 - format-underline = #f90000 237 - label = %percentage:2%% 238 - 239 - [module/memory] 240 - type = internal/memory 241 - interval = 2 242 - format-prefix = " " 243 - format-prefix-foreground = ${colors.foreground-alt} 244 - format-underline = #4bffdc 245 - label = %percentage_used%% 246 - 247 - [module/wlan] 248 - type = internal/network 249 - interface = wlp3s0 250 - interval = 3.0 251 - 252 - format-connected = <ramp-signal> <label-connected> 253 - format-connected-underline = #9f78e1 254 - label-connected = %essid% 255 - 256 - format-disconnected = 257 - ;format-disconnected = <label-disconnected> 258 - ;format-disconnected-underline = ${self.format-connected-underline} 259 - ;label-disconnected = %ifname% disconnected 260 - ;label-disconnected-foreground = ${colors.foreground-alt} 261 - 262 - ramp-signal-0 =  263 - ramp-signal-1 =  264 - ramp-signal-2 =  265 - ramp-signal-3 =  266 - ramp-signal-4 =  267 - ramp-signal-foreground = ${colors.foreground-alt} 268 - 269 - [module/eth] 270 - type = internal/network 271 - interface = enp0s25 272 - interval = 3.0 273 - 274 - format-connected-underline = #55aa55 275 - format-connected-prefix = " " 276 - format-connected-prefix-foreground = ${colors.foreground-alt} 277 - label-connected = %local_ip% 278 - 279 - format-disconnected = 280 - ;format-disconnected = <label-disconnected> 281 - ;format-disconnected-underline = ${self.format-connected-underline} 282 - ;label-disconnected = %ifname% disconnected 283 - ;label-disconnected-foreground = ${colors.foreground-alt} 284 - 285 - [module/date] 286 - type = internal/date 287 - date =  %%{F#99}%m/%d/%Y%%{F-} %%{F#fff}%I:%M %p%{F-} 288 - date-alt = %%{F#fff}%A, %B %d, %Y %%{F#fff}%I:%M:%{F#666}%%{F#fba922}%S%%{F-} %p 289 - ;interval = 5 290 - ;date = 291 - ;date-alt = " %Y-%m-%d" 292 - ;time = %H:%M 293 - ;time-alt = %H:%M:%S 294 - ;format-prefix =  295 - ;format-prefix-foreground = ${colors.foreground-alt} 296 - ;format-underline = #0a6cf5 297 - ;label = %date% %time% 298 - 299 - [module/pulseaudio] 300 - type = internal/pulseaudio 301 - 302 - format-volume = <label-volume> <bar-volume> 303 - label-volume = VOL %percentage%% 304 - label-volume-foreground = ${root.foreground} 305 - 306 - label-muted = 🔇 muted 307 - label-muted-foreground = #666 308 - 309 - bar-volume-width = 10 310 - bar-volume-foreground-0 = #55aa55 311 - bar-volume-foreground-1 = #55aa55 312 - bar-volume-foreground-2 = #55aa55 313 - bar-volume-foreground-3 = #55aa55 314 - bar-volume-foreground-4 = #55aa55 315 - bar-volume-foreground-5 = #f5a70a 316 - bar-volume-foreground-6 = #ff5555 317 - bar-volume-gradient = false 318 - bar-volume-indicator = | 319 - bar-volume-indicator-font = 2 320 - bar-volume-fill = ─ 321 - bar-volume-fill-font = 2 322 - bar-volume-empty = ─ 323 - bar-volume-empty-font = 2 324 - bar-volume-empty-foreground = ${colors.foreground-alt} 325 - 326 - [module/alsa] 327 - type = internal/alsa 328 - 329 - format-volume = <label-volume> <bar-volume> 330 - label-volume = VOL 331 - label-volume-foreground = ${root.foreground} 332 - 333 - format-muted-prefix = " " 334 - format-muted-foreground = ${colors.foreground-alt} 335 - label-muted = sound muted 336 - 337 - bar-volume-width = 10 338 - bar-volume-foreground-0 = #55aa55 339 - bar-volume-foreground-1 = #55aa55 340 - bar-volume-foreground-2 = #55aa55 341 - bar-volume-foreground-3 = #55aa55 342 - bar-volume-foreground-4 = #55aa55 343 - bar-volume-foreground-5 = #f5a70a 344 - bar-volume-foreground-6 = #ff5555 345 - bar-volume-gradient = false 346 - bar-volume-indicator = | 347 - bar-volume-indicator-font = 2 348 - bar-volume-fill = ─ 349 - bar-volume-fill-font = 2 350 - bar-volume-empty = ─ 351 - bar-volume-empty-font = 2 352 - bar-volume-empty-foreground = ${colors.foreground-alt} 353 - 354 - [module/battery] 355 - type = internal/battery 356 - battery = BAT0 357 - adapter = AC 358 - full-at = 98 359 - 360 - format-charging = <animation-charging> <label-charging> 361 - format-charging-underline = #ffb52a 362 - 363 - format-discharging = <animation-discharging> <label-discharging> 364 - format-discharging-underline = ${self.format-charging-underline} 365 - 366 - format-full-prefix = " " 367 - format-full-prefix-foreground = ${colors.foreground-alt} 368 - format-full-underline = ${self.format-charging-underline} 369 - 370 - ramp-capacity-0 =  371 - ramp-capacity-1 =  372 - ramp-capacity-2 =  373 - ramp-capacity-foreground = ${colors.foreground-alt} 374 - 375 - animation-charging-0 =  376 - animation-charging-1 =  377 - animation-charging-2 =  378 - animation-charging-foreground = ${colors.foreground-alt} 379 - animation-charging-framerate = 750 380 - 381 - animation-discharging-0 =  382 - animation-discharging-1 =  383 - animation-discharging-2 =  384 - animation-discharging-foreground = ${colors.foreground-alt} 385 - animation-discharging-framerate = 750 386 - 387 - [module/temperature] 388 - type = internal/temperature 389 - thermal-zone = 0 390 - warn-temperature = 60 391 - 392 - format = <ramp> <label> 393 - format-underline = #f50a4d 394 - format-warn = <ramp> <label-warn> 395 - format-warn-underline = ${self.format-underline} 396 - 397 - label = %temperature-c% 398 - label-warn = %temperature-c% 399 - label-warn-foreground = ${colors.secondary} 400 - 401 - ramp-0 =  402 - ramp-1 =  403 - ramp-2 =  404 - ramp-foreground = ${colors.foreground-alt} 405 - 406 - [module/powermenu] 407 - type = custom/menu 408 - 409 - expand-right = true 410 - 411 - format-spacing = 1 412 - 413 - label-open =  414 - label-open-foreground = ${colors.secondary} 415 - label-close =  cancel 416 - label-close-foreground = ${colors.secondary} 417 - label-separator = | 418 - label-separator-foreground = ${colors.foreground-alt} 419 - 420 - menu-0-0 = reboot 421 - menu-0-0-exec = menu-open-1 422 - menu-0-1 = power off 423 - menu-0-1-exec = menu-open-2 424 - 425 - menu-1-0 = cancel 426 - menu-1-0-exec = menu-open-0 427 - menu-1-1 = reboot 428 - menu-1-1-exec = sudo reboot 429 - 430 - menu-2-0 = power off 431 - menu-2-0-exec = sudo poweroff 432 - menu-2-1 = cancel 433 - menu-2-1-exec = menu-open-0 434 - 435 - [settings] 436 - screenchange-reload = true 437 - ;compositing-background = xor 438 - ;compositing-background = screen 439 - ;compositing-foreground = source 440 - ;compositing-border = over 441 - ;pseudo-transparency = false 442 - 443 - ;[global/wm] 444 - ;margin-top = 5 445 - ;margin-bottom = 5 446 - 447 - ; vim:ft=dosini
-3
theme/theme/sizes.liquid
··· 1 - {% for workspace in workspaces %} 2 - {{workspace.w}} {{workspace.x}} {{workspace.y}} 3 - {% endfor %}
-25
theme/theme/template.liquid
··· 1 - {% for tag in workspace.tags %} 2 - {% if tag.mine %} 3 - %{A1:$SCRIPTPATH/change_to_tag {{workspace.index}} {{tag.index}}:} 4 - %{F#000000}%{B#FFB52A} {{tag.name}} %{B-}%{F-} 5 - %{A} 6 - {% elsif tag.urgent %} 7 - %{A1:$SCRIPTPATH/change_to_tag {{workspace.index}} {{tag.index}}:} 8 - %{B#FF0000}%{F#000000} {{tag.name}} %{F-}%{B-} 9 - %{A} 10 - {% elsif tag.visible %} 11 - %{A1:$SCRIPTPATH/change_to_tag {{workspace.index}} {{tag.index}}:} 12 - %{F#000000}%{B#FFFFFF} {{tag.name}} %{B-}%{F-} 13 - %{A} 14 - {% elsif tag.busy %} 15 - %{A1:$SCRIPTPATH/change_to_tag {{workspace.index}} {{tag.index}}:} 16 - %{F#FFB52A} {{tag.name}} %{F-} 17 - %{A} 18 - {% else %} 19 - %{A1:$SCRIPTPATH/change_to_tag {{workspace.index}} {{tag.index}}:} 20 - %{F#FFFFFF} {{tag.name}} %{F-} 21 - %{A} 22 - {% endif %} 23 - {% endfor %} 24 - %{c} 25 - {{ window_title }}
-7
theme/theme/theme.ron
··· 1 - ( 2 - border_width: 6, 3 - margin: 12, 4 - default_border_color: "#1f1f28", 5 - floating_border_color: "#7e9cd8", 6 - focused_border_color: "#dcd7ba", 7 - )
-38
theme/theme/up
··· 1 - #!/usr/bin/env bash 2 - export SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )" 3 - 4 - # Down the last running theme 5 - if [ -f "/tmp/leftwm-theme-down" ]; then 6 - /tmp/leftwm-theme-down 7 - rm /tmp/leftwm-theme-down 8 - fi 9 - ln -s $SCRIPTPATH/down /tmp/leftwm-theme-down 10 - 11 - 12 - # Boot picom or compton if it exists 13 - if [ -x "$(command -v picom)" ]; then 14 - picom --backend xrender &> /dev/null & 15 - elif [ -x "$(command -v compton)" ]; then 16 - compton &> /dev/null & 17 - fi 18 - 19 - # Set the theme.toml config 20 - leftwm-command "LoadTheme $SCRIPTPATH/theme.ron" 21 - 22 - # Set background 23 - if [ -x "$(command -v feh)" ]; then 24 - feh --bg-scale $SCRIPTPATH/background.jpg 25 - fi 26 - 27 - # Conky 28 - #~/.config/conky/start-conky.sh 29 - 30 - index=0 31 - monitor="$(polybar -m | grep +0+0 | sed s/:.*// | tac)" 32 - leftwm-state -q -n -t $SCRIPTPATH/sizes.liquid | sed -r '/^\s*$/d' | while read -r width x y 33 - do 34 - barname="mainbar$index" 35 - monitor=$monitor offsetx=$x width=$width polybar -q main -c $SCRIPTPATH/forest/config.ini &> /dev/null & 36 - let index=index+1 37 - done 38 -