dotfiles/README.org
Sravan Balaji d6f6bc0c36 AUR SSH Host, Submodule Updates, and Manga Config & Backups
- Update `doom-emacs` submodule
- Add PKGBUILD mode to DOOM Emacs config
- Add mangal configuration to dotfiles
- Add `Manga` folder to rsync backup scripts
- Add SSH Host for AUR
2022-08-09 11:04:21 -04:00

242 KiB
Raw Blame History

Personal Dotfiles

Installation

See Acknowledgements for tutorial source.

Clone dotfiles into a .dotfiles folder in home directory.

git clone <git-repo-url> $HOME/.dotfiles

Pull and update submodules.

git submodule update --init --recursive --remote

Use GNU Stow to create symlinks.

Dotfiles Configuration

Git Submodules

[submodule ".vim/pack/themes/start/dracula"]
	path = .vim/pack/themes/start/dracula
	url = git@github.com:dracula/vim.git
	branch = master
[submodule ".themes/dracula-blender"]
	path = .themes/dracula-blender
	url = git@github.com:dracula/blender.git
	branch = master
[submodule ".themes/dracula-freecad"]
	path = .themes/dracula-freecad
	url = git@github.com:dracula/freecad.git
	branch = master
[submodule ".themes/dracula-gnome-terminal"]
	path = .themes/dracula-gnome-terminal
	url = git@github.com:dracula/gnome-terminal.git
	branch = master
[submodule ".themes/dracula-xournalpp"]
	path = .themes/dracula-xournalpp
	url = git@github.com:dracula/xournalpp.git
	branch = master
[submodule ".themes/dracula-steam"]
	path = .themes/dracula-steam
	url = git@github.com:dracula/steam.git
	branch = master
[submodule ".themes/dracula-gtk"]
	path = .themes/dracula-gtk
	url = git@github.com:dracula/gtk.git
	branch = master
[submodule ".themes/dracula-fish"]
	path = .themes/dracula-fish
	url = git@github.com:dracula/fish.git
	branch = master
[submodule ".themes/dracula-kitty"]
	path = .themes/dracula-kitty
	url = git@github.com:dracula/kitty.git
	branch = master
[submodule ".themes/dracula-libreoffice"]
	path = .themes/dracula-libreoffice
	url = git@github.com:dracula/libreoffice.git
	branch = master
[submodule ".themes/dracula-tty"]
	path = .themes/dracula-tty
	url = git@github.com:dracula/tty.git
	branch = master
[submodule ".themes/dracula-latex"]
	path = .themes/dracula-latex
	url = git@github.com:dracula/latex.git
	branch = master
[submodule ".themes/dracula-matplotlib"]
	path = .themes/dracula-matplotlib
	url = git@github.com:dracula/matplotlib.git
	branch = master
[submodule ".themes/dracula-matlab"]
	path = .themes/dracula-matlab
	url = git@github.com:dracula/matlab.git
	branch = master
[submodule ".xmonad"]
	path = .xmonad
	url = git@github.com:balajsra/xmonad.git
	branch = master
[submodule ".themes/dracula-qbittorrent"]
	path = .themes/dracula-qbittorrent
	url = git@github.com:dracula/qbittorrent.git
	branch = master
[submodule ".themes/dracula-vortex"]
	path = .themes/dracula-vortex
	url = git@github.com:dracula/vortex-mod-manager.git
	branch = main
[submodule ".config/dwm-flexipatch"]
	path = .config/dwm-flexipatch
	url = git@github.com:balajsra/dwm-flexipatch.git
	branch = master
[submodule ".config/emacs"]
	path = .config/emacs
	url = git@github.com:plexus/chemacs2.git
	branch = main
[submodule ".config/personal-emacs"]
	path = .config/personal-emacs
	url = git@github.com:balajsra/emacs.git
	branch = main
[submodule ".config/doom-emacs"]
	path = .config/doom-emacs
	url = git@github.com:hlissner/doom-emacs.git
	branch = master
[submodule ".config/doom-emacs-config"]
	path = .config/doom-emacs-config
	url = git@github.com:balajsra/doom-emacs-config.git
	branch = master
[submodule ".config/zathura"]
	path = .config/zathura
	url = git@github.com:dracula/zathura.git
	branch = master
[submodule ".themes/matlab-schemes"]
	path = .themes/matlab-schemes
	url = git@github.com:scottclowe/matlab-schemes.git
	branch = master

Ignoring files and directories

GNU Stow Ignore

Things to ignore when stowing dotfiles on system.

\.git
\.gitmodules
\.gitignore
\.config/fish/fish_variables
\.config/qt5ct/qt5ct\.conf
LICENSE
^/.*\.org

Git Ignore

Things to ignore in dotfiles git repo.

.config/fish/fish_variables
.config/qt5ct/qt5ct.conf

.config/xournalpp/
!.config/xournalpp/toolbar.ini

.config/autorandr/
!.config/autorandr/postswitch

.themes/dracula-pro

Create Symbolic Links with GNU Stow

cd $HOME/.dotfiles/
stow -v .

Remove Symbolic Links with GNU Stow

cd $HOME/.dotfiles/
stow -v -D .

Git

# Sravan Balaji's Git Configuration
# Based on: https://gist.github.com/tdd/470582
[user]
    email = balajsra@umich.edu
    name = Sravan Balaji
[color]
    # Enable colors in color-supporting terminals
    ui = auto
[pull]
        rebase = true
[alias]
    # List available aliases
    aliases = !git config --get-regexp alias | sed -re 's/alias\\.(\\S*)\\s(.*)$/\\1 = \\2/g'
    # Command shortcuts
    ci = commit
    co = checkout
    st = status
    # Display tree-like log, because default log is a pain…
    lg = log --graph --date=relative --pretty=tformat:'%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%an %ad)%Creset'
    # Useful when you have to update your last commit
    # with staged files without editing the commit message.
    oops = commit --amend --no-edit
    # Ensure that force-pushing won't lose someone else's work (only mine).
    push-with-lease = push --force-with-lease
    # Rebase wont trigger hooks on each "replayed" commit.
    # This is an ugly hack that will replay each commit during rebase with the
    # standard `commit` command which will trigger hooks.
    rebase-with-hooks = rebase -x 'git reset --soft HEAD~1 && git commit -C HEAD@{1}'
    # List local commits that were not pushed to remote repository
    review-local = "!git lg @{push}.."
    # Edit last commit message
    reword = commit --amend
    # Undo last commit but keep changed files in stage
    uncommit = reset --soft HEAD~1
    # Remove file(s) from Git but not from disk
    untrack = rm --cache --
[core]
    # Emacs
    editor = "emacs"
    # Don't consider trailing space change as a cause for merge conflicts
    whitespace = -trailing-space
[diff]
    # Use better, descriptive initials (c, i, w) instead of a/b.
    mnemonicPrefix = true
    # Show renames/moves as such
    renames = true
    # When using --word-diff, assume --word-diff-regex=.
    wordRegex = .
    # Display submodule-related information (commit listings)
    submodule = log
[fetch]
    # Auto-fetch submodule changes (sadly, won't auto-update)
    recurseSubmodules = on-demand
[grep]
    break = true
    heading = true
    lineNumber = true
    # Consider most regexes to be ERE
    extendedRegexp = true
[log]
    # Use abbrev SHAs whenever possible/relevant instead of full 40 chars
    abbrevCommit = true
    # Automatically --follow when given a single path
    follow = true
    # Disable decorate for reflog
    # (because there is no dedicated `reflog` section available)
    decorate = false
[status]
    # Display submodule rev change summaries in status
    submoduleSummary = true
    # Recursively traverse untracked directories to display all contents
    showUntrackedFiles = all

Notifications

Dunst Notification Daemon

Global

[global]
    ### Display ###

    # Which monitor should the notifications be displayed on.
    monitor = 0

    # Display notification on focused monitor.  Possible modes are:
    #   mouse: follow mouse pointer
    #   keyboard: follow window with keyboard focus
    #   none: don't follow anything
    #
    # "keyboard" needs a window manager that exports the
    # _NET_ACTIVE_WINDOW property.
    # This should be the case for almost all modern window managers.
    #
    # If this option is set to mouse or keyboard, the monitor option
    # will be ignored.
    follow = keyboard

    # The geometry of the window:
    #   [{width}]x{height}[+/-{x}+/-{y}]
    # The geometry of the message window.
    # The height is measured in number of notifications everything else
    # in pixels.  If the width is omitted but the height is given
    # ("-geometry x2"), the message window expands over the whole screen
    # (dmenu-like).  If width is 0, the window expands to the longest
    # message displayed.  A positive x is measured from the left, a
    # negative from the right side of the screen.  Y is measured from
    # the top and down respectively.
    # The width can be negative.  In this case the actual width is the
    # screen width minus the width defined in within the geometry option.
    geometry = "0x0-10+40"

    # Show how many messages are currently hidden (because of geometry).
    indicate_hidden = yes

    # Shrink window if it's smaller than the width.  Will be ignored if
    # width is 0.
    shrink = no

    # The transparency of the window.  Range: [0; 100].
    # This option will only work if a compositing window manager is
    # present (e.g. xcompmgr, compiz, etc.).
    transparency = 15

    # The height of the entire notification.  If the height is smaller
    # than the font height and padding combined, it will be raised
    # to the font height and padding.
    notification_height = 0

    # Draw a line of "separator_height" pixel height between two
    # notifications.
    # Set to 0 to disable.
    separator_height = 1

    # Padding between text and separator.
    padding = 8

    # Horizontal padding.
    horizontal_padding = 10

    # Defines width in pixels of frame around the notification window.
    # Set to 0 to disable.
    frame_width = 2

    # Defines color of the frame around the notification window.
    frame_color = "#aaaaaa"

    # Define a color for the separator.
    # possible values are:
    #  * auto: dunst tries to find a color fitting to the background;
    #  * foreground: use the same color as the foreground;
    #  * frame: use the same color as the frame;
    #  * anything else will be interpreted as a X color.
    separator_color = auto

    # Sort messages by urgency.
    sort = yes

    # Don't remove messages, if the user is idle (no mouse or keyboard input)
    # for longer than idle_threshold seconds.
    # Set to 0 to disable.
    # A client can set the 'transient' hint to bypass this. See the rules
    # section for how to disable this if necessary
    idle_threshold = 120

    ### Text ###

    font = Monospace 10

    # The spacing between lines.  If the height is smaller than the
    # font height, it will get raised to the font height.
    line_height = 0

    # Possible values are:
    # full: Allow a small subset of html markup in notifications:
    #        <b>bold</b>
    #        <i>italic</i>
    #        <s>strikethrough</s>
    #        <u>underline</u>
    #
    #        For a complete reference see
    #        <https://developer.gnome.org/pango/stable/pango-Markup.html>.
    #
    # strip: This setting is provided for compatibility with some broken
    #        clients that send markup even though it's not enabled on the
    #        server. Dunst will try to strip the markup but the parsing is
    #        simplistic so using this option outside of matching rules for
    #        specific applications *IS GREATLY DISCOURAGED*.
    #
    # no:    Disable markup parsing, incoming notifications will be treated as
    #        plain text. Dunst will not advertise that it has the body-markup
    #        capability if this is set as a global setting.
    #
    # It's important to note that markup inside the format option will be parsed
    # regardless of what this is set to.
    markup = full

    # The format of the message.  Possible variables are:
    #   %a  appname
    #   %s  summary
    #   %b  body
    #   %i  iconname (including its path)
    #   %I  iconname (without its path)
    #   %p  progress value if set ([  0%] to [100%]) or nothing
    #   %n  progress value if set without any extra characters
    #   %%  Literal %
    # Markup is allowed
    format = "<b>%s</b> | <i>%a</i> %p\n%b"

    # Alignment of message text.
    # Possible values are "left", "center" and "right".
    alignment = center

    # Vertical alignment of message text and icon.
    # Possible values are "top", "center" and "bottom".
    vertical_alignment = center

    # Show age of message if message is older than show_age_threshold
    # seconds.
    # Set to -1 to disable.
    show_age_threshold = 60

    # Split notifications into multiple lines if they don't fit into
    # geometry.
    word_wrap = yes

    # When word_wrap is set to no, specify where to make an ellipsis in long lines.
    # Possible values are "start", "middle" and "end".
    ellipsize = middle

    # Ignore newlines '\n' in notifications.
    ignore_newline = no

    # Stack together notifications with the same content
    stack_duplicates = true

    # Hide the count of stacked notifications with the same content
    hide_duplicate_count = false

    # Display indicators for URLs (U) and actions (A).
    show_indicators = yes

    ### Icons ###

    # Align icons left/right/off
    icon_position = left

    # Scale small icons up to this size, set to 0 to disable. Helpful
    # for e.g. small files or high-dpi screens. In case of conflict,
    # max_icon_size takes precedence over this.
    min_icon_size = 0

    # Scale larger icons down to this size, set to 0 to disable
    max_icon_size = 96

    # Paths to default icons.
    icon_path = /usr/share/icons/Papirus-Dark/16x16/status/:/usr/share/icons/Papirus-Dark/16x16/devices/:/usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/

    ### History ###

    # Should a notification popped up from history be sticky or timeout
    # as if it would normally do.
    sticky_history = yes

    # Maximum amount of notifications kept in history
    history_length = 20

    ### Misc/Advanced ###

    # dmenu path.
    dmenu = /usr/bin/rofi -dmenu -i -p dunst:

    # Browser for opening urls in context menu.
    browser = /usr/bin/vivaldi-stable

    # Always run rule-defined scripts, even if the notification is suppressed
    always_run_script = true

    # Define the title of the windows spawned by dunst
    title = Dunst

    # Define the class of the windows spawned by dunst
    class = Dunst

    # Print a notification on startup.
    # This is mainly for error detection, since dbus (re-)starts dunst
    # automatically after a crash.
    startup_notification = true

    # Manage dunst's desire for talking
    # Can be one of the following values:
    #  crit: Critical features. Dunst aborts
    #  warn: Only non-fatal warnings
    #  mesg: Important Messages
    #  info: all unimportant stuff
    # debug: all less than unimportant stuff
    verbosity = mesg

    # Define the corner radius of the notification window
    # in pixel size. If the radius is 0, you have no rounded
    # corners.
    # The radius will be automatically lowered if it exceeds half of the
    # notification height to avoid clipping text and/or icons.
    corner_radius = 10

    # Ignore the dbus closeNotification message.
    # Useful to enforce the timeout set by dunst configuration. Without this
    # parameter, an application may close the notification sent before the 
    # user defined timeout.
    ignore_dbusclose = false

    ### Legacy

    # Use the Xinerama extension instead of RandR for multi-monitor support.
    # This setting is provided for compatibility with older nVidia drivers that
    # do not support RandR and using it on systems that support RandR is highly
    # discouraged.
    #
    # By enabling this setting dunst will not be able to detect when a monitor
    # is connected or disconnected which might break follow mode if the screen
    # layout changes.
    force_xinerama = false

    ### mouse

    # Defines list of actions for each mouse event
    # Possible values are:
    # * none: Don't do anything.
    # * do_action: If the notification has exactly one action, or one is marked as default,
    #              invoke it. If there are multiple and no default, open the context menu.
    # * close_current: Close current notification.
    # * close_all: Close all notifications.
    # These values can be strung together for each mouse event, and
    # will be executed in sequence.
    mouse_left_click = close_current
    mouse_middle_click = close_all
    mouse_right_click = do_action, close_current

Experimental

# Experimental features that may or may not work correctly. Do not expect them
# to have a consistent behaviour across releases.
[experimental]
    # Calculate the dpi to use on a per-monitor basis.
    # If this setting is enabled the Xft.dpi value will be ignored and instead
    # dunst will attempt to calculate an appropriate dpi value for each monitor
    # using the resolution and physical size. This might be useful in setups
    # where there are multiple screens with very different dpi values.
    per_monitor_dpi = false

Shortcuts

[shortcuts]

    # Shortcuts are specified as [modifier+][modifier+]...key
    # Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
    # "mod3" and "mod4" (windows-key).
    # Xev might be helpful to find names for keys.

    # Close notification.
    # close = ctrl+space

    # Close all notifications.
    # close_all = ctrl+shift+space

    # Redisplay last message(s).
    # On the US keyboard layout "grave" is normally above TAB and left
    # of "1". Make sure this key actually exists on your keyboard layout,
    # e.g. check output of 'xmodmap -pke'
    # history = ctrl+grave

    # Context menu.
    # context = ctrl+shift+period

Urgency Low

[urgency_low]
    # IMPORTANT: colors have to be defined in quotation marks.
    # Otherwise the "#" and following would be interpreted as a comment.
    # background = "#222222"
    # foreground = "#888888"
    frame_color = "#bd93f9"
    background = "#282a36"
    foreground = "#f8f8f2"
    timeout = 10
    # Icon for notifications with low urgency, uncomment to enable
    #icon = /path/to/icon

Urgency Normal

[urgency_normal]
    # background = "#285577"
    # foreground = "#ffffff"
    frame_color = "#bd93f9"
    background = "#282a36"
    foreground = "#f8f8f2"
    timeout = 10
    # Icon for notifications with normal urgency, uncomment to enable
    #icon = /path/to/icon

Urgency Critical

[urgency_critical]
    # background = "#900000"
    # foreground = "#ffffff"
    frame_color = "#282a36"
    background = "#ff5555"
    foreground = "#f8f8f2"
    timeout = 0
    # Icon for notifications with critical urgency, uncomment to enable
    #icon = /path/to/icon

Miscellaneous

# Every section that isn't one of the above is interpreted as a rules to
# override settings for certain messages.
#
# Messages can be matched by
#    appname (discouraged, see desktop_entry)
#    body
#    category
#    desktop_entry
#    icon
#    match_transient
#    msg_urgency
#    stack_tag
#    summary
#
# and you can override the
#    background
#    foreground
#    format
#    frame_color
#    fullscreen
#    new_icon
#    set_stack_tag
#    set_transient
#    timeout
#    urgency
#
# Shell-like globbing will get expanded.
#
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
# GLib based applications export their desktop-entry name. In comparison to the appname,
# the desktop-entry won't get localized.
#
# SCRIPTING
# You can specify a script that gets run when the rule matches by
# setting the "script" option.
# The script will be called as follows:
#   script appname summary body icon urgency
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
#
# NOTE: if you don't want a notification to be displayed, set the format
# to "".
# NOTE: It might be helpful to run dunst -print in a terminal in order
# to find fitting options for rules.

# Disable the transient hint so that idle_threshold cannot be bypassed from the
# client
#[transient_disable]
#    match_transient = yes
#    set_transient = no
#
# Make the handling of transient notifications more strict by making them not
# be placed in history.
#[transient_history_ignore]
#    match_transient = yes
#    history_ignore = yes

# fullscreen values
# show: show the notifications, regardless if there is a fullscreen window opened
# delay: displays the new notification, if there is no fullscreen window active
#        If the notification is already drawn, it won't get undrawn.
# pushback: same as delay, but when switching into fullscreen, the notification will get
#           withdrawn from screen again and will get delayed like a new notification
#[fullscreen_delay_everything]
#    fullscreen = delay
#[fullscreen_show_critical]
#    msg_urgency = critical
#    fullscreen = show

#[espeak]
#    summary = "*"
#    script = dunst_espeak.sh

#[script-test]
#    summary = "*script*"
#    script = dunst_test.sh

#[ignore]
#    # This notification will not be displayed
#    summary = "foobar"
#    format = ""

#[history-ignore]
#    # This notification will not be saved in history
#    summary = "foobar"
#    history_ignore = yes

#[skip-display]
#    # This notification will not be displayed, but will be included in the history
#    summary = "foobar"
#    skip_display = yes

#[signed_on]
#    appname = Pidgin
#    summary = "*signed on*"
#    urgency = low
#
#[signed_off]
#    appname = Pidgin
#    summary = *signed off*
#    urgency = low
#
#[says]
#    appname = Pidgin
#    summary = *says*
#    urgency = critical
#
#[twitter]
#    appname = Pidgin
#    summary = *twitter.com*
#    urgency = normal
#
#[stack-volumes]
#    appname = "some_volume_notifiers"
#    set_stack_tag = "volume"
#
# vim: ft=cfg

Control Script

help_menu() {
    echo "Script to interact with dunst. Use only one argument at a time."
    echo "  - Toggle On/Off:         dunst.sh OR dunst.sh --toggle OR dunst.sh -t"
    echo "  - Turn On:               dunst.sh --on"
    echo "  - Turn Off:              dunst.sh --off"
    echo "  - Context Menu:          dunst.sh --context"
    echo "  - Close Notification:    dunst.sh --close"
    echo "  - History Pop:           dunst.sh --history"
    echo "  - Toggle Do Not Disturb: dunst.sh --dnd"
    echo "  - Rofi Menu:             dunst.sh --rofi"
    echo "  - Help:                  dunst.sh --help OR dunst.sh -h"
}

is_running() {
    if pgrep -x dunst >/dev/null; then
        echo 1
    else
        echo 0
    fi
}

rofi_menu() {
    declare -a options=(
        "⏼ Toggle - toggle"
        " Turn On - on"
        " Turn Off - off"
        " Open Actions - context"
        " Close Notification - close"
        " View History - history"
        " Toggle Do Not Disturb - dnd"
        " Back - back"
        " Quit - quit"
    )

    choice=$(printf '%s\n' "${options[@]}" | rofi -dmenu -i)
    option=$(printf '%s\n' "${choice}" | awk '{print $NF}')

    if [[ "$option" == "quit" ]]; then
        killall rofi
    elif [[ "$option" != "back" ]]; then
        main "--$option" && main "--rofi"
    fi
}

main() {
    if [ $# -eq 0 ]; then
        # No arguments
        help_menu
    else
        case $1 in
        --help | -h)
            help_menu
            ;;
        --toggle)
            if [ $(is_running) -eq '1' ]; then
                main --off
            else
                main --on
            fi
            ;;
        --on)
            # Get values from Xresources
            config=~/.config/dunst/dunstrc
            geometry_x=$(xgetres dunst.geometry-x)
            geometry_y=$(xgetres dunst.geometry-y)
            separator_height=$(xgetres dunst.sep-height)
            padding=$(xgetres dunst.padding)
            horizontal_padding=$(xgetres dunst.horiz-padding)
            max_icon_size=$(xgetres dunst.max-icon-size)
            frame_width=$(xgetres dunst.frame-width)
            lb=$(xgetres dunst.low-background)
            lf=$(xgetres dunst.low-foreground)
            lfr=$(xgetres dunst.low-frame)
            nb=$(xgetres dunst.normal-background)
            nf=$(xgetres dunst.normal-foreground)
            nfr=$(xgetres dunst.normal-frame)
            cb=$(xgetres dunst.critical-background)
            cf=$(xgetres dunst.critical-foreground)
            cfr=$(xgetres dunst.critical-frame)

            if [ $(is_running) -eq '1' ]; then
                killall dunst
            fi

            # Start Dunst
            /usr/bin/dunst -config $config \
                           -geometry "0x0-$geometry_x+$geometry_y" \
                           -separator_height "$separator_height" \
                           -padding "$padding" \
                           -horizontal_padding "$horizontal_padding" \
                           -max_icon_size "$max_icon_size" \
                           -frame_width "$frame_width" \
                           -lb "$lb" \
                           -lf "$lf" \
                           -lfr "$lfr" \
                           -nb "$nb" \
                           -nf "$nf" \
                           -nfr "$nfr" \
                           -cb "$cb" \
                           -cf "$cf" \
                           -cfr "$cfr" &

            notify-send "Turning Dunst ON"
            ;;
        --off)
            notify-send "Turning Dunst OFF"

            if [ $(is_running) -eq '1' ]; then
                killall dunst
            fi
            ;;
        --context)
            dunstctl context
            ;;
        --close)
            dunstctl close
            ;;
        --history)
            dunstctl history-pop
            ;;
        --dnd)
            dunstctl set-paused toggle
            ;;
        --rofi)
            rofi_menu
            ;;
        esac
    fi
}

main $@

Deadd Notification Center

Configuration

Notification Center
[notification-center]

Hide the notification center when the mouse leaves the window

hideOnMouseLeave = false

Margin at the top of the notification center in pixels. This can be used to avoid overlap between the notification center and bars such as polybar or i3blocks.

marginTop = 35

Margin at the bottom of the notification center in pixels.

marginBottom = 10

Margin to the right of the notification center in pixels.

marginRight = 10

Width of the notification center in pixels.

width = 700

Monitor on which the notification center will be printed.

monitor = 0

If true, the notification center will open on the screen, on which the mouse is

followMouse = true

(Optional) Command to run at startup. This can be used to setup button states.

# startupCommand = "deadd-notification-center-startup"

If newFirst is set to true, newest notifications appear on the top of the notification center. Else, notifications stack, from top to bottom.

newFirst = true

If useActionIcons is set to true, Action Buttons can show Icon

useActionIcons = true

If true, the transient field in notifications will be ignored and the notification will be persisted in the notification center anyways

ignoreTransient = false

If true, markup (<u>, <i>, <b>, <a>) will be displayed properly

useMarkup = true

If true, html entities (&#38; for &, &#37; for %, etc) will be parsed properly. This is useful for chromium-based apps, which tend to send these in notifications.

parseHtmlEntities = true

If set to true, the parameter noClosedMsg can be set on notifications. If noClosedMsg is set to true on a notification, DBUS NotificationClosed messages will not be send for this notification.

configSendNotiClosedDbusMessage = false

If set to true: If no icon is passed by the app_icon parameter and no application "desktop-entry"-hint is present, the notification center will try to guess the icon from the application name (if present). Default is true.

guessIconFromAppname = true

See section Notification based scripting for an explanation

#match = "title=Abc;body=abc":"app=notify-send"
#modify = "transient=false"
#run = "":"killall notify-send"
Notification Popup
[notification-center-notification-popup]

Default timeout used for notifications in milli-seconds. This can be overwritten with the "-t" option (or "expire-time") of the notify-send command.

notiDefaultTimeout = 10000

Margin above notifications (in pixels). This can be used to avoid overlap between notifications and a bar such as polybar or i3blocks.

distanceTop = 35

Margin on the right of the notification (in pixels).

distanceRight = 10

Vertical distance between 2 notifications (in pixels).

distanceBetween = 5

Width of the notifications.

width = 400

Monitor on which the notification will be printed.

monitor = 0

If true, the notifications will open on the screen, on which the mouse is

followMouse = true

The display size of the application icons in the notification pop-ups and in the notification center

iconSize = 25

The maximal display size of images that are part of notifications for notification pop-ups and in the notification center

maxImageSize = 100

The margin around the top, bottom, left, and right of notification images. Applies to popup notifications and in-center notifications.

imageMarginTop = 10
imageMarginBottom = 10
imageMarginLeft = 0
imageMarginRight = 0

Truncates notification bodies with '…' at the specified number of lines. If -1 is specified, the body text will not be truncated. Applies only to popup notifications

shortenBody = 5

The mouse button for closing a popup. Must be either "mouse1", "mouse2", "mouse3", "mouse4", or "mouse5"

dismissButton = mouse1

The mouse button for opening a popup with the default action. Must be either "mouse1", "mouse2", "mouse3", "mouse4", or "mouse5"

defaultActionButton = mouse3
Buttons

This section describes the configurable buttons within the notification center and NOT the buttons that appear in the notifications

Note: If you want your buttons in the notification center to be squares you should verify that the following equality holds: [notification-center]::width == [buttons]::buttonsPerRow * [buttons]::buttonHeight

  • ([buttons]::buttonsPerRow + 1) * [buttons]::buttonMargin
[buttons]

Numbers of buttons that can be drawn on a row of the notification center.

buttonsPerRow = 3

Height of buttons in the notification center (in pixels).

buttonHeight = 60

Horizontal and vertical margin between each button in the notification center (in pixels).

buttonMargin = 2

Labels written on the buttons in the notification center. Labels should be written between quotes and separated by a colon. For example:

# labels = "VPN":"Bluetooth":"Wifi":"Screensaver"
labels = "Pause Notifications":"Unpause Notifications":"Close Notification Center"

Each label is represented as a clickable button in the notification center. The commands variable below define the commands that should be launched when the user clicks on the associated button. There should be the same number of entries in `commands` and in `labels`

# commands = "sudo vpnToggle":"bluetoothToggle":"wifiToggle":"screensaverToggle"
commands = "/home/sravan/.scripts/deadd.sh --pause":"/home/sravan/.scripts/deadd.sh --unpause":"/home/sravan/.scripts/deadd.sh --toggle-center"

Styling

Notification Center
.blurredBG, #main_window, .blurredBG.low, .blurredBG.normal {
    background: rgba(40, 42, 54, 1.0);
    border: 2px #50fa7b solid;
    border-radius: 10px;
}

.noti-center.time {
    font-size: 32px;
}
Notifications
.title {
    font-weight: bold;
    font-size: 16px;
}

.appname {
    font-size: 12px;
}

.time {
    font-size: 12px;
}

.blurredBG.notification {
    background:  rgba(40, 42, 54, 1.0);
    border: 2pt #50fa7b solid;
    border-radius: 10px;
}

.blurredBG.notification.critical {
    background: rgba(255, 85, 85, 1.0);
    border: 2pt #50fa7b solid;
    border-radius: 10px;
}

.notificationInCenter.critical {
    background: rgba(255, 85, 85, 1.0);
}
Labels
label {
    color: #f8f8f2;
}

label.notification {
    color: #f8f8f2;
}

label.critical {
    color: #f8f8f2;
}
.notificationInCenter label.critical {
    color: #f8f8f2;
}
Buttons
button {
    background: transparent;
    color: #f8f8f2;
    border-radius: 10px;
    border-width: 2px;
    background-position: 0px 0px;
    text-shadow: none;
}

button:hover {
    border-radius: 10px;
    background: rgba(68, 71, 90, 0.8);
    border-width: 2px;
    border-top: transparent;
    border-color: #50fa7b;
    color: #282a36;
}
Custom Buttons
.userbutton {
    background: transparent;
    border-radius: 10px;
    border-width: 2px;
    background-position: 0px 0px;
    text-shadow: none;
}

.userbutton:hover {
    border-radius: 10px;
    background: rgba(68, 71, 90, 1.0);
    border-width: 2px;
    border-top: transparent;
    border-color: #50fa7b;
}

.userbuttonlabel {
    color: #f8f8f2;
    font-size: 12px;
}

.userbuttonlabel:hover {
    color: #f8f8f2;
}

button.buttonState1 {
    background: rgba(20,0,0,0.5);
}

.userbuttonlabel.buttonState1 {
    color: #fff;
}

button.buttonState1:hover {
    background: rgba(20,0,0, 0.4);
}

.userbuttonlabel.buttonState1:hover {
    color: #111;
}

button.buttonState2 {
    background: rgba(255,255,255,0.3);
}

.userbuttonlabel.buttonState2 {
    color: #111;
}

button.buttonState2:hover {
    background: rgba(20,0,0, 0.3);
}

.userbuttonlabel.buttonState2:hover {
    color: #000;
}
Images
image.deadd-noti-center.notification.image {
    margin-left: 10px;
}

Control Script

help_menu() {
    echo "Script to interact with deadd. Use only one argument at a time."
    echo "  - Toggle On/Off:               deadd.sh OR deadd.sh --toggle OR deadd.sh -t"
    echo "  - Turn On:                     deadd.sh --on"
    echo "  - Turn Off:                    deadd.sh --off"
    echo "  - Toggle Notification Center:  deadd.sh --toggle-center"
    echo "  - Pause Popup Notifications:   deadd.sh --pause"
    echo "  - Unpause Popup Notifications: deadd.sh --unpause"
    echo "  - Rofi Menu:                   deadd.sh --rofi"
    echo "  - Help:                        deadd.sh --help OR deadd.sh -h"
}

is_running() {
    if pgrep -x deadd-notificat >/dev/null; then
        echo 1
    else
        echo 0
    fi
}

rofi_menu() {
    declare -a options=(
        "⏼ Toggle - toggle"
        " Turn On - on"
        " Turn Off - off"
        " Toggle Notification Center - toggle-center"
        " Pause Popup Notifications - pause"
        " Unpause Popup Notifications - unpause"
        " Back - back"
        " Quit - quit"
    )

    choice=$(printf '%s\n' "${options[@]}" | rofi -dmenu -i)
    option=$(printf '%s\n' "${choice}" | awk '{print $NF}')

    if [[ "$option" == "quit" ]]; then
        killall rofi
    elif [[ "$option" != "back" ]]; then
        main "--$option" && main "--rofi"
    fi
}

main() {
    if [ $# -eq 0 ]; then
        # No arguments
        help_menu
    else
        case $1 in
        --help | -h)
            help_menu
            ;;
        --toggle)
            if [ $(is_running) -eq '1' ]; then
                main --off
            else
                main --on
            fi
            ;;
        --on)
            if [ $(is_running) -eq '1' ]; then
                killall deadd-notificat
            fi

            /usr/bin/notify-send.py a --hint \
                boolean:deadd-notification-center:true \
                string:type:reloadStyle

            notify-send "Turning Deadd ON"
            ;;
        --off)
            notify-send "Turning Deadd OFF"

            if [ $(is_running) -eq '1' ]; then
                killall deadd-notificat
            fi
            ;;
        --toggle-center)
            kill -s USR1 $(pidof deadd-notification-center)
            ;;
        --pause)
            notify-send "Pausing Notifications"

            /usr/bin/notify-send.py a --hint \
                boolean:deadd-notification-center:true \
                string:type:pausePopups > /dev/null 2>&1
            ;;
        --unpause)
            /usr/bin/notify-send.py a --hint \
                boolean:deadd-notification-center:true \
                string:type:unpausePopups > /dev/null 2>&1

            notify-send "Unpausing Notifications"
            ;;
        --rofi)
            rofi_menu
            ;;
        esac
    fi
}

main $@

Application Launcher

Rofi

Configuration

configuration {
    modi: "window,drun,combi,run,clipboard:greenclip print,ssh";
/*	width: 50;*/
/*	lines: 15;*/
/*	columns: 1;*/
    font: "NotoSans Nerd Font 12";
/*	bw: 1;*/
/*	location: 0;*/
/*	padding: 5;*/
/*	yoffset: 0;*/
/*	xoffset: 0;*/
/*	fixed-num-lines: true;*/
    show-icons: true;
    terminal: "kitty";
/*	ssh-client: "ssh";*/
/*	ssh-command: "{terminal} -e {ssh-client} {host} [-p {port}]";*/
/*	run-command: "{cmd}";*/
/*	run-list-command: "";*/
/*	run-shell-command: "{terminal} -e {cmd}";*/
/*	window-command: "wmctrl -i -R {window}";*/
/*	window-match-fields: "all";*/
    icon-theme: "Papirus-Dark";
/*	drun-match-fields: "name,generic,exec,categories";*/
/*	drun-show-actions: false;*/
/*	drun-display-format: "{name} [<span weight='light' size='small'><i>({generic})</i></span>]";*/
/*	disable-history: false;*/
/*	ignored-prefixes: "";*/
/*	sort: false;*/
/*	sorting-method: ;*/
/*	case-sensitive: false;*/
/*	cycle: true;*/
    sidebar-mode: false;
/*	eh: 1;*/
/*	auto-select: false;*/
/*	parse-hosts: false;*/
/*	parse-known-hosts: true;*/
    combi-modi: "window,drun";
/*	matching: "normal";*/
/*	tokenize: true;*/
/*	m: "-5";*/
/*	line-margin: 2;*/
/*	line-padding: 1;*/
/*	filter: ;*/
/*	separator-style: "dash";*/
/*	hide-scrollbar: false;*/
/*	fullscreen: false;*/
/*	fake-transparency: false;*/
/*	dpi: -1;*/
/*	threads: 0;*/
/*	scrollbar-width: 8;*/
/*	scroll-method: 0;*/
/*	fake-background: "screenshot";*/
/*	window-format: "{w}    {c}   {t}";*/
/*	click-to-exit: true;*/
/*	show-match: true;*/
/*	color-normal: ;*/
/*	color-urgent: ;*/
/*	color-active: ;*/
/*	color-window: ;*/
/*	max-history-size: 25;*/
/*	combi-hide-mode-prefix: false;*/
/*	matching-negate-char: '-' /* unsupported */;*/
/*	cache-dir: ;*/
/*	pid: "/run/user/1000/rofi.pid";*/
    display-window: "window";
/*	display-windowcd: ;*/
    display-run: "execute";
/*	display-ssh: ;*/
    display-drun: "launch";
    display-combi: "combi";
/*	display-keys: ;*/
/*	kb-primary-paste: "Control+V,Shift+Insert";*/
/*	kb-secondary-paste: "Control+v,Insert";*/
/*	kb-clear-line: "Control+w";*/
/*	kb-move-front: "Control+a";*/
/*	kb-move-end: "Control+e";*/
/*	kb-move-word-back: "Alt+b,Control+Left";*/
/*	kb-move-word-forward: "Alt+f,Control+Right";*/
/*	kb-move-char-back: "Left,Control+b";*/
/*	kb-move-char-forward: "Right,Control+f";*/
/*	kb-remove-word-back: "Control+Alt+h,Control+BackSpace";*/
/*	kb-remove-word-forward: "Control+Alt+d";*/
/*	kb-remove-char-forward: "Delete,Control+d";*/
    kb-remove-char-back: "BackSpace";
    kb-remove-to-eol: "Control+Shift+e";
/*	kb-remove-to-sol: "Control+u";*/
    kb-accept-entry: "Control+m,Return,KP_Enter";
/*	kb-accept-custom: "Control+Return";*/
/*	kb-accept-alt: "Shift+Return";*/
/*	kb-delete-entry: "Shift+Delete";*/
    kb-mode-next: "Shift+Right,Control+Tab";
    kb-mode-previous: "Shift+Left,Control+ISO_Left_Tab";
/*	kb-row-left: "Control+Page_Up";*/
/*	kb-row-right: "Control+Page_Down";*/
    kb-row-up: "Up,Control+k,Control+p,ISO_Left_Tab";
    kb-row-down: "Down,Control+j,Control+n";
/*	kb-row-tab: "Tab";*/
/*	kb-page-prev: "Page_Up";*/
/*	kb-page-next: "Page_Down";*/
/*	kb-row-first: "Home,KP_Home";*/
/*	kb-row-last: "End,KP_End";*/
/*	kb-row-select: "Control+space";*/
/*	kb-screenshot: "Alt+S";*/
/*	kb-ellipsize: "Alt+period";*/
/*	kb-toggle-case-sensitivity: "grave,dead_grave";*/
/*	kb-toggle-sort: "Alt+grave";*/
/*	kb-cancel: "Escape,Control+g,Control+bracketleft";*/
/*	kb-custom-1: "Alt+1";*/
/*	kb-custom-2: "Alt+2";*/
/*	kb-custom-3: "Alt+3";*/
/*	kb-custom-4: "Alt+4";*/
/*	kb-custom-5: "Alt+5";*/
/*	kb-custom-6: "Alt+6";*/
/*	kb-custom-7: "Alt+7";*/
/*	kb-custom-8: "Alt+8";*/
/*	kb-custom-9: "Alt+9";*/
/*	kb-custom-10: "Alt+0";*/
/*	kb-custom-11: "Alt+exclam";*/
/*	kb-custom-12: "Alt+at";*/
/*	kb-custom-13: "Alt+numbersign";*/
/*	kb-custom-14: "Alt+dollar";*/
/*	kb-custom-15: "Alt+percent";*/
/*	kb-custom-16: "Alt+dead_circumflex";*/
/*	kb-custom-17: "Alt+ampersand";*/
/*	kb-custom-18: "Alt+asterisk";*/
/*	kb-custom-19: "Alt+parenleft";*/
/*	kb-select-1: "Super+1";*/
/*	kb-select-2: "Super+2";*/
/*	kb-select-3: "Super+3";*/
/*	kb-select-4: "Super+4";*/
/*	kb-select-5: "Super+5";*/
/*	kb-select-6: "Super+6";*/
/*	kb-select-7: "Super+7";*/
/*	kb-select-8: "Super+8";*/
/*	kb-select-9: "Super+9";*/
/*	kb-select-10: "Super+0";*/
/*	ml-row-left: "ScrollLeft";*/
/*	ml-row-right: "ScrollRight";*/
/*	ml-row-up: "ScrollUp";*/
/*	ml-row-down: "ScrollDown";*/
/*	me-select-entry: "MousePrimary";*/
/*	me-accept-entry: "MouseDPrimary";*/
/*	me-accept-custom: "Control+MouseDPrimary";*/
}

@theme "centertab-dracula"

Themes

Centertab Dracula
/**
 ,* ROFI Color theme: centertab-dracula
 ,* User: balajsra
 ,* Copyright: deadguy & Sravan Balaji
 ,*/

,* {
    background-color: #282a36ff;
    text-color:       #f8f8f2ff;
    selbg:            #8be9fdff;
    actbg:            #44475aff;
    urgbg:            #ff5555ff;
    winbg:            #8be9fdff;

    normal-foreground: @text-color;
    normal-background: @background-color;

    selected-normal-foreground: @winbg;
    selected-normal-background: @actbg;

    urgent-foreground: @text-color;
    urgent-background: @background-color;

    selected-urgent-foreground: @background-color;
    selected-urgent-background: @urgbg;

    active-foreground: @background-color;
    active-background: @selbg;

    selected-active-foreground: @winbg;
    selected-active-background: @actbg;

    line-margin: 2;
    line-padding: 2;
    separator-style: "none";
    hide-scrollbar: "true";
    margin: 0;
    padding: 0;
}

window {
    location: south west;
    anchor: south west;
    height: calc(100% - 45px);
    width: 700;
    x-offset: 10;
    y-offset: -10;
    orientation: horizontal;
    children: [mainbox];
    border: 2;
    border-color: @winbg;
    border-radius: 10;
    transparency: "real";
}

mainbox {
    spacing: 0.8em;
    children: [ entry, listview, mode-switcher ];
}

button {
    padding: 5px 2px;
}

button selected {
    background-color: @active-background;
    text-color: @background-color;
}

inputbar {
    padding: 5px;
    spacing: 5px;
}

listview {
    spacing: 0.5em;
    dynamic: false;
    cycle: true;
}

element {
    padding: 10px;
}

element-icon {
    size: 2.00ch;
}

entry {
    expand: false;
    text-color: @normal-foreground;
    vertical-align: 1;
    padding: 5px;
}

element normal.normal {
    background-color: @normal-background;
    text-color: @normal-foreground;
}

element normal.urgent {
    background-color: @urgent-background;
    text-color: @urgent-foreground;
}

element normal.active {
    background-color: @active-background;
    text-color: @active-foreground;
}

element selected.normal {
    background-color: @selected-normal-background;
    text-color: @selected-normal-foreground;
    border: 0 5px solid 0 0;
    border-color: @active-background;
}

element selected.urgent {
    background-color: @selected-urgent-background;
    text-color: @selected-urgent-foreground;
}

element selected.active {
    background-color: @selected-active-background;
    text-color: @selected-active-foreground;
}

element alternate.normal {
    background-color: @normal-background;
    text-color: @normal-foreground;
}

element alternate.urgent {
    background-color: @urgent-background;
    text-color: @urgent-foreground;
}

element alternate.active {
    background-color: @active-background;
    text-color: @active-foreground;
}

element-text {
    background-color: inherit;
    text-color:       inherit;
}

element-icon {
    background-color: inherit;
}
Dmenu Dracula
/**
 ,* ROFI Color theme: dmenu-dracula
 ,* User: balajsra
 ,* Copyright: Sravan Balaji
 ,*/

,* {
        background-color: #282a36;
        text-color: #f8f8f2;
        font: "NotoSans Nerd Font 12";
}

#window {
        anchor: north;
        location: north;
        width: 100%;
        padding: 2px 5px 2px 5px; /* top right bottom left */
        children: [ horibox ];
}

#horibox {
        orientation: horizontal;
        children: [ prompt, entry, listview ];
}

#listview {
        layout: horizontal;
        spacing: 10px;
        lines: 100;
}

#entry {
        expand: false;
        width: 10em;
}

#element {
        padding: 1px 5px 1px 5px; /* top right bottom left */
}
#element selected {
        background-color: #bd93f9;
        text-color: #282a36;
}

#element-text {
    background-color: inherit;
    text-color:       inherit;
}

#element-icon {
    background-color: inherit;
}
Blurry Full Dracula
/*
 ,*
 ,* Author : Aditya Shakya (adi1090x)
 ,* Mail : adi1090x@gmail.com
 ,* Github : @adi1090x
 ,* Reddit : @adi1090x
 ,*
 ,* Dracula Theme Colors : Sravan Balaji (balajsra)
 ,* Mail: balajsra@umich.edu
 ,* Github: @balajsra
 ,*/

configuration {
        drun-display-format: "{name}";
        threads: 0;
        scroll-method: 0;
        disable-history: false;
        fullscreen: false;
        hide-scrollbar: true;
        sidebar-mode: false;
}

,* {
        background: #00000000;
        background-color: #282a36cc;
        background-entry: #44475acc;
        background-alt: #44475acc;
        foreground: #f8f8f2cc;
        foreground-selected: #50fa7bcc;
        urgent: #ff5555cc;
        urgent-selected: #ff5555cc;
}

window {
        transparency: "real";
        background-color: @background;
        text-color: @foreground;
        height: 100%;
        width: 100%;
        location: northwest;
        anchor: northwest;
        x-offset: 0;
        y-offset: 0;
}

prompt {
        enabled: false;
}

inputbar {
        background-color: @background-alt;
        text-color: @foreground;
        expand: false;
        border-radius: 6px;
        margin: 0px 430px 0px 430px;
        padding: 10px 10px 10px 10px;
        position: north;
}

entry {
        background-color: @background;
        text-color: @foreground;
        placeholder-color: @foreground;
        expand: true;
        horizontal-align: 0.5;
        placeholder: "Search applications";
        blink: true;
}

case-indicator {
        background-color: @background;
        text-color: @foreground;
        spacing: 0;
}

listview {
        background-color: @background;
        columns: 7;
        spacing: 4px;
        cycle: false;
        dynamic: true;
        layout: vertical;
}

mainbox {
        background-color: @background-color;
        children: [ inputbar, listview ];
        spacing: 25px;
        padding: 70px 135px 55px 135px;
}

element {
        background-color: @background;
        text-color: @foreground;
        orientation: vertical;
        border-radius: 9px;
        padding: 20px 0px 20px 0px;
}

element-icon {
        background-color: inherit;
        size: 65px;
        border: 0px;
}

element-text {
        background-color: inherit;
        text-color:       inherit;
        expand: true;
        horizontal-align: 0.5;
        vertical-align: 0.5;
        margin: 5px 10px 0px 10px;
}

element normal.urgent,
element alternate.urgent {
        background-color: @urgent;
        text-color: @foreground;
        border-radius: 9px;
}

element normal.active,
element alternate.active {
        background-color: @background-alt;
        text-color: @foreground;
}

element selected {
        background-color: @background-alt;
        text-color: @foreground-selected;
}

element selected.urgent {
        background-color: @urgent-selected;
        text-color: @foreground;
}

element selected.active {
        background-color: @background-alt;
        color: @foreground-selected;
}
Official Dracula Theme
/*Dracula theme based on the Purple official rofi theme*/

,* {
    font: "Jetbrains Mono 12";
    foreground: #f8f8f2;
    background-color: #282a36;
    active-background: #6272a4;
    urgent-background: #ff5555;
    selected-background: @active-background;
    selected-urgent-background: @urgent-background;
    selected-active-background: @active-background;
    separatorcolor: @active-background;
    bordercolor: @active-background;
}

#window {
    background-color: @background;
    border:           1;
    border-radius: 6;
    border-color: @bordercolor;
    padding:          5;
}
#mainbox {
    border:  0;
    padding: 0;
}
#message {
    border:       1px dash 0px 0px ;
    border-color: @separatorcolor;
    padding:      1px ;
}
#textbox {
    text-color: @foreground;
}
#listview {
    fixed-height: 0;
    border:       2px dash 0px 0px ;
    border-color: @bordercolor;
    spacing:      2px ;
    scrollbar:    false;
    padding:      2px 0px 0px ;
}
#element {
    border:  0;
    padding: 1px ;
}
#element.normal.normal {
    background-color: @background;
    text-color:       @foreground;
}
#element.normal.urgent {
    background-color: @urgent-background;
    text-color:       @urgent-foreground;
}
#element.normal.active {
    background-color: @active-background;
    text-color:       @foreground;
}
#element.selected.normal {
    background-color: @selected-background;
    text-color:       @foreground;
}
#element.selected.urgent {
    background-color: @selected-urgent-background;
    text-color:       @foreground;
}
#element.selected.active {
    background-color: @selected-active-background;
    text-color:       @foreground;
}
#element.alternate.normal {
    background-color: @background;
    text-color:       @foreground;
}
#element.alternate.urgent {
    background-color: @urgent-background;
    text-color:       @foreground;
}
#element.alternate.active {
    background-color: @active-background;
    text-color:       @foreground;
}
#element-text {
    background-color: inherit;
    text-color:       inherit;
}
#element-icon {
    background-color: inherit;
}
#scrollbar {
    width:        2px ;
    border:       0;
    handle-width: 8px ;
    padding:      0;
}
#sidebar {
    border:       2px dash 0px 0px ;
    border-color: @separatorcolor;
}
#button.selected {
    background-color: @selected-background;
    text-color:       @foreground;
}
#inputbar {
    spacing:    0;
    text-color: @foreground;
    padding:    1px ;
}
#case-indicator {
    spacing:    0;
    text-color: @foreground;
}
#entry {
    spacing:    0;
    text-color: @foreground;
}
#prompt {
    spacing:    0;
    text-color: @foreground;
}
#inputbar {
    children:   [ prompt,textbox-prompt-colon,entry,case-indicator ];
}
#textbox-prompt-colon {
    expand:     false;
    str:        ":";
    margin:     0px 0.3em 0em 0em ;
    text-color: @foreground;
}
Sidetab Dracula
/**
 ,* ROFI Color theme: sidetab-dracula
 ,* User: balajsra
 ,* Copyright: deadguy & Sravan Balaji
 ,*/

configuration {
        display-drun: "Launch";
        display-run: "Execute";
        display-window: "Window";
        show-icons: true;
        sidebar-mode: true;
        font: "NotoSans Nerd Font 12";
}

,* {
        background-color: #282a36;
        text-color: #f8f8f2;
        selbg: #bd93f9;
        actbg: #44475a;
        urgbg: #ff5555;
        winbg: #50fa7b;

        selected-normal-foreground: @winbg;
        normal-foreground: @text-color;
        selected-normal-background: @actbg;
        normal-background: @background-color;

        selected-urgent-foreground: @background-color;
        urgent-foreground: @text-color;
        selected-urgent-background: @urgbg;
        urgent-background: @background-color;

        selected-active-foreground: @winbg;
        active-foreground: @text-color;
        selected-active-background: @actbg;
        active-background: @selbg;

        line-margin: 2;
        line-padding: 2;
        separator-style: "none";
        hide-scrollbar: "true";
        margin: 0;
        padding: 0;
}

window {
        location: west;
        anchor: west;
        height: 100%;
        width: 25%;
        orientation: horizontal;
        children: [mainbox];
}

mainbox {
        spacing: 0.8em;
        children: [ entry, listview, mode-switcher ];
}

button {
        padding: 5px 2px;
}

button selected {
        background-color: @active-background;
        text-color: @background-color;
}

inputbar {
        padding: 5px;
        spacing: 5px;
}

listview {
        spacing: 0.5em;
        dynamic: false;
        cycle: true;
}

element {
        padding: 10px;
}

entry {
        expand: false;
        text-color: @normal-foreground;
        vertical-align: 1;
        padding: 5px;
}

element normal.normal {
        background-color: @normal-background;
        text-color: @normal-foreground;
}

element normal.urgent {
        background-color: @urgent-background;
        text-color: @urgent-foreground;
}

element normal.active {
        background-color: @active-background;
        text-color: @active-foreground;
}

element selected.normal {
        background-color: @selected-normal-background;
        text-color: @selected-normal-foreground;
        border: 0 5px solid 0 0;
        border-color: @active-background;
}

element selected.urgent {
        background-color: @selected-urgent-background;
        text-color: @selected-urgent-foreground;
}

element selected.active {
        background-color: @selected-active-background;
        text-color: @selected-active-foreground;
}

element alternate.normal {
        background-color: @normal-background;
        text-color: @normal-foreground;
}

element alternate.urgent {
        background-color: @urgent-background;
        text-color: @urgent-foreground;
}

element alternate.active {
        background-color: @active-background;
        text-color: @active-foreground;
}

element-text {
    background-color: inherit;
    text-color:       inherit;
}

element-icon {
    background-color: inherit;
}
Slate Dracula
/**
 ,* ROFI Color theme: slate-dracula
 ,* User: balajsra
 ,* Copyright: Sravan Balaji
 ,*/

,* {
        background-color: #282a36;
        border-color: #bd93f9;
        text-color: #f8f8f2;
        spacing: 0;
        width: 1024px;
        font: "NotoSans Nerd Font 12";
}

inputbar {
        border: 0 0 1px 0; /* top right bottom left */
        children: [prompt, entry];
}

prompt {
        padding: 16px;
        border: 2px 1px 0 2px; /* top right bottom left */
}

textbox {
        background-color: #282a36;
        border: 0 0 1px 0; /* top right bottom left */
        border-color: #bd93f9;
        padding: 8px 16px 8px 16px; /* top right bottom left */
}

entry {
        border: 2px 2px 0px 0; /* top right bottom left */
        padding: 16px;
}

listview {
        cycle: true;
        margin: 0 0 0px 0; /* top right bottom left */
        scrollbar: true;
}

element {
        border: 0 2px 1px 2px; /* top right bottom left */
        padding: 16px;
}

element selected {
        background-color: #44475a;
}

element-text {
    background-color: inherit;
    text-color:       inherit;
}

element-icon {
    background-color: inherit;
}

Greenclip Clipboard Manager

Config {
    maxHistoryLength = 50,
    historyPath = "~/.cache/greenclip.history",
    staticHistoryPath = "~/.cache/greenclip.staticHistory",
    imageCachePath = "/tmp/greenclip/",
    usePrimarySelectionAsInput = False,
    blacklistedApps = [],
    trimSpaceFromSelection = True,
    enableImageSupport = True
}

Display Configuration & Effects

Monitor Setup

Below is an example script for setting up displays using xrandr with desired resolution, position, and refresh rate.

Use xrandr command to see available displays, resolutions, and refresh rates

Flag Description
--output Specify which display to configure
--primary Indicate which display is the primary display
--mode Set display resolution (get available options from xrandr command)
--pos Set display position (0x0 is top left, so 5120x1440 is an x-offset of 5120px to the right and a y-offset of 1440px down)
--rate Set display refresh rate (get available options from xrandr command)
xrandr \
    --output DP-0 --primary --mode 2560x1440 --pos 0x0 --rate 164.96 \
    --output DP-2 --mode 2560x1440 --pos 2560x0 --rate 164.96 \
    --output eDP-1-1 --mode 1920x1080 --pos 5120x1440 --rate 144.00

Autorandr

See autorandr hook scripts for more information.

Post Switch

/usr/bin/nitrogen --restore                 # Restore wallpaper
/home/sravan/.scripts/session.sh --restart  # Restart dwm

Compositor

Picom Jonaburg

Animations
# requires https://github.com/jonaburg/picom

# length of animation in milliseconds (default: 300)
transition-length = 150;

# animation easing on the x-axis (default: 0.1)
transition-pow-x = 0.1;

# animation easing on the y-axis (default: 0.1)
transition-pow-y = 0.1;

#animation easing on the window width (default: 0.1)
transition-pow-w = 0.1;

# animation easing on the window height (default: 0.1)
transition-pow-h = 0.1;

# whether to animate window size changes (default: true)
size-transition = true;

# whether to animate new windows from the center of the screen (default: false)
spawn-center-screen = false;

# whether to animate new windows from their own center (default: true)
spawn-center = true;

# Whether to animate down scaling (some programs handle this poorly) (default: false)
no-scale-down = true;
Corners
# requires: https://github.com/sdhand/compton or https://github.com/jonaburg/picom
corner-radius = 10.0;
rounded-corners-exclude = [
  # "window_type = 'normal'",
  # "class_g = 'awesome'",
  # "class_g = 'URxvt'",
  # "class_g = 'XTerm'",
  # "class_g = 'kitty'",
  # "class_g = 'Alacritty'",
  "class_g = 'Polybar'",
  "class_g = 'Rofi'",
  "class_g = 'deadd-notification-center'",
  # "class_g = 'code-oss'",
  #"class_g = 'TelegramDesktop'",
  # "class_g = 'firefox'",
  # "class_g = 'Thunderbird'"
];
round-borders = 1;
round-borders-exclude = [
  #"class_g = 'TelegramDesktop'",
];
Shadows
# Enabled client-side shadows on windows. Note desktop windows 
# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow, 
# unless explicitly requested using the wintypes option.
#
# shadow = false
shadow = false;

# The blur radius for shadows, in pixels. (defaults to 12)
# shadow-radius = 12
shadow-radius = 7;

# The opacity of shadows. (0.0 - 1.0, defaults to 0.75)
# shadow-opacity = .75

# The left offset for shadows, in pixels. (defaults to -15)
# shadow-offset-x = -15
shadow-offset-x = -7;

# The top offset for shadows, in pixels. (defaults to -15)
# shadow-offset-y = -15
shadow-offset-y = -7;

# Avoid drawing shadows on dock/panel windows. This option is deprecated,
# you should use the *wintypes* option in your config file instead.
#
# no-dock-shadow = false

# Don't draw shadows on drag-and-drop windows. This option is deprecated, 
# you should use the *wintypes* option in your config file instead.
#
# no-dnd-shadow = false

# Red color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-red = 0

# Green color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-green = 0

# Blue color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-blue = 0

# Do not paint shadows on shaped windows. Note shaped windows 
# here means windows setting its shape through X Shape extension. 
# Those using ARGB background is beyond our control. 
# Deprecated, use 
#   shadow-exclude = 'bounding_shaped'
# or 
#   shadow-exclude = 'bounding_shaped && !rounded_corners'
# instead.
#
# shadow-ignore-shaped = ''

# Specify a list of conditions of windows that should have no shadow.
#
# examples:
#   shadow-exclude = "n:e:Notification";
#
# shadow-exclude = []
shadow-exclude = [
  # "name = 'Notification'",
  # "class_g = 'Conky'",
  # "class_g ?= 'Notify-osd'",
  # "class_g = 'Cairo-clock'",
  # "class_g = 'slop'",
  # "class_g = 'Polybar'",
  # "_GTK_FRAME_EXTENTS@:c"
];

# Specify a X geometry that describes the region in which shadow should not
# be painted in, such as a dock window region. Use 
#    shadow-exclude-reg = "x10+0+0"
# for example, if the 10 pixels on the bottom of the screen should not have shadows painted on.
#
# shadow-exclude-reg = "" 

# Crop shadow of a window fully on a particular Xinerama screen to the screen.
# xinerama-shadow-crop = false
Fading
# Fade windows in/out when opening/closing and when opacity changes,
#  unless no-fading-openclose is used.
# fading = false
fading = true;

# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028)
# fade-in-step = 0.028
fade-in-step = 0.03;

# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
# fade-out-step = 0.03
fade-out-step = 0.03;

# The time between steps in fade step, in milliseconds. (> 0, defaults to 10)
# fade-delta = 10

# Specify a list of conditions of windows that should not be faded.
# don't need this, we disable fading for all normal windows with wintypes: {}
fade-exclude = [
  # "class_g = 'slop'"   # maim
]

# Do not fade on window open/close.
# no-fading-openclose = false
no-fading-openclose = true

# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc.
# no-fading-destroyed-argb = false
Transparency / Opacity
# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
inactive-opacity = 1
# inactive-opacity = 0.8;

# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
frame-opacity = 1.0
# frame-opacity = 0.7;

# Default opacity for dropdown menus and popup menus. (0.0 - 1.0, defaults to 1.0)
# menu-opacity = 1.0 
# menu-opacity is depreciated use dropdown-menu and popup-menu instead.

#If using these 2 below change their values in line 530 & 531 aswell
# popup_menu = { opacity = 0.8; }
popup_menu = { opacity = 1.0; }
# dropdown_menu = { opacity = 0.8; }
dropdown_menu = { opacity = 1.0; }

# Let inactive opacity set by -i override the '_NET_WM_OPACITY' values of windows.
# inactive-opacity-override = true
inactive-opacity-override = false;

# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0)
active-opacity = 1.0;

# Dim inactive windows. (0.0 - 1.0, defaults to 0.0)
# inactive-dim = 0.0

# Specify a list of conditions of windows that should always be considered focused.
# focus-exclude = []
focus-exclude = [
  # "class_g = 'Cairo-clock'",
  # "class_g = 'Bar'",                    # lemonbar
  # "class_g = 'slop'"                    # maim
];

# Use fixed inactive dim value, instead of adjusting according to window opacity.
# inactive-dim-fixed = 1.0

# Specify a list of opacity rules, in the format `PERCENT:PATTERN`, 
# like `50:name *= "Firefox"`. picom-trans is recommended over this. 
# Note we don't make any guarantee about possible conflicts with other 
# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows.
# example:
#    opacity-rule = [ "80:class_g = 'URxvt'" ];
#
# opacity-rule = []
opacity-rule = [
  # "80:class_g     = 'Bar'",             # lemonbar
  # "100:class_g    = 'slop'",            # maim
  # "100:class_g    = 'XTerm'",
  # "100:class_g    = 'URxvt'",
  # "100:class_g    = 'kitty'",
  # "100:class_g    = 'Alacritty'",
  # "80:class_g     = 'Polybar'",
  # "100:class_g    = 'code-oss'",
  # "100:class_g    = 'Meld'",
  # "70:class_g     = 'TelegramDesktop'",
  # "90:class_g     = 'Joplin'",
  # "100:class_g    = 'firefox'",
  # "100:class_g    = 'Thunderbird'"
];
Background Blurring
# Parameters for background blurring, see the *BLUR* section for more information.
# blur-method = 
# blur-size = 12
#
# blur-deviation = false

# Blur background of semi-transparent / ARGB windows. 
# Bad in performance, with driver-dependent behavior. 
# The name of the switch may change without prior notifications.
#
# blur-background = true;

# Blur background of windows when the window frame is not opaque. 
# Implies:
#    blur-background 
# Bad in performance, with driver-dependent behavior. The name may change.
#
# blur-background-frame = false;


# Use fixed blur strength rather than adjusting according to window opacity.
# blur-background-fixed = false;


# Specify the blur convolution kernel, with the following format:
# example:
#   blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";
#
# blur-kern = ''
# blur-kern = "3x3box";

blur: {
  # requires: https://github.com/ibhagwan/picom
  method = "kawase";
  #method = "kernel";
  strength = 7;
  # deviation = 1.0;
  # kernel = "11x11gaussian";
  background = false;
  background-frame = false;
  background-fixed = false;
  kern = "3x3box";
}

# Exclude conditions for background blur.
blur-background-exclude = [
  #"window_type = 'dock'",
  #"window_type = 'desktop'",
  #"class_g = 'URxvt'",
  #
  # prevents picom from blurring the background
  # when taking selection screenshot with `main`
  # https://github.com/naelstrof/maim/issues/130
  "class_g = 'peek'",
  "class_g = 'Peek'",
  "class_g = 'slop'",
  "class_g = 'zoom'",
  "_GTK_FRAME_EXTENTS@:c"
];
General Settings
# Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers.
# daemon = false

# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
# `xrender` is the default one.
#
experimental-backends = true;
backend = "glx";
#backend = "xrender";


# Enable/disable VSync.
# vsync = false
vsync = false

# Enable remote control via D-Bus. See the *D-BUS API* section below for more details.
# dbus = false

# Try to detect WM windows (a non-override-redirect window with no
# child that has 'WM_STATE') and mark them as active.
#
# mark-wmwin-focused = false
mark-wmwin-focused = true;

# Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused.
# mark-ovredir-focused = false
mark-ovredir-focused = true;

# Try to detect windows with rounded corners and don't consider them
# shaped windows. The accuracy is not very high, unfortunately.
#
# detect-rounded-corners = false
detect-rounded-corners = true;

# Detect '_NET_WM_OPACITY' on client windows, useful for window managers
# not passing '_NET_WM_OPACITY' of client windows to frame windows.
#
# detect-client-opacity = false
detect-client-opacity = true;

# Specify refresh rate of the screen. If not specified or 0, picom will
# try detecting this with X RandR extension.
#
# refresh-rate = 60
refresh-rate = 0

# Limit picom to repaint at most once every 1 / 'refresh_rate' second to
# boost performance. This should not be used with
#   vsync drm/opengl/opengl-oml
# as they essentially does sw-opti's job already,
# unless you wish to specify a lower refresh rate than the actual value.
#
# sw-opti =

# Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window,
# rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy,
# provided that the WM supports it.
#
# use-ewmh-active-win = false

# Unredirect all windows if a full-screen opaque window is detected,
# to maximize performance for full-screen windows. Known to cause flickering
# when redirecting/unredirecting windows. paint-on-overlay may make the flickering less obvious.
#
unredir-if-possible = false
# unredir-if-possible = true;

# Delay before unredirecting the window, in milliseconds. Defaults to 0.
# unredir-if-possible-delay = 0

# Conditions of windows that shouldn't be considered full-screen for unredirecting screen.
# unredir-if-possible-exclude = []
# unredir-if-possible-exclude = [
#     "class_g = 'looking-glass-client' && !focused"
# ]

# Use 'WM_TRANSIENT_FOR' to group windows, and consider windows
# in the same group focused at the same time.
#
# detect-transient = false
detect-transient = true

# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same
# group focused at the same time. 'WM_TRANSIENT_FOR' has higher priority if
# detect-transient is enabled, too.
#
# detect-client-leader = false
detect-client-leader = true

# Resize damaged region by a specific number of pixels.
# A positive value enlarges it while a negative one shrinks it.
# If the value is positive, those additional pixels will not be actually painted
# to screen, only used in blur calculation, and such. (Due to technical limitations,
# with use-damage, those pixels will still be incorrectly painted to screen.)
# Primarily used to fix the line corruption issues of blur,
# in which case you should use the blur radius value here
# (e.g. with a 3x3 kernel, you should use `--resize-damage 1`,
# with a 5x5 one you use `--resize-damage 2`, and so on).
# May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly.
#
# resize-damage = 1

# Specify a list of conditions of windows that should be painted with inverted color.
# Resource-hogging, and is not well tested.
#
# invert-color-include = []

# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer.
# Might cause incorrect opacity when rendering transparent content (but never
# practically happened) and may not work with blur-background.
# My tests show a 15% performance boost. Recommended.
#
# glx-no-stencil = false

# GLX backend: Avoid rebinding pixmap on window damage.
# Probably could improve performance on rapid window content changes,
# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.).
# Recommended if it works.
#
# glx-no-rebind-pixmap = false

# Disable the use of damage information.
# This cause the whole screen to be redrawn everytime, instead of the part of the screen
# has actually changed. Potentially degrades the performance, but might fix some artifacts.
# The opposing option is use-damage
#
# no-use-damage = false
#use-damage = true (Causing Weird Black semi opaque rectangles when terminal is opened)
#Changing use-damage to false fixes the problem
use-damage = false

# Use X Sync fence to sync clients' draw calls, to make sure all draw
# calls are finished before picom starts drawing. Needed on nvidia-drivers
# with GLX backend for some users.
#
# xrender-sync-fence = false

# GLX backend: Use specified GLSL fragment shader for rendering window contents.
# See `compton-default-fshader-win.glsl` and `compton-fake-transparency-fshader-win.glsl`
# in the source tree for examples.
#
# glx-fshader-win = ''

# Force all windows to be painted with blending. Useful if you
# have a glx-fshader-win that could turn opaque pixels transparent.
#
# force-win-blend = false

# Do not use EWMH to detect fullscreen windows.
# Reverts to checking if a window is fullscreen based only on its size and coordinates.
#
# no-ewmh-fullscreen = false

# Dimming bright windows so their brightness doesn't exceed this set value.
# Brightness of a window is estimated by averaging all pixels in the window,
# so this could comes with a performance hit.
# Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0)
#
# max-brightness = 1.0

# Make transparent windows clip other windows like non-transparent windows do,
# instead of blending on top of them.
#
# transparent-clipping = false

# Set the log level. Possible values are:
#  "trace", "debug", "info", "warn", "error"
# in increasing level of importance. Case doesn't matter.
# If using the "TRACE" log level, it's better to log into a file
# using *--log-file*, since it can generate a huge stream of logs.
#
# log-level = "debug"
log-level = "info";

# Set the log file.
# If *--log-file* is never specified, logs will be written to stderr.
# Otherwise, logs will to written to the given file, though some of the early
# logs might still be written to the stderr.
# When setting this option from the config file, it is recommended to use an absolute path.
#
# log-file = '/path/to/your/log/file'

# Show all X errors (for debugging)
# show-all-xerrors = false

# Write process ID to a file.
# write-pid-path = '/path/to/your/log/file'

# Window type settings
#
# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
#     "unknown", "desktop", "dock", "toolbar", "menu", "utility",
#     "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
#     "tooltip", "notification", "combo", and "dnd".
#
# Following per window-type options are available: ::
#
#   fade, shadow:::
#     Controls window-type-specific shadow and fade settings.
#
#   opacity:::
#     Controls default opacity of the window type.
#
#   focus:::
#     Controls whether the window of this type is to be always considered focused.
#     (By default, all window types except "normal" and "dialog" has this on.)
#
#   full-shadow:::
#     Controls whether shadow is drawn under the parts of the window that you
#     normally won't be able to see. Useful when the window has parts of it
#     transparent, and you want shadows in those areas.
#
#   redir-ignore:::
#     Controls whether this type of windows should cause screen to become
#     redirected again after been unredirected. If you have unredir-if-possible
#     set, and doesn't want certain window to cause unnecessary screen redirection,
#     you can set this to `true`.
#
wintypes:
{
  normal = { fade = false; shadow = false; }
  tooltip = { fade = true; shadow = true; opacity = 1.0; focus = true; full-shadow = false; };
  dock = { shadow = false; }
  dnd = { shadow = false; }
  # popup_menu = { opacity = 0.8; }
  popup_menu = { opacity = 1.0; }
  # dropdown_menu = { opacity = 0.8; }
  dropdown_menu = { opacity = 1.0; }
};
Control Script
help_menu() {
    echo "Script to interact with picom. Use only one argument at a time."
    echo "  - Toggle On/Off:   picom.sh OR picom.sh --toggle OR picom.sh -t"
    echo "  - Turn On:  picom.sh --on"
    echo "  - Turn Off: picom.sh --off"
    echo "  - Help:     picom.sh --help OR picom.sh -h"
}

is_running() {
    if pgrep -x picom >/dev/null; then
        echo 1
    else
        echo 0
    fi
}

rofi_menu() {
    declare -a options=(
        "⏼ Toggle - toggle"
        " Turn On - on"
        " Turn Off - off"
        " Back - back"
        " Quit - quit"
    )

    choice=$(printf '%s\n' "${options[@]}" | rofi -dmenu -i)
    option=$(printf '%s\n' "${choice}" | awk '{print $NF}')

    if [[ "$option" == "quit" ]]; then
        killall rofi
    elif [[ "$option" != "back" ]]; then
        main "--$option" && main "--rofi"
    fi
}

main() {
    if [ $# -eq 0 ]; then
        # No arguments
        help_menu
    else
        case $1 in
        --help | -h)
            help_menu
            ;;
        --toggle)
            if [ $(is_running) -eq '1' ]; then
                main --off
            else
                main --on
            fi
            ;;
        --on)
            if [ $(is_running) -eq '1' ]; then
                killall picom
            fi

            picom --config /home/sravan/.config/picom/picom.conf -b

            notify-send "Turning Picom ON"
            ;;
        --off)
            if [ $(is_running) -eq '1' ]; then
                killall picom
            fi

            notify-send "Turning Picom OFF"
            ;;
        --rofi)
            rofi_menu
            ;;
        esac
    fi
}

main $@

Night Mode

Redshift

Geoclue Agent Service
[Unit]
Description=redshift needs to get a (geo)clue

[Service]
ExecStart=/usr/lib/geoclue-2.0/demos/agent

[Install]
WantedBy=default.target
Configuration
; Global settings for redshift
[redshift]
; Set the day and night screen temperatures
temp-day=6500
temp-night=3500

; Enable/Disable a smooth transition between day and night
; 0 will cause a direct change from day to night screen temperature.
; 1 will gradually increase or decrease the screen temperature.
transition=1

; Set the screen brightness. Default is 1.0.
;brightness=0.9
; It is also possible to use different settings for day and night
; since version 1.8.
;brightness-day=0.7
;brightness-night=0.4
; Set the screen gamma (for all colors, or each color channel
; individually)
; gamma=0.8
;gamma=0.8:0.7:0.8
; This can also be set individually for day and night since
; version 1.10.
;gamma-day=0.8:0.7:0.8
;gamma-night=0.6

; Set the location-provider: 'geoclue', 'geoclue2', 'manual'
; type 'redshift -l list' to see possible values.
; The location provider settings are in a different section.
location-provider=geoclue2

; Set the adjustment-method: 'randr', 'vidmode'
; type 'redshift -m list' to see all possible values.
; 'randr' is the preferred method, 'vidmode' is an older API.
; but works in some cases when 'randr' does not.
; The adjustment method settings are in a different section.
adjustment-method=randr

; Configuration of the location-provider:
; type 'redshift -l PROVIDER:help' to see the settings.
; ex: 'redshift -l manual:help'
; Keep in mind that longitudes west of Greenwich (e.g. the Americas)
; are negative numbers.
; [manual]
; lat=xxxx
; lon=xxx

; Configuration of the adjustment-method
; type 'redshift -m METHOD:help' to see the settings.
; ex: 'redshift -m randr:help'
; In this example, randr is configured to adjust screen 1.
; Note that the numbering starts from 0, so this is actually the
; second screen. If this option is not specified, Redshift will try
; to adjust _all_ screens.
; [randr]
; screen=1

Lock Screen

Betterlockscreen

Default Options

display_on=0
span_image=false
lock_timeout=300
fx_list=(dim blur dimblur pixel dimpixel color)
dim_level=40
blur_level=1
pixel_scale=10,1000
solid_color=333333
wallpaper_cmd="feh --bg-fill"
# i3lockcolor_bin="i3lock-color" # Manually set command for i3lock-color

Theme Options

loginbox=282a36ff
loginshadow=282a36ff
locktext="Enter password to unlock..."
font="sans-serif"
ringcolor=44475aff
insidecolor=00000000
separatorcolor=00000000
ringvercolor=50fa7bff
insidevercolor=50fa7bff
ringwrongcolor=ff5555ff
insidewrongcolor=ff5555ff
timecolor=f8f8f2ff
time_format="%X"
greetercolor=f8f8f2ff
layoutcolor=f8f8f2ff
keyhlcolor=bd93f9ff
bshlcolor=8be9fdff
verifcolor=50fa7bff
wrongcolor=ff5555ff
modifcolor=ff5555ff
bgcolor=282a36ff

Pre-Lock

prelock() {
    /home/sravan/.scripts/deadd.sh --pause
}

Post-Lock

# custom postlock
postlock() {
    /home/sravan/.scripts/deadd.sh --unpause
}

Terminal & Shell

Prompt

Starship

format = """
[](#44475A)\
$directory\
[](fg:#44475A bg:#6272a4)\
$git_branch\
$git_status\
[](fg:#6272a4 bg:#BD93F9)\
$c\
$elixir\
$elm\
$golang\
$haskell\
$java\
$julia\
$nodejs\
$nim\
$rust\
[](fg:#BD93F9 bg:#FF79C6)\
$docker_context\
[](fg:#FF79C6 bg:#FF5555)\
$cmd_duration\
[](fg:#FF5555)\
\n$character
"""

# Enable/disable the blank line at the start of the prompt
add_newline = false

[character]
format = "$symbol"
success_symbol = "[  ﬌ ](bold green)  "
error_symbol = "[  ﬌ ](bold red)  "

# You can also replace your username with a neat symbol like  to save some space
[username]
show_always = true
style_user = "bg:#44475A"
style_root = "bg:#44475A"
format = '[ ]($style)'

[directory]
style = "bg:#44475A"
format = "[ $path ]($style)"
truncation_length = 4
truncate_to_repo = true
truncation_symbol = "…/"
read_only = ""

# Here is how you can shorten some long paths by text replacement
# similar to mapped_locations in Oh My Posh:
[directory.substitutions]
"~" = " "
".config" = "  "
"config" = "  "
"Config" = "  "
"Calibre_Library" = "  "
"Calibre Library" = "  "
"Desktop" = "  "
"Documents" = "  "
"Finances" = " ﴝ "
"Downloads" = "  "
"Games" = "  "
"PolyMC" = "  "
"Steam" = "  "
"ISOs" = " 﫭 "
"Music" = "  "
"Spotify" = "  "
"Pictures" = "  "
"Projects" = "  "
"Personal" = "  "
"System" = "  "
"Videos" = "  "
"dropbox" = "  "
"google-drive" = "  "
"onedrive" = "  "
"Attachments" = "  "
# Keep in mind that the order matters. For example:
# "Important Documents" = "  "
# will not be replaced, because "Documents" was already substituted before.
# So either put "Important Documents" before "Documents" or use the substituted version:
# "Important  " = "  "

[c]
symbol = " "
style = "bg:#BD93F9"
format = '[[ $symbol ($version) ](bg:#BD93F9)]($style)'

[cmd_duration]
min_time = 0
style = "bg:#FF5555"
format = '[[ 祥 $duration ](bg:#FF5555)]($style)'
show_notifications = true
min_time_to_notify = 5_000

[docker_context]
symbol = " "
style = "bg:#FF79C6"
format = '[[ $symbol $context ](bg:#FF79C6)]($style) $path'

[elixir]
symbol = " "
style = "bg:#BD93F9"
format = '[[ $symbol ($version) ](bg:#BD93F9)]($style)'

[elm]
symbol = " "
style = "bg:#BD93F9"
format = '[[ $symbol ($version) ](bg:#BD93F9)]($style)'

[git_branch]
symbol = ""
style = "bg:#6272a4"
format = '[[ $symbol $branch ](bg:#6272a4)]($style)'

[git_status]
style = "bg:#6272a4"
format = '[[($all_status$ahead_behind )](bg:#6272a4)]($style)'

[golang]
symbol = " "
style = "bg:#BD93F9"
format = '[[ $symbol ($version) ](bg:#BD93F9)]($style)'

[haskell]
symbol = " "
style = "bg:#BD93F9"
format = '[[ $symbol ($version) ](bg:#BD93F9)]($style)'

[java]
symbol = " "
style = "bg:#BD93F9"
format = '[[ $symbol ($version) ](bg:#BD93F9)]($style)'

[julia]
symbol = " "
style = "bg:#BD93F9"
format = '[[ $symbol ($version) ](bg:#BD93F9)]($style)'

[nodejs]
symbol = ""
style = "bg:#BD93F9"
format = '[[ $symbol ($version) ](bg:#BD93F9)]($style)'

[nim]
symbol = " "
style = "bg:#BD93F9"
format = '[[ $symbol ($version) ](bg:#BD93F9)]($style)'

[rust]
symbol = ""
style = "bg:#BD93F9"
format = '[[ $symbol ($version) ](bg:#BD93F9)]($style)'

[time]
disabled = false
time_format = "%X" # Hour:Minute Format
style = "bg:#FFB86C"
format = '[[  $time ](bg:#FFB86C)]($style)'

Neofetch

Main Configuration
# See this wiki page for more info:
# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info
print_info() {
    info title
    info underline

    info "OS" distro
    info "Host" model
    info "Kernel" kernel
    info "Uptime" uptime
    info "Packages" packages
    info "Shell" shell
    # info "Resolution" resolution
    info "DE" de
    info "WM" wm
    info "WM Theme" wm_theme
    info "Theme" theme
    info "Icons" icons
    info "Terminal" term
    info "Terminal Font" term_font
    info "CPU" cpu
    info "GPU" gpu
    # info "GPU Driver" gpu_driver  # Linux/macOS only
    # info "CPU Usage" cpu_usage
    # info "Memory" memory
    # info "Disk" disk
    # info "Battery" battery
    info "Font" font
    # info "Song" song
    # [[ "$player" ]] && prin "Music Player" "$player"
    # info "Local IP" local_ip
    # info "Public IP" public_ip
    # info "Users" users
    # info "Locale" locale  # This only works on glibc systems.
    info cols
}
Title
# Hide/Show Fully qualified domain name.
#
# Default:  'off'
# Values:   'on', 'off'
# Flag:     --title_fqdn
title_fqdn="off"
Kernel
# Shorten the output of the kernel function.
#
# Default:  'on'
# Values:   'on', 'off'
# Flag:     --kernel_shorthand
# Supports: Everything except *BSDs (except PacBSD and PC-BSD)
#
# Example:
# on:  '4.8.9-1-ARCH'
# off: 'Linux 4.8.9-1-ARCH'
kernel_shorthand="on"
Distro
# Shorten the output of the distro function
#
# Default:  'off'
# Values:   'on', 'tiny', 'off'
# Flag:     --distro_shorthand
# Supports: Everything except Windows and Haiku
distro_shorthand="off"

# Show/Hide OS Architecture.
# Show 'x86_64', 'x86' and etc in 'Distro:' output.
#
# Default: 'on'
# Values:  'on', 'off'
# Flag:    --os_arch
#
# Example:
# on:  'Arch Linux x86_64'
# off: 'Arch Linux'
os_arch="on"
Uptime
# Shorten the output of the uptime function
#
# Default: 'on'
# Values:  'on', 'tiny', 'off'
# Flag:    --uptime_shorthand
#
# Example:
# on:   '2 days, 10 hours, 3 mins'
# tiny: '2d 10h 3m'
# off:  '2 days, 10 hours, 3 minutes'
uptime_shorthand="on"
Memory
# Show memory pecentage in output.
#
# Default: 'off'
# Values:  'on', 'off'
# Flag:    --memory_percent
#
# Example:
# on:   '1801MiB / 7881MiB (22%)'
# off:  '1801MiB / 7881MiB'
memory_percent="on"
Packages
# Show/Hide Package Manager names.
#
# Default: 'tiny'
# Values:  'on', 'tiny' 'off'
# Flag:    --package_managers
#
# Example:
# on:   '998 (pacman), 8 (flatpak), 4 (snap)'
# tiny: '908 (pacman, flatpak, snap)'
# off:  '908'
package_managers="on"
Shell
# Show the path to $SHELL
#
# Default: 'off'
# Values:  'on', 'off'
# Flag:    --shell_path
#
# Example:
# on:  '/bin/bash'
# off: 'bash'
shell_path="off"

# Show $SHELL version
#
# Default: 'on'
# Values:  'on', 'off'
# Flag:    --shell_version
#
# Example:
# on:  'bash 4.4.5'
# off: 'bash'
shell_version="on"
CPU
# CPU speed type
#
# Default: 'bios_limit'
# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'.
# Flag:    --speed_type
# Supports: Linux with 'cpufreq'
# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value.
speed_type="bios_limit"

# CPU speed shorthand
#
# Default: 'off'
# Values: 'on', 'off'.
# Flag:    --speed_shorthand
# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz
#
# Example:
# on:    'i7-6500U (4) @ 3.1GHz'
# off:   'i7-6500U (4) @ 3.100GHz'
speed_shorthand="off"

# Enable/Disable CPU brand in output.
#
# Default: 'on'
# Values:  'on', 'off'
# Flag:    --cpu_brand
#
# Example:
# on:   'Intel i7-6500U'
# off:  'i7-6500U (4)'
cpu_brand="on"

# CPU Speed
# Hide/Show CPU speed.
#
# Default: 'on'
# Values:  'on', 'off'
# Flag:    --cpu_speed
#
# Example:
# on:  'Intel i7-6500U (4) @ 3.1GHz'
# off: 'Intel i7-6500U (4)'
cpu_speed="on"

# CPU Cores
# Display CPU cores in output
#
# Default: 'logical'
# Values:  'logical', 'physical', 'off'
# Flag:    --cpu_cores
# Support: 'physical' doesn't work on BSD.
#
# Example:
# logical:  'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores)
# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores)
# off:      'Intel i7-6500U @ 3.1GHz'
cpu_cores="logical"

# CPU Temperature
# Hide/Show CPU temperature.
# Note the temperature is added to the regular CPU function.
#
# Default: 'off'
# Values:  'C', 'F', 'off'
# Flag:    --cpu_temp
# Supports: Linux, BSD
# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable
#       coretemp kernel module. This only supports newer Intel processors.
#
# Example:
# C:   'Intel i7-6500U (4) @ 3.1GHz [27.2°C]'
# F:   'Intel i7-6500U (4) @ 3.1GHz [82.0°F]'
# off: 'Intel i7-6500U (4) @ 3.1GHz'
cpu_temp="F"
GPU
# Enable/Disable GPU Brand
#
# Default: 'on'
# Values:  'on', 'off'
# Flag:    --gpu_brand
#
# Example:
# on:  'AMD HD 7950'
# off: 'HD 7950'
gpu_brand="on"

# Which GPU to display
#
# Default: 'all'
# Values:  'all', 'dedicated', 'integrated'
# Flag:    --gpu_type
# Supports: Linux
#
# Example:
# all:
#   GPU1: AMD HD 7950
#   GPU2: Intel Integrated Graphics
#
# dedicated:
#   GPU1: AMD HD 7950
#
# integrated:
#   GPU1: Intel Integrated Graphics
gpu_type="all"
Resolution
# Display refresh rate next to each monitor
# Default: 'off'
# Values:  'on', 'off'
# Flag:    --refresh_rate
# Supports: Doesn't work on Windows.
#
# Example:
# on:  '1920x1080 @ 60Hz'
# off: '1920x1080'
refresh_rate="on"
Gtk Theme / Icons / Font
# Shorten output of GTK Theme / Icons / Font
#
# Default: 'off'
# Values:  'on', 'off'
# Flag:    --gtk_shorthand
#
# Example:
# on:  'Numix, Adwaita'
# off: 'Numix [GTK2], Adwaita [GTK3]'
gtk_shorthand="off"


# Enable/Disable gtk2 Theme / Icons / Font
#
# Default: 'on'
# Values:  'on', 'off'
# Flag:    --gtk2
#
# Example:
# on:  'Numix [GTK2], Adwaita [GTK3]'
# off: 'Adwaita [GTK3]'
gtk2="on"

# Enable/Disable gtk3 Theme / Icons / Font
#
# Default: 'on'
# Values:  'on', 'off'
# Flag:    --gtk3
#
# Example:
# on:  'Numix [GTK2], Adwaita [GTK3]'
# off: 'Numix [GTK2]'
gtk3="on"
IP Address
# Website to ping for the public IP
#
# Default: 'http://ident.me'
# Values:  'url'
# Flag:    --ip_host
public_ip_host="http://ident.me"

# Public IP timeout.
#
# Default: '2'
# Values:  'int'
# Flag:    --ip_timeout
public_ip_timeout=2
Desktop Environment
# Show Desktop Environment version
#
# Default: 'off'
# Values:  'on', 'off'
# Flag:    --de_version
de_version="on"
Disk
# Which disks to display.
# The values can be any /dev/sdXX, mount point or directory.
# NOTE: By default we only show the disk info for '/'.
#
# Default: '/'
# Values:  '/', '/dev/sdXX', '/path/to/drive'.
# Flag:    --disk_show
#
# Example:
# disk_show=('/' '/dev/sdb1'):
#      'Disk (/): 74G / 118G (66%)'
#      'Disk (/mnt/Videos): 823G / 893G (93%)'
#
# disk_show=('/'):
#      'Disk (/): 74G / 118G (66%)'
#
disk_show=('/')

# Disk subtitle.
# What to append to the Disk subtitle.
#
# Default: 'mount'
# Values:  'mount', 'name', 'dir', 'none'
# Flag:    --disk_subtitle
#
# Example:
# name:   'Disk (/dev/sda1): 74G / 118G (66%)'
#         'Disk (/dev/sdb2): 74G / 118G (66%)'
#
# mount:  'Disk (/): 74G / 118G (66%)'
#         'Disk (/mnt/Local Disk): 74G / 118G (66%)'
#         'Disk (/mnt/Videos): 74G / 118G (66%)'
#
# dir:    'Disk (/): 74G / 118G (66%)'
#         'Disk (Local Disk): 74G / 118G (66%)'
#         'Disk (Videos): 74G / 118G (66%)'
#
# none:   'Disk: 74G / 118G (66%)'
#         'Disk: 74G / 118G (66%)'
#         'Disk: 74G / 118G (66%)'
disk_subtitle="mount"

# Disk percent.
# Show/Hide disk percent.
#
# Default: 'on'
# Values:  'on', 'off'
# Flag:    --disk_percent
#
# Example:
# on:  'Disk (/): 74G / 118G (66%)'
# off: 'Disk (/): 74G / 118G'
disk_percent="on"
Song
# Manually specify a music player.
#
# Default: 'auto'
# Values:  'auto', 'player-name'
# Flag:    --music_player
#
# Available values for 'player-name':
#
# amarok
# audacious
# banshee
# bluemindo
# clementine
# cmus
# deadbeef
# deepin-music
# dragon
# elisa
# exaile
# gnome-music
# gmusicbrowser
# gogglesmm
# guayadeque
# io.elementary.music
# iTunes
# juk
# lollypop
# mocp
# mopidy
# mpd
# muine
# netease-cloud-music
# pogo
# pragha
# qmmp
# quodlibet
# rhythmbox
# sayonara
# smplayer
# spotify
# strawberry
# tomahawk
# vlc
# xmms2d
# xnoise
# yarock
music_player="auto"

# Format to display song information.
#
# Default: '%artist% - %album% - %title%'
# Values:  '%artist%', '%album%', '%title%'
# Flag:    --song_format
#
# Example:
# default: 'Song: Jet - Get Born - Sgt Major'
song_format="%artist% - %album% - %title%"

# Print the Artist, Album and Title on separate lines
#
# Default: 'off'
# Values:  'on', 'off'
# Flag:    --song_shorthand
#
# Example:
# on:  'Artist: The Fratellis'
#      'Album: Costello Music'
#      'Song: Chelsea Dagger'
#
# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger'
song_shorthand="off"

# 'mpc' arguments (specify a host, password etc).
#
# Default:  ''
# Example: mpc_args=(-h HOST -P PASSWORD)
mpc_args=()
Text Colors
# Text Colors
#
# Default:  'distro'
# Values:   'distro', 'num' 'num' 'num' 'num' 'num' 'num'
# Flag:     --colors
#
# Each number represents a different part of the text in
# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info'
#
# Example:
# colors=(distro)      - Text is colored based on Distro colors.
# colors=(4 6 1 8 8 6) - Text is colored in the order above.
colors=(distro)
Text Options
# Toggle bold text
#
# Default:  'on'
# Values:   'on', 'off'
# Flag:     --bold
bold="on"

# Enable/Disable Underline
#
# Default:  'on'
# Values:   'on', 'off'
# Flag:     --underline
underline_enabled="on"

# Underline character
#
# Default:  '-'
# Values:   'string'
# Flag:     --underline_char
underline_char="-"


# Info Separator
# Replace the default separator with the specified string.
#
# Default:  ':'
# Flag:     --separator
#
# Example:
# separator="->":   'Shell-> bash'
# separator=" =":   'WM = dwm'
separator=":"
Color Blocks
# Color block range
# The range of colors to print.
#
# Default:  '0', '15'
# Values:   'num'
# Flag:     --block_range
#
# Example:
#
# Display colors 0-7 in the blocks.  (8 colors)
# neofetch --block_range 0 7
#
# Display colors 0-15 in the blocks. (16 colors)
# neofetch --block_range 0 15
block_range=(0 15)

# Toggle color blocks
#
# Default:  'on'
# Values:   'on', 'off'
# Flag:     --color_blocks
color_blocks="on"

# Color block width in spaces
#
# Default:  '3'
# Values:   'num'
# Flag:     --block_width
block_width=3

# Color block height in lines
#
# Default:  '1'
# Values:   'num'
# Flag:     --block_height
block_height=1

# Color Alignment
#
# Default: 'auto'
# Values: 'auto', 'num'
# Flag: --col_offset
#
# Number specifies how far from the left side of the terminal (in spaces) to
# begin printing the columns, in case you want to e.g. center them under your
# text.
# Example:
# col_offset="auto" - Default behavior of neofetch
# col_offset=7      - Leave 7 spaces then print the colors
col_offset="auto"
Progress Bars
# Bar characters
#
# Default:  '-', '='
# Values:   'string', 'string'
# Flag:     --bar_char
#
# Example:
# neofetch --bar_char 'elapsed' 'total'
# neofetch --bar_char '-' '='
bar_char_elapsed="-"
bar_char_total="="

# Toggle Bar border
#
# Default:  'on'
# Values:   'on', 'off'
# Flag:     --bar_border
bar_border="on"

# Progress bar length in spaces
# Number of chars long to make the progress bars.
#
# Default:  '15'
# Values:   'num'
# Flag:     --bar_length
bar_length=15

# Progress bar colors
# When set to distro, uses your distro's logo colors.
#
# Default:  'distro', 'distro'
# Values:   'distro', 'num'
# Flag:     --bar_colors
#
# Example:
# neofetch --bar_colors 3 4
# neofetch --bar_colors distro 5
bar_color_elapsed="distro"
bar_color_total="distro"

# Info display
# Display a bar with the info.
#
# Default: 'off'
# Values:  'bar', 'infobar', 'barinfo', 'off'
# Flags:   --cpu_display
#          --memory_display
#          --battery_display
#          --disk_display
#
# Example:
# bar:     '[---=======]'
# infobar: 'info [---=======]'
# barinfo: '[---=======] info'
# off:     'info'
cpu_display="off"
memory_display="off"
battery_display="off"
disk_display="off"
Backend Settings
# Image backend.
#
# Default:  'ascii'
# Values:   'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off',
#           'termpix', 'pixterm', 'tycat', 'w3m', 'kitty'
# Flag:     --backend
image_backend="ascii"

# Image Source
#
# Which image or ascii file to display.
#
# Default:  'auto'
# Values:   'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/'
#           'command output (neofetch --ascii "$(fortune | cowsay -W 30)")'
# Flag:     --source
#
# NOTE: 'auto' will pick the best image source for whatever image backend is used.
#       In ascii mode, distro ascii art will be used and in an image mode, your
#       wallpaper will be used.
image_source="auto"
Ascii Options
# Ascii distro
# Which distro's ascii art to display.
#
# Default: 'auto'
# Values:  'auto', 'distro_name'
# Flag:    --ascii_distro
# NOTE: AIX, Alpine, Anarchy, Android, Antergos, antiX, AOSC,
#       Apricity, ArcoLinux, ArchBox, ARCHlabs, ArchStrike,
#       XFerience, ArchMerge, Arch, Artix, Arya, Bedrock, Bitrig,
#       BlackArch, BLAG, BlankOn, BlueLight, bonsai, BSD,
#       BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS,
#       Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover,
#       Condres, Container_Linux, CRUX, Cucumber, Debian, Deepin,
#       DesaOS, Devuan, DracOS, DragonFly, Drauger, Elementary,
#       EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD,
#       FreeMiNT, Frugalware, Funtoo, GalliumOS, Gentoo, Pentoo,
#       gNewSense, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra,
#       Hyperbola, janus, Kali, KaOS, KDE_neon, Kibojoe, Kogaion,
#       Korora, KSLinux, Kubuntu, LEDE, LFS, Linux_Lite,
#       LMDE, Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva,
#       Manjaro, Maui, Mer, Minix, LinuxMint, MX_Linux, Namib,
#       Neptune, NetBSD, Netrunner, Nitrux, NixOS, Nurunner,
#       NuTyX, OBRevenge, OpenBSD, OpenIndiana, OpenMandriva,
#       OpenWrt, osmc, Oracle, PacBSD, Parabola, Pardus, Parrot,
#       Parsix, TrueOS, PCLinuxOS, Peppermint, popos, Porteus,
#       PostMarketOS, Proxmox, Puppy, PureOS, Qubes, Radix, Raspbian,
#       Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan, Regata,
#       Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific, Septor,
#       SharkLinux, Siduction, Slackware, SliTaz, SmartOS, Solus,
#       Source_Mage, Sparky, Star, SteamOS, SunOS, openSUSE_Leap,
#       openSUSE_Tumbleweed, openSUSE, SwagArch, Tails, Trisquel,
#       Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, Ubuntu-Studio, Ubuntu,
#       Void, Obarun, windows10, Windows7, Xubuntu, Zorin, and IRIX
#       have ascii logos
# NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants.
#       Use '{distro name}_old' to use the old logos.
# NOTE: Ubuntu has flavor variants.
#       Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME,
#       Ubuntu-Studio, Ubuntu-Mate  or Ubuntu-Budgie to use the flavors.
# NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu,
#       CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android,
#       Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola,
#       Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS,
#       Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian,
#       postmarketOS, and Void have a smaller logo variant.
#       Use '{distro name}_small' to use the small variants.
ascii_distro="auto"

# Ascii Colors
#
# Default:  'distro'
# Values:   'distro', 'num' 'num' 'num' 'num' 'num' 'num'
# Flag:     --ascii_colors
#
# Example:
# ascii_colors=(distro)      - Ascii is colored based on Distro colors.
# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors.
ascii_colors=(distro)

# Bold ascii logo
# Whether or not to bold the ascii logo.
#
# Default: 'on'
# Values:  'on', 'off'
# Flag:    --ascii_bold
ascii_bold="on"
Image Options
# Image loop
# Setting this to on will make neofetch redraw the image constantly until
# Ctrl+C is pressed. This fixes display issues in some terminal emulators.
#
# Default:  'off'
# Values:   'on', 'off'
# Flag:     --loop
image_loop="off"

# Thumbnail directory
#
# Default: '~/.cache/thumbnails/neofetch'
# Values:  'dir'
thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch"

# Crop mode
#
# Default:  'normal'
# Values:   'normal', 'fit', 'fill'
# Flag:     --crop_mode
#
# See this wiki page to learn about the fit and fill options.
# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F
crop_mode="normal"

# Crop offset
# Note: Only affects 'normal' crop mode.
#
# Default:  'center'
# Values:   'northwest', 'north', 'northeast', 'west', 'center'
#           'east', 'southwest', 'south', 'southeast'
# Flag:     --crop_offset
crop_offset="center"

# Image size
# The image is half the terminal width by default.
#
# Default: 'auto'
# Values:  'auto', '00px', '00%', 'none'
# Flags:   --image_size
#          --size
image_size="auto"

# Gap between image and text
#
# Default: '3'
# Values:  'num', '-num'
# Flag:    --gap
gap=3

# Image offsets
# Only works with the w3m backend.
#
# Default: '0'
# Values:  'px'
# Flags:   --xoffset
#          --yoffset
yoffset=0
xoffset=0

# Image background color
# Only works with the w3m backend.
#
# Default: ''
# Values:  'color', 'blue'
# Flag:    --bg_color
background_color=
Misc Options
# Stdout mode
# Turn off all colors and disables image backend (ASCII/Image).
# Useful for piping into another command.
# Default: 'off'
# Values: 'on', 'off'
stdout="off"

Shell

Bash

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
,*i*) ;;
,*) return ;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color | *-256color) color_prompt=yes ;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm* | rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
,*) ;;

esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
    if [ -f /usr/share/bash-completion/bash_completion ]; then
        . /usr/share/bash-completion/bash_completion
    elif [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
    fi
fi

# ENVIRONMENT VARIABLES
export EDITOR="emacs"
export TERM=xterm-256color
export QT_STYLE_OVERRIDE=kvantum
export XDG_CONFIG_HOME=$HOME/.config

# Greeting
clear
pokemon-colorscripts -r
echo "bash shell"

Zsh

# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:/usr/local/bin:$PATH

# Set $PATH if ~/.local/bin exist
if [ -d "$HOME/.local/bin" ]; then
    export PATH=$HOME/.local/bin:$PATH
fi

eval "$(starship init zsh)"
function set_win_title(){
    echo -ne "\033]0; $USER@$HOST:${PWD/$HOME/~} \007"
}
precmd_functions+=(set_win_title)

## Plugins section: Enable fish style features
# Use syntax highlighting
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

# Use autosuggestion
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh

# Use history substring search
source /usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh

# Use fzf
source /usr/share/fzf/key-bindings.zsh
source /usr/share/fzf/completion.zsh

# Arch Linux command-not-found support, you must have package pkgfile installed
# https://wiki.archlinux.org/index.php/Pkgfile#.22Command_not_found.22_hook
[[ -e /usr/share/doc/pkgfile/command-not-found.zsh ]] && source /usr/share/doc/pkgfile/command-not-found.zsh


## Options section
setopt correct                                                  # Auto correct mistakes
setopt extendedglob                                             # Extended globbing. Allows using regular expressions with *
setopt nocaseglob                                               # Case insensitive globbing
setopt rcexpandparam                                            # Array expension with parameters
setopt nocheckjobs                                              # Don't warn about running processes when exiting
setopt numericglobsort                                          # Sort filenames numerically when it makes sense
setopt nobeep                                                   # No beep
setopt appendhistory                                            # Immediately append history instead of overwriting
setopt histignorealldups                                        # If a new command is a duplicate, remove the older one
setopt autocd                                                   # if only directory path is entered, cd there.
setopt auto_pushd
setopt pushd_ignore_dups
setopt pushdminus

# Completion.
autoload -Uz compinit
compinit
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'       # Case insensitive tab completion
zstyle ':completion:*' rehash true                              # automatically find new executables in path 
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"         # Colored completion (different colors for dirs/files/etc)
zstyle ':completion:*' completer _expand _complete _ignored _approximate
zstyle ':completion:*' menu select=2
zstyle ':completion:*' select-prompt '%SScrolling active: current selection at %p%s'
zstyle ':completion:*:descriptions' format '%U%F{cyan}%d%f%u'

# Speed up completions
zstyle ':completion:*' accept-exact '*(N)'
zstyle ':completion:*' use-cache on
zstyle ':completion:*' cache-path ~/.cache/zcache

# automatically load bash completion functions
autoload -U +X bashcompinit && bashcompinit

HISTFILE=~/.zhistory
HISTSIZE=50000
SAVEHIST=10000


## Keys
# Use emacs key bindings
bindkey -e

# [PageUp] - Up a line of history
if [[ -n "${terminfo[kpp]}" ]]; then
  bindkey -M emacs "${terminfo[kpp]}" up-line-or-history
  bindkey -M viins "${terminfo[kpp]}" up-line-or-history
  bindkey -M vicmd "${terminfo[kpp]}" up-line-or-history
fi
# [PageDown] - Down a line of history
if [[ -n "${terminfo[knp]}" ]]; then
  bindkey -M emacs "${terminfo[knp]}" down-line-or-history
  bindkey -M viins "${terminfo[knp]}" down-line-or-history
  bindkey -M vicmd "${terminfo[knp]}" down-line-or-history
fi

# Start typing + [Up-Arrow] - fuzzy find history forward
if [[ -n "${terminfo[kcuu1]}" ]]; then
  autoload -U up-line-or-beginning-search
  zle -N up-line-or-beginning-search

  bindkey -M emacs "${terminfo[kcuu1]}" up-line-or-beginning-search
  bindkey -M viins "${terminfo[kcuu1]}" up-line-or-beginning-search
  bindkey -M vicmd "${terminfo[kcuu1]}" up-line-or-beginning-search
fi
# Start typing + [Down-Arrow] - fuzzy find history backward
if [[ -n "${terminfo[kcud1]}" ]]; then
  autoload -U down-line-or-beginning-search
  zle -N down-line-or-beginning-search

  bindkey -M emacs "${terminfo[kcud1]}" down-line-or-beginning-search
  bindkey -M viins "${terminfo[kcud1]}" down-line-or-beginning-search
  bindkey -M vicmd "${terminfo[kcud1]}" down-line-or-beginning-search
fi

# [Home] - Go to beginning of line
if [[ -n "${terminfo[khome]}" ]]; then
  bindkey -M emacs "${terminfo[khome]}" beginning-of-line
  bindkey -M viins "${terminfo[khome]}" beginning-of-line
  bindkey -M vicmd "${terminfo[khome]}" beginning-of-line
fi
# [End] - Go to end of line
if [[ -n "${terminfo[kend]}" ]]; then
  bindkey -M emacs "${terminfo[kend]}"  end-of-line
  bindkey -M viins "${terminfo[kend]}"  end-of-line
  bindkey -M vicmd "${terminfo[kend]}"  end-of-line
fi

# [Shift-Tab] - move through the completion menu backwards
if [[ -n "${terminfo[kcbt]}" ]]; then
  bindkey -M emacs "${terminfo[kcbt]}" reverse-menu-complete
  bindkey -M viins "${terminfo[kcbt]}" reverse-menu-complete
  bindkey -M vicmd "${terminfo[kcbt]}" reverse-menu-complete
fi

# [Backspace] - delete backward
bindkey -M emacs '^?' backward-delete-char
bindkey -M viins '^?' backward-delete-char
bindkey -M vicmd '^?' backward-delete-char
# [Delete] - delete forward
if [[ -n "${terminfo[kdch1]}" ]]; then
  bindkey -M emacs "${terminfo[kdch1]}" delete-char
  bindkey -M viins "${terminfo[kdch1]}" delete-char
  bindkey -M vicmd "${terminfo[kdch1]}" delete-char
else
  bindkey -M emacs "^[[3~" delete-char
  bindkey -M viins "^[[3~" delete-char
  bindkey -M vicmd "^[[3~" delete-char

  bindkey -M emacs "^[3;5~" delete-char
  bindkey -M viins "^[3;5~" delete-char
  bindkey -M vicmd "^[3;5~" delete-char
fi

# Common use aliases
alias aup="pamac upgrade --aur"
alias grubup="sudo update-grub"
alias fixpacman="sudo rm /var/lib/pacman/db.lck"
alias tarnow='tar -acf '
alias untar='tar -zxvf '
alias wget='wget -c '
alias psmem='ps auxf | sort -nr -k 4'
alias psmem10='ps auxf | sort -nr -k 4 | head -10'
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
alias ......='cd ../../../../..'
alias dir='dir --color=auto'
alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias hw='hwinfo --short'                                   # Hardware Info
alias gitpkg='pacman -Q | grep -i "\-git" | wc -l'			# List amount of -git packages

# Get fastest mirrors 
alias mirror="sudo reflector -f 30 -l 30 --number 10 --verbose --save /etc/pacman.d/mirrorlist" 
alias mirrord="sudo reflector --latest 50 --number 20 --sort delay --save /etc/pacman.d/mirrorlist" 
alias mirrors="sudo reflector --latest 50 --number 20 --sort score --save /etc/pacman.d/mirrorlist" 
alias mirrora="sudo reflector --latest 50 --number 20 --sort age --save /etc/pacman.d/mirrorlist" 

# Help people new to Arch
alias apt='man pacman'
alias apt-get='man pacman'
alias please='sudo'
alias tb='nc termbin.com 9999'

# Replace yay with paru if installed
[ ! -x /usr/bin/yay ] && [ -x /usr/bin/paru ] && alias yay='paru'

# Set your countries like --country France --country Germany -- or more.
alias upd='sudo reflector --latest 5 --age 2 --fastest 5 --protocol https --sort rate --save /etc/pacman.d/mirrorlist && cat /etc/pacman.d/mirrorlist && sudo pacman -Syu && sudo updatedb'

# Greeting
clear
pokemon-colorscripts -r
echo "zsh shell"

Fish

Greeting
function fish_greeting
    clear
    pokemon-colorscripts -r
    echo "¸.·´¯`·.´¯`·.¸¸.·´¯`·.¸><(((º>"
end
Variables
set -U fish_user_paths $fish_user_paths $HOME/.local/bin/
Aliases
# pacman and paru
alias pacsyu='sudo pacman -Syyu' # update only standard pkgs
alias parusua='paru -Sua --noconfirm' # update only AUR pkgs
alias parusyu='paru -Syu --noconfirm' # update standard pkgs and AUR pkgs
alias unlock='sudo rm /var/lib/pacman/db.lck' # remove pacman lock
alias cleanup='sudo pacman -Rns (pacman -Qtdq)' # remove orphaned packages

# get fastest mirrors
alias mirror="sudo reflector -f 30 -l 30 --number 10 --verbose --save /etc/pacman.d/mirrorlist"
alias mirrord="sudo reflector --latest 50 --number 20 --sort delay --save /etc/pacman.d/mirrorlist"
alias mirrors="sudo reflector --latest 50 --number 20 --sort score --save /etc/pacman.d/mirrorlist"
alias mirrora="sudo reflector --latest 50 --number 20 --sort age --save /etc/pacman.d/mirrorlist"

# Colorize grep output (good for log files)
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'

# confirm before overwriting something
alias cp="cp -i"
alias mv='mv -i'
alias rm='rm -i'

# gpg encryption
# verify signature for isos
alias gpg-check="gpg2 --keyserver-options auto-key-retrieve --verify"
# receive the key of a developer
alias gpg-retrieve="gpg2 --keyserver-options auto-key-retrieve --receive-keys"
TTY
if [ "$TERM" = "linux" ]
    then
    printf %b '\e[40m' '\e[8]' # set default background to color 0 'dracula-bg'
    printf %b '\e[37m' '\e[8]' # set default foreground to color 7 'dracula-fg'
    printf %b '\e]P0282a36' # redefine 'black'          as 'dracula-bg'
    printf %b '\e]P86272a4' # redefine 'bright-black'   as 'dracula-comment'
    printf %b '\e]P1ff5555' # redefine 'red'            as 'dracula-red'
    printf %b '\e]P9ff7777' # redefine 'bright-red'     as '#ff7777'
    printf %b '\e]P250fa7b' # redefine 'green'          as 'dracula-green'
    printf %b '\e]PA70fa9b' # redefine 'bright-green'   as '#70fa9b'
    printf %b '\e]P3f1fa8c' # redefine 'brown'          as 'dracula-yellow'
    printf %b '\e]PBffb86c' # redefine 'bright-brown'   as 'dracula-orange'
    printf %b '\e]P4bd93f9' # redefine 'blue'           as 'dracula-purple'
    printf %b '\e]PCcfa9ff' # redefine 'bright-blue'    as '#cfa9ff'
    printf %b '\e]P5ff79c6' # redefine 'magenta'        as 'dracula-pink'
    printf %b '\e]PDff88e8' # redefine 'bright-magenta' as '#ff88e8'
    printf %b '\e]P68be9fd' # redefine 'cyan'           as 'dracula-cyan'
    printf %b '\e]PE97e2ff' # redefine 'bright-cyan'    as '#97e2ff'
    printf %b '\e]P7f8f8f2' # redefine 'white'          as 'dracula-fg'
    printf %b '\e]PFffffff' # redefine 'bright-white'   as '#ffffff'
    clear
end
Prompt
# Starship Prompt
starship init fish | source
Dracula Theme
# Dracula Color Palette
set -l foreground f8f8f2
set -l selection 44475a
set -l comment 6272a4
set -l red ff5555
set -l orange ffb86c
set -l yellow f1fa8c
set -l green 50fa7b
set -l purple bd93f9
set -l cyan 8be9fd
set -l pink ff79c6

# Syntax Highlighting Colors
set -g fish_color_normal $foreground
set -g fish_color_command $cyan
set -g fish_color_keyword $pink
set -g fish_color_quote $yellow
set -g fish_color_redirection $foreground
set -g fish_color_end $orange
set -g fish_color_error $red
set -g fish_color_param $purple
set -g fish_color_comment $comment
set -g fish_color_selection --background=$selection
set -g fish_color_search_match --background=$selection
set -g fish_color_operator $green
set -g fish_color_escape $pink
set -g fish_color_autosuggestion $comment

# Completion Pager Colors
set -g fish_pager_color_progress $comment
set -g fish_pager_color_prefix $cyan
set -g fish_pager_color_completion $foreground
set -g fish_pager_color_description $comment

Terminal

Kitty

Fonts
#: Fonts {{{

#: kitty has very powerful font management. You can configure
#: individual font faces and even specify special fonts for particular
#: characters.

font_family      Fira Code Regular Nerd Font Complete
bold_font        Fira Code Bold Nerd Font Complete
italic_font      Fira Code Regular Nerd Font Complete
bold_italic_font Fira Code Bold Nerd Font Complete

#: You can specify different fonts for the bold/italic/bold-italic
#: variants. To get a full list of supported fonts use the `kitty
#: list-fonts` command. By default they are derived automatically, by
#: the OSes font system. Setting them manually is useful for font
#: families that have many weight variants like Book, Medium, Thick,
#: etc. For example::

#:     font_family      Operator Mono Book
#:     bold_font        Operator Mono Medium
#:     italic_font      Operator Mono Book Italic
#:     bold_italic_font Operator Mono Medium Italic

font_size 12.0

#: Font size (in pts)

force_ltr no

#: kitty does not support BIDI (bidirectional text), however, for RTL
#: scripts, words are automatically displayed in RTL. That is to say,
#: in an RTL script, the words "HELLO WORLD" display in kitty as
#: "WORLD HELLO", and if you try to select a substring of an RTL-
#: shaped string, you will get the character that would be there had
#: the the string been LTR. For example, assuming the Hebrew word
#: ירושלים, selecting the character that on the screen appears to be ם
#: actually writes into the selection buffer the character י.

#: kitty's default behavior is useful in conjunction with a filter to
#: reverse the word order, however, if you wish to manipulate RTL
#: glyphs, it can be very challenging to work with, so this option is
#: provided to turn it off. Furthermore, this option can be used with
#: the command line program GNU FriBidi
#: <https://github.com/fribidi/fribidi#executable> to get BIDI
#: support, because it will force kitty to always treat the text as
#: LTR, which FriBidi expects for terminals.

adjust_line_height  0
adjust_column_width 0

#: Change the size of each character cell kitty renders. You can use
#: either numbers, which are interpreted as pixels or percentages
#: (number followed by %), which are interpreted as percentages of the
#: unmodified values. You can use negative pixels or percentages less
#: than 100% to reduce sizes (but this might cause rendering
#: artifacts).

# symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols

#: Map the specified unicode codepoints to a particular font. Useful
#: if you need special rendering for some symbols, such as for
#: Powerline. Avoids the need for patched fonts. Each unicode code
#: point is specified in the form U+<code point in hexadecimal>. You
#: can specify multiple code points, separated by commas and ranges
#: separated by hyphens. symbol_map itself can be specified multiple
#: times. Syntax is::

#:     symbol_map codepoints Font Family Name

disable_ligatures never

#: Choose how you want to handle multi-character ligatures. The
#: default is to always render them.  You can tell kitty to not render
#: them when the cursor is over them by using cursor to make editing
#: easier, or have kitty never render them at all by using always, if
#: you don't like them. The ligature strategy can be set per-window
#: either using the kitty remote control facility or by defining
#: shortcuts for it in kitty.conf, for example::

#:     map alt+1 disable_ligatures_in active always
#:     map alt+2 disable_ligatures_in all never
#:     map alt+3 disable_ligatures_in tab cursor

#: Note that this refers to programming ligatures, typically
#: implemented using the calt OpenType feature. For disabling general
#: ligatures, use the font_features setting.

font_features none

#: Choose exactly which OpenType features to enable or disable. This
#: is useful as some fonts might have features worthwhile in a
#: terminal. For example, Fira Code Retina includes a discretionary
#: feature, zero, which in that font changes the appearance of the
#: zero (0), to make it more easily distinguishable from Ø. Fira Code
#: Retina also includes other discretionary features known as
#: Stylistic Sets which have the tags ss01 through ss20.

#: Note that this code is indexed by PostScript name, and not the font
#: family. This allows you to define very precise feature settings;
#: e.g. you can disable a feature in the italic font but not in the
#: regular font.

#: On Linux, these are read from the FontConfig database first and
#: then this, setting is applied, so they can be configured in a
#: single, central place.

#: To get the PostScript name for a font, use kitty + list-fonts
#: --psnames:

#: .. code-block:: sh

#:     $ kitty + list-fonts --psnames | grep Fira
#:     Fira Code
#:     Fira Code Bold (FiraCode-Bold)
#:     Fira Code Light (FiraCode-Light)
#:     Fira Code Medium (FiraCode-Medium)
#:     Fira Code Regular (FiraCode-Regular)
#:     Fira Code Retina (FiraCode-Retina)

#: The part in brackets is the PostScript name.

#: Enable alternate zero and oldstyle numerals::

#:     font_features FiraCode-Retina +zero +onum

#: Enable only alternate zero::

#:     font_features FiraCode-Retina +zero

#: Disable the normal ligatures, but keep the calt feature which (in
#: this font) breaks up monotony::

#:     font_features TT2020StyleB-Regular -liga +calt

#: In conjunction with force_ltr, you may want to disable Arabic
#: shaping entirely, and only look at their isolated forms if they
#: show up in a document. You can do this with e.g.::

#:     font_features UnifontMedium +isol -medi -fina -init

box_drawing_scale 0.001, 1, 1.5, 2

#: Change the sizes of the lines used for the box drawing unicode
#: characters These values are in pts. They will be scaled by the
#: monitor DPI to arrive at a pixel value. There must be four values
#: corresponding to thin, normal, thick, and very thick lines.

#: }}}
Cursor Customization
#: Cursor customization {{{

; cursor #cccccc

#: Default cursor color

; cursor_text_color #111111

#: Choose the color of text under the cursor. If you want it rendered
#: with the background color of the cell underneath instead, use the
#: special keyword: background

cursor_shape beam

#: The cursor shape can be one of (block, beam, underline)

cursor_beam_thickness 1.5

#: Defines the thickness of the beam cursor (in pts)

cursor_underline_thickness 2.0

#: Defines the thickness of the underline cursor (in pts)

cursor_blink_interval -1

#: The interval (in seconds) at which to blink the cursor. Set to zero
#: to disable blinking. Negative values mean use system default. Note
#: that numbers smaller than repaint_delay will be limited to
#: repaint_delay.

cursor_stop_blinking_after 15.0

#: Stop blinking cursor after the specified number of seconds of
#: keyboard inactivity.  Set to zero to never stop blinking.

#: }}}
Scrollback
#: Scrollback {{{

scrollback_lines 2000

#: Number of lines of history to keep in memory for scrolling back.
#: Memory is allocated on demand. Negative numbers are (effectively)
#: infinite scrollback. Note that using very large scrollback is not
#: recommended as it can slow down performance of the terminal and
#: also use large amounts of RAM. Instead, consider using
#: scrollback_pager_history_size.

scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER

#: Program with which to view scrollback in a new window. The
#: scrollback buffer is passed as STDIN to this program. If you change
#: it, make sure the program you use can handle ANSI escape sequences
#: for colors and text formatting. INPUT_LINE_NUMBER in the command
#: line above will be replaced by an integer representing which line
#: should be at the top of the screen. Similarly CURSOR_LINE and
#: CURSOR_COLUMN will be replaced by the current cursor position.

scrollback_pager_history_size 0

#: Separate scrollback history size, used only for browsing the
#: scrollback buffer (in MB). This separate buffer is not available
#: for interactive scrolling but will be piped to the pager program
#: when viewing scrollback buffer in a separate window. The current
#: implementation stores the data in UTF-8, so approximatively 10000
#: lines per megabyte at 100 chars per line, for pure ASCII text,
#: unformatted text. A value of zero or less disables this feature.
#: The maximum allowed size is 4GB.

wheel_scroll_multiplier 5.0

#: Modify the amount scrolled by the mouse wheel. Note this is only
#: used for low precision scrolling devices, not for high precision
#: scrolling on platforms such as macOS and Wayland. Use negative
#: numbers to change scroll direction.

touch_scroll_multiplier 1.0

#: Modify the amount scrolled by a touchpad. Note this is only used
#: for high precision scrolling devices on platforms such as macOS and
#: Wayland. Use negative numbers to change scroll direction.

#: }}}
Mouse
#: Mouse {{{

mouse_hide_wait 3.0

#: Hide mouse cursor after the specified number of seconds of the
#: mouse not being used. Set to zero to disable mouse cursor hiding.
#: Set to a negative value to hide the mouse cursor immediately when
#: typing text. Disabled by default on macOS as getting it to work
#: robustly with the ever-changing sea of bugs that is Cocoa is too
#: much effort.

; url_color #0087bd
url_style curly

#: The color and style for highlighting URLs on mouse-over. url_style
#: can be one of: none, single, double, curly

open_url_modifiers kitty_mod

#: The modifier keys to press when clicking with the mouse on URLs to
#: open the URL

open_url_with default

#: The program with which to open URLs that are clicked on. The
#: special value default means to use the operating system's default
#: URL handler.

url_prefixes http https file ftp

#: The set of URL prefixes to look for when detecting a URL under the
#: mouse cursor.

detect_urls yes

#: Detect URLs under the mouse. Detected URLs are highlighted with an
#: underline and the mouse cursor becomes a hand over them. Even if
#: this option is disabled, URLs are still clickable.

copy_on_select no

#: Copy to clipboard or a private buffer on select. With this set to
#: clipboard, simply selecting text with the mouse will cause the text
#: to be copied to clipboard. Useful on platforms such as macOS that
#: do not have the concept of primary selections. You can instead
#: specify a name such as a1 to copy to a private kitty buffer
#: instead. Map a shortcut with the paste_from_buffer action to paste
#: from this private buffer. For example::

#:     map cmd+shift+v paste_from_buffer a1

#: Note that copying to the clipboard is a security risk, as all
#: programs, including websites open in your browser can read the
#: contents of the system clipboard.

strip_trailing_spaces never

#: Remove spaces at the end of lines when copying to clipboard. A
#: value of smart will do it when using normal selections, but not
#: rectangle selections. always will always do it.

rectangle_select_modifiers ctrl+alt

#: The modifiers to use rectangular selection (i.e. to select text in
#: a rectangular block with the mouse)

terminal_select_modifiers shift

#: The modifiers to override mouse selection even when a terminal
#: application has grabbed the mouse

select_by_word_characters @-./_~?&=%+#

#: Characters considered part of a word when double clicking. In
#: addition to these characters any character that is marked as an
#: alphanumeric character in the unicode database will be matched.

click_interval -1.0

#: The interval between successive clicks to detect double/triple
#: clicks (in seconds). Negative numbers will use the system default
#: instead, if available, or fallback to 0.5.

focus_follows_mouse no

#: Set the active window to the window under the mouse when moving the
#: mouse around

pointer_shape_when_grabbed arrow

#: The shape of the mouse pointer when the program running in the
#: terminal grabs the mouse. Valid values are: arrow, beam and hand

default_pointer_shape beam

#: The default shape of the mouse pointer. Valid values are: arrow,
#: beam and hand

pointer_shape_when_dragging beam

#: The default shape of the mouse pointer when dragging across text.
#: Valid values are: arrow, beam and hand

#: }}}
Performance Tuning
#: Performance tuning {{{

repaint_delay 10

#: Delay (in milliseconds) between screen updates. Decreasing it,
#: increases frames-per-second (FPS) at the cost of more CPU usage.
#: The default value yields ~100 FPS which is more than sufficient for
#: most uses. Note that to actually achieve 100 FPS you have to either
#: set sync_to_monitor to no or use a monitor with a high refresh
#: rate. Also, to minimize latency when there is pending input to be
#: processed, repaint_delay is ignored.

input_delay 3

#: Delay (in milliseconds) before input from the program running in
#: the terminal is processed. Note that decreasing it will increase
#: responsiveness, but also increase CPU usage and might cause flicker
#: in full screen programs that redraw the entire screen on each loop,
#: because kitty is so fast that partial screen updates will be drawn.

sync_to_monitor no

#: Sync screen updates to the refresh rate of the monitor. This
#: prevents tearing (https://en.wikipedia.org/wiki/Screen_tearing)
#: when scrolling. However, it limits the rendering speed to the
#: refresh rate of your monitor. With a very high speed mouse/high
#: keyboard repeat rate, you may notice some slight input latency. If
#: so, set this to no.

#: }}}
Terminal Bell
#: Terminal bell {{{

enable_audio_bell yes

#: Enable/disable the audio bell. Useful in environments that require
#: silence.

visual_bell_duration 0.0

#: Visual bell duration. Flash the screen when a bell occurs for the
#: specified number of seconds. Set to zero to disable.

window_alert_on_bell yes

#: Request window attention on bell. Makes the dock icon bounce on
#: macOS or the taskbar flash on linux.

bell_on_tab yes

#: Show a bell symbol on the tab if a bell occurs in one of the
#: windows in the tab and the window is not the currently focused
#: window

command_on_bell none

#: Program to run when a bell occurs.

#: }}}
Window Layout
#: Window layout {{{

remember_window_size  yes
initial_window_width  640
initial_window_height 400

#: If enabled, the window size will be remembered so that new
#: instances of kitty will have the same size as the previous
#: instance. If disabled, the window will initially have size
#: configured by initial_window_width/height, in pixels. You can use a
#: suffix of "c" on the width/height values to have them interpreted
#: as number of cells instead of pixels.

enabled_layouts *

#: The enabled window layouts. A comma separated list of layout names.
#: The special value all means all layouts. The first listed layout
#: will be used as the startup layout. Default configuration is all
#: layouts in alphabetical order. For a list of available layouts, see
#: the https://sw.kovidgoyal.net/kitty/index.html#layouts.

window_resize_step_cells 2
window_resize_step_lines 2

#: The step size (in units of cell width/cell height) to use when
#: resizing windows. The cells value is used for horizontal resizing
#: and the lines value for vertical resizing.

window_border_width 0.5

#: The width of window borders. Can be either in pixels (px) or pts
#: (pt). Values in pts will be rounded to the nearest number of pixels
#: based on screen resolution. If not specified the unit is assumed to
#: be pts. Note that borders are displayed only when more than one
#: window is visible. They are meant to separate multiple windows.

draw_minimal_borders yes

#: Draw only the minimum borders needed. This means that only the
#: minimum needed borders for inactive windows are drawn. That is only
#: the borders that separate the inactive window from a neighbor. Note
#: that setting a non-zero window margin overrides this and causes all
#: borders to be drawn.

window_margin_width 0

#: The window margin (in pts) (blank area outside the border). A
#: single value sets all four sides. Two values set the vertical and
#: horizontal sides. Three values set top, horizontal and bottom. Four
#: values set top, right, bottom and left.

single_window_margin_width -1

#: The window margin (in pts) to use when only a single window is
#: visible. Negative values will cause the value of
#: window_margin_width to be used instead. A single value sets all
#: four sides. Two values set the vertical and horizontal sides. Three
#: values set top, horizontal and bottom. Four values set top, right,
#: bottom and left.

window_padding_width 5

#: The window padding (in pts) (blank area between the text and the
#: window border). A single value sets all four sides. Two values set
#: the vertical and horizontal sides. Three values set top, horizontal
#: and bottom. Four values set top, right, bottom and left.

placement_strategy center

#: When the window size is not an exact multiple of the cell size, the
#: cell area of the terminal window will have some extra padding on
#: the sides. You can control how that padding is distributed with
#: this option. Using a value of center means the cell area will be
#: placed centrally. A value of top-left means the padding will be on
#: only the bottom and right edges.

active_border_color #00ff00

#: The color for the border of the active window. Set this to none to
#: not draw borders around the active window.

inactive_border_color #cccccc

#: The color for the border of inactive windows

bell_border_color #ff5a00

#: The color for the border of inactive windows in which a bell has
#: occurred

inactive_text_alpha 1.0

#: Fade the text in inactive windows by the specified amount (a number
#: between zero and one, with zero being fully faded).

hide_window_decorations no

#: Hide the window decorations (title-bar and window borders) with
#: yes. On macOS, titlebar-only can be used to only hide the titlebar.
#: Whether this works and exactly what effect it has depends on the
#: window manager/operating system.

resize_debounce_time 0.1

#: The time (in seconds) to wait before redrawing the screen when a
#: resize event is received. On platforms such as macOS, where the
#: operating system sends events corresponding to the start and end of
#: a resize, this number is ignored.

resize_draw_strategy static

#: Choose how kitty draws a window while a resize is in progress. A
#: value of static means draw the current window contents, mostly
#: unchanged. A value of scale means draw the current window contents
#: scaled. A value of blank means draw a blank window. A value of size
#: means show the window size in cells.

resize_in_steps no

#: Resize the OS window in steps as large as the cells, instead of
#: with the usual pixel accuracy. Combined with an
#: initial_window_width and initial_window_height in number of cells,
#: this option can be used to keep the margins as small as possible
#: when resizing the OS window. Note that this does not currently work
#: on Wayland.

confirm_os_window_close 0

#: Ask for confirmation when closing an OS window or a tab that has at
#: least this number of kitty windows in it. A value of zero disables
#: confirmation. This confirmation also applies to requests to quit
#: the entire application (all OS windows, via the quit action).

#: }}}
Tab Bar
#: Tab bar {{{

tab_bar_edge top

#: Which edge to show the tab bar on, top or bottom

tab_bar_margin_width 0.0

#: The margin to the left and right of the tab bar (in pts)

tab_bar_style powerline

#: The tab bar style, can be one of: fade, separator, powerline, or
#: hidden. In the fade style, each tab's edges fade into the
#: background color, in the separator style, tabs are separated by a
#: configurable separator, and the powerline shows the tabs as a
#: continuous line. If you use the hidden style, you might want to
#: create a mapping for the select_tab action which presents you with
#: a list of tabs and allows for easy switching to a tab.

tab_bar_min_tabs 2

#: The minimum number of tabs that must exist before the tab bar is
#: shown

tab_switch_strategy previous

#: The algorithm to use when switching to a tab when the current tab
#: is closed. The default of previous will switch to the last used
#: tab. A value of left will switch to the tab to the left of the
#: closed tab. A value of right will switch to the tab to the right of
#: the closed tab. A value of last will switch to the right-most tab.

tab_fade 0.25 0.5 0.75 1

#: Control how each tab fades into the background when using fade for
#: the tab_bar_style. Each number is an alpha (between zero and one)
#: that controls how much the corresponding cell fades into the
#: background, with zero being no fade and one being full fade. You
#: can change the number of cells used by adding/removing entries to
#: this list.

tab_separator " ┇"

#: The separator between tabs in the tab bar when using separator as
#: the tab_bar_style.

tab_activity_symbol none

#: Some text or a unicode symbol to show on the tab if a window in the
#: tab that does not have focus has some activity.

tab_title_template "{index}: {title}"

#: A template to render the tab title. The default just renders the
#: title. If you wish to include the tab-index as well, use something
#: like: {index}: {title}. Useful if you have shortcuts mapped for
#: goto_tab N. In addition you can use {layout_name} for the current
#: layout name and {num_windows} for the number of windows in the tab.
#: Note that formatting is done by Python's string formatting
#: machinery, so you can use, for instance, {layout_name[:2].upper()}
#: to show only the first two letters of the layout name, upper-cased.
#: If you want to style the text, you can use styling directives, for
#: example: {fmt.fg.red}red{fmt.fg.default}normal{fmt.bg._00FF00}green
#: bg{fmt.bg.normal}. Similarly, for bold and italic:
#: {fmt.bold}bold{fmt.nobold}normal{fmt.italic}italic{fmt.noitalic}.

active_tab_title_template none

#: Template to use for active tabs, if not specified falls back to
#: tab_title_template.

; active_tab_foreground   #000
; active_tab_background   #eee
active_tab_font_style   bold-italic
; inactive_tab_foreground #444
; inactive_tab_background #999
inactive_tab_font_style normal

#: Tab bar colors and styles

tab_bar_background none

#: Background color for the tab bar. Defaults to using the terminal
#: background color.

#: }}}
Color Scheme
#: Color scheme {{{

; foreground #dddddd
; background #000000

#: The foreground and background colors

background_opacity 0.8

#: The opacity of the background. A number between 0 and 1, where 1 is
#: opaque and 0 is fully transparent.  This will only work if
#: supported by the OS (for instance, when using a compositor under
#: X11). Note that it only sets the background color's opacity in
#: cells that have the same background color as the default terminal
#: background. This is so that things like the status bar in vim,
#: powerline prompts, etc. still look good.  But it means that if you
#: use a color theme with a background color in your editor, it will
#: not be rendered as transparent.  Instead you should change the
#: default background color in your kitty config and not use a
#: background color in the editor color scheme. Or use the escape
#: codes to set the terminals default colors in a shell script to
#: launch your editor.  Be aware that using a value less than 1.0 is a
#: (possibly significant) performance hit.  If you want to dynamically
#: change transparency of windows set dynamic_background_opacity to
#: yes (this is off by default as it has a performance cost)

background_image none

#: Path to a background image. Must be in PNG format.

background_image_layout tiled

#: Whether to tile or scale the background image.

background_image_linear no

#: When background image is scaled, whether linear interpolation
#: should be used.

dynamic_background_opacity no

#: Allow changing of the background_opacity dynamically, using either
#: keyboard shortcuts (increase_background_opacity and
#: decrease_background_opacity) or the remote control facility.

background_tint 0.0

#: How much to tint the background image by the background color. The
#: tint is applied only under the text area, not margin/borders. Makes
#: it easier to read the text. Tinting is done using the current
#: background color for each window. This setting applies only if
#: background_opacity is set and transparent windows are supported or
#: background_image is set.

dim_opacity 0.8

#: How much to dim text that has the DIM/FAINT attribute set. One
#: means no dimming and zero means fully dimmed (i.e. invisible).

; selection_foreground #000000

#: The foreground for text selected with the mouse. A value of none
#: means to leave the color unchanged.

; selection_background #fffacd

#: The background for text selected with the mouse.


#: The 16 terminal colors. There are 8 basic colors, each color has a
#: dull and bright version. You can also set the remaining colors from
#: the 256 color table as color16 to color255.

; color0 #000000
; color8 #767676

#: black

; color1 #cc0403
; color9 #f2201f

#: red

; color2  #19cb00
; color10 #23fd00

#: green

; color3  #cecb00
; color11 #fffd00

#: yellow

; color4  #0d73cc
; color12 #1a8fff

#: blue

; color5  #cb1ed1
; color13 #fd28ff

#: magenta

; color6  #0dcdcd
; color14 #14ffff

#: cyan

; color7  #dddddd
; color15 #ffffff

#: white

; mark1_foreground black

#: Color for marks of type 1

; mark1_background #98d3cb

#: Color for marks of type 1 (light steel blue)

mark2_foreground black

#: Color for marks of type 2

mark2_background #f2dcd3

#: Color for marks of type 1 (beige)

mark3_foreground black

#: Color for marks of type 3

mark3_background #f274bc

#: Color for marks of type 1 (violet)

#: }}}
Advanced
#: Advanced {{{

shell fish

#: The shell program to execute. The default value of . means to use
#: whatever shell is set as the default shell for the current user.
#: Note that on macOS if you change this, you might need to add
#: --login to ensure that the shell starts in interactive mode and
#: reads its startup rc files.

editor .

#: The console editor to use when editing the kitty config file or
#: similar tasks. A value of . means to use the environment variables
#: VISUAL and EDITOR in that order. Note that this environment
#: variable has to be set not just in your shell startup scripts but
#: system-wide, otherwise kitty will not see it.

close_on_child_death no

#: Close the window when the child process (shell) exits. If no (the
#: default), the terminal will remain open when the child exits as
#: long as there are still processes outputting to the terminal (for
#: example disowned or backgrounded processes). If yes, the window
#: will close as soon as the child process exits. Note that setting it
#: to yes means that any background processes still using the terminal
#: can fail silently because their stdout/stderr/stdin no longer work.

allow_remote_control no

#: Allow other programs to control kitty. If you turn this on other
#: programs can control all aspects of kitty, including sending text
#: to kitty windows, opening new windows, closing windows, reading the
#: content of windows, etc.  Note that this even works over ssh
#: connections. You can chose to either allow any program running
#: within kitty to control it, with yes or only programs that connect
#: to the socket specified with the kitty --listen-on command line
#: option, if you use the value socket-only. The latter is useful if
#: you want to prevent programs running on a remote computer over ssh
#: from controlling kitty.

listen_on none

#: Tell kitty to listen to the specified unix/tcp socket for remote
#: control connections. Note that this will apply to all kitty
#: instances. It can be overridden by the kitty --listen-on command
#: line flag. This option accepts only UNIX sockets, such as
#: unix:${TEMP}/mykitty or (on Linux) unix:@mykitty. Environment
#: variables are expanded. If {kitty_pid} is present then it is
#: replaced by the PID of the kitty process, otherwise the PID of the
#: kitty process is appended to the value, with a hyphen. This option
#: is ignored unless you also set allow_remote_control to enable
#: remote control. See the help for kitty --listen-on for more
#: details.

# env 

#: Specify environment variables to set in all child processes. Note
#: that environment variables are expanded recursively, so if you
#: use::

#:     env MYVAR1=a
#:     env MYVAR2=${MYVAR1}/${HOME}/b

#: The value of MYVAR2 will be a/<path to home directory>/b.

update_check_interval 0

#: Periodically check if an update to kitty is available. If an update
#: is found a system notification is displayed informing you of the
#: available update. The default is to check every 24 hrs, set to zero
#: to disable.

startup_session none

#: Path to a session file to use for all kitty instances. Can be
#: overridden by using the kitty --session command line option for
#: individual instances. See
#: https://sw.kovidgoyal.net/kitty/index.html#sessions in the kitty
#: documentation for details. Note that relative paths are interpreted
#: with respect to the kitty config directory. Environment variables
#: in the path are expanded.

clipboard_control write-clipboard write-primary

#: Allow programs running in kitty to read and write from the
#: clipboard. You can control exactly which actions are allowed. The
#: set of possible actions is: write-clipboard read-clipboard write-
#: primary read-primary. You can additionally specify no-append to
#: disable kitty's protocol extension for clipboard concatenation. The
#: default is to allow writing to the clipboard and primary selection
#: with concatenation enabled. Note that enabling the read
#: functionality is a security risk as it means that any program, even
#: one running on a remote server via SSH can read your clipboard.

allow_hyperlinks yes

#: Process hyperlink (OSC 8) escape sequences. If disabled OSC 8
#: escape sequences are ignored. Otherwise they become clickable
#: links, that you can click by holding down ctrl+shift and clicking
#: with the mouse. The special value of ``ask`` means that kitty will
#: ask before opening the link.

term xterm-kitty

#: The value of the TERM environment variable to set. Changing this
#: can break many terminal programs, only change it if you know what
#: you are doing, not because you read some advice on Stack Overflow
#: to change it. The TERM variable is used by various programs to get
#: information about the capabilities and behavior of the terminal. If
#: you change it, depending on what programs you run, and how
#: different the terminal you are changing it to is, various things
#: from key-presses, to colors, to various advanced features may not
#: work.

#: }}}
OS Specific Tweaks
#: OS specific tweaks {{{

macos_titlebar_color system

#: Change the color of the kitty window's titlebar on macOS. A value
#: of system means to use the default system color, a value of
#: background means to use the background color of the currently
#: active window and finally you can use an arbitrary color, such as
#: #12af59 or red. WARNING: This option works by using a hack, as
#: there is no proper Cocoa API for it. It sets the background color
#: of the entire window and makes the titlebar transparent. As such it
#: is incompatible with background_opacity. If you want to use both,
#: you are probably better off just hiding the titlebar with
#: hide_window_decorations.

macos_option_as_alt no

#: Use the option key as an alt key. With this set to no, kitty will
#: use the macOS native Option+Key = unicode character behavior. This
#: will break any Alt+key keyboard shortcuts in your terminal
#: programs, but you can use the macOS unicode input technique. You
#: can use the values: left, right, or both to use only the left,
#: right or both Option keys as Alt, instead.

macos_hide_from_tasks no

#: Hide the kitty window from running tasks (Option+Tab) on macOS.

macos_quit_when_last_window_closed no

#: Have kitty quit when all the top-level windows are closed. By
#: default, kitty will stay running, even with no open windows, as is
#: the expected behavior on macOS.

macos_window_resizable yes

#: Disable this if you want kitty top-level (OS) windows to not be
#: resizable on macOS.

macos_thicken_font 0

#: Draw an extra border around the font with the given width, to
#: increase legibility at small font sizes. For example, a value of
#: 0.75 will result in rendering that looks similar to sub-pixel
#: antialiasing at common font sizes.

macos_traditional_fullscreen no

#: Use the traditional full-screen transition, that is faster, but
#: less pretty.

macos_show_window_title_in all

#: Show or hide the window title in the macOS window or menu-bar. A
#: value of window will show the title of the currently active window
#: at the top of the macOS window. A value of menubar will show the
#: title of the currently active window in the macOS menu-bar, making
#: use of otherwise wasted space. all will show the title everywhere
#: and none hides the title in the window and the menu-bar.

macos_custom_beam_cursor no

#: Enable/disable custom mouse cursor for macOS that is easier to see
#: on both light and dark backgrounds. WARNING: this might make your
#: mouse cursor invisible on dual GPU machines.

linux_display_server auto

#: Choose between Wayland and X11 backends. By default, an appropriate
#: backend based on the system state is chosen automatically. Set it
#: to x11 or wayland to force the choice.

#: }}}
Keyboard Shortcuts
#: Keyboard shortcuts {{{

#: For a list of key names, see: the GLFW key macros
#: <https://github.com/kovidgoyal/kitty/blob/master/glfw/glfw3.h#L349>.
#: The name to use is the part after the GLFW_KEY_ prefix. For a list
#: of modifier names, see: GLFW mods
#: <https://www.glfw.org/docs/latest/group__mods.html>

#: On Linux you can also use XKB key names to bind keys that are not
#: supported by GLFW. See XKB keys
#: <https://github.com/xkbcommon/libxkbcommon/blob/master/xkbcommon/xkbcommon-
#: keysyms.h> for a list of key names. The name to use is the part
#: after the XKB_KEY_ prefix. Note that you can only use an XKB key
#: name for keys that are not known as GLFW keys.

#: Finally, you can use raw system key codes to map keys, again only
#: for keys that are not known as GLFW keys. To see the system key
#: code for a key, start kitty with the kitty --debug-keyboard option.
#: Then kitty will output some debug text for every key event. In that
#: text look for ``native_code`` the value of that becomes the key
#: name in the shortcut. For example:

#: .. code-block:: none

#:     on_key_input: glfw key: 65 native_code: 0x61 action: PRESS mods: 0x0 text: 'a'

#: Here, the key name for the A key is 0x61 and you can use it with::

#:     map ctrl+0x61 something

#: to map ctrl+a to something.

#: You can use the special action no_op to unmap a keyboard shortcut
#: that is assigned in the default configuration::

#:     map kitty_mod+space no_op

#: You can combine multiple actions to be triggered by a single
#: shortcut, using the syntax below::

#:     map key combine <separator> action1 <separator> action2 <separator> action3 ...

#: For example::

#:     map kitty_mod+e combine : new_window : next_layout

#: this will create a new window and switch to the next available
#: layout

#: You can use multi-key shortcuts using the syntax shown below::

#:     map key1>key2>key3 action

#: For example::

#:     map ctrl+f>2 set_font_size 20

kitty_mod ctrl+shift

#: The value of kitty_mod is used as the modifier for all default
#: shortcuts, you can change it in your kitty.conf to change the
#: modifiers for all the default shortcuts.

clear_all_shortcuts no

#: You can have kitty remove all shortcut definition seen up to this
#: point. Useful, for instance, to remove the default shortcuts.

# kitten_alias hints hints --hints-offset=0

#: You can create aliases for kitten names, this allows overriding the
#: defaults for kitten options and can also be used to shorten
#: repeated mappings of the same kitten with a specific group of
#: options. For example, the above alias changes the default value of
#: kitty +kitten hints --hints-offset to zero for all mappings,
#: including the builtin ones.

#: }}}
Clipboard
#: Clipboard {{{

map kitty_mod+c copy_to_clipboard

#: There is also a copy_or_interrupt action that can be optionally
#: mapped to Ctrl+c. It will copy only if there is a selection and
#: send an interrupt otherwise. Similarly, copy_and_clear_or_interrupt
#: will copy and clear the selection or send an interrupt if there is
#: no selection.

map kitty_mod+v  paste_from_clipboard
map kitty_mod+s  paste_from_selection
map shift+insert paste_from_selection
map kitty_mod+o  pass_selection_to_program

#: You can also pass the contents of the current selection to any
#: program using pass_selection_to_program. By default, the system's
#: open program is used, but you can specify your own, the selection
#: will be passed as a command line argument to the program, for
#: example::

#:     map kitty_mod+o pass_selection_to_program firefox

#: You can pass the current selection to a terminal program running in
#: a new kitty window, by using the @selection placeholder::

#:     map kitty_mod+y new_window less @selection

#: }}}
Scrolling
#: Scrolling {{{

map kitty_mod+up        scroll_line_up
map kitty_mod+k         scroll_line_up
map kitty_mod+down      scroll_line_down
map kitty_mod+j         scroll_line_down
map kitty_mod+page_up   scroll_page_up
map kitty_mod+page_down scroll_page_down
map kitty_mod+home      scroll_home
map kitty_mod+end       scroll_end
map kitty_mod+h         show_scrollback

#: You can pipe the contents of the current screen + history buffer as
#: STDIN to an arbitrary program using the ``launch`` function. For
#: example, the following opens the scrollback buffer in less in an
#: overlay window::

#:     map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R

#: For more details on piping screen and buffer contents to external
#: programs, see launch.

#: }}}
Window Management
#: Window management {{{

map kitty_mod+enter new_window

#: You can open a new window running an arbitrary program, for
#: example::

#:     map kitty_mod+y      launch mutt

#: You can open a new window with the current working directory set to
#: the working directory of the current window using::

#:     map ctrl+alt+enter    launch --cwd=current

#: You can open a new window that is allowed to control kitty via the
#: kitty remote control facility by prefixing the command line with @.
#: Any programs running in that window will be allowed to control
#: kitty. For example::

#:     map ctrl+enter launch --allow-remote-control some_program

#: You can open a new window next to the currently active window or as
#: the first window, with::

#:     map ctrl+n launch --location=neighbor some_program
#:     map ctrl+f launch --location=first some_program

#: For more details, see launch.

map kitty_mod+n new_os_window

#: Works like new_window above, except that it opens a top level OS
#: kitty window. In particular you can use new_os_window_with_cwd to
#: open a window with the current working directory.

map kitty_mod+w close_window
map kitty_mod+] next_window
map kitty_mod+[ previous_window
map kitty_mod+f move_window_forward
map kitty_mod+b move_window_backward
map kitty_mod+` move_window_to_top
map kitty_mod+r start_resizing_window
map kitty_mod+1 first_window
map kitty_mod+2 second_window
map kitty_mod+3 third_window
map kitty_mod+4 fourth_window
map kitty_mod+5 fifth_window
map kitty_mod+6 sixth_window
map kitty_mod+7 seventh_window
map kitty_mod+8 eighth_window
map kitty_mod+9 ninth_window
map kitty_mod+0 tenth_window
#: }}}
Tab Management
#: Tab management {{{

map kitty_mod+right next_tab
map kitty_mod+left  previous_tab
map kitty_mod+t     new_tab
map kitty_mod+q     close_tab
map kitty_mod+.     move_tab_forward
map kitty_mod+,     move_tab_backward
map kitty_mod+alt+t set_tab_title

#: You can also create shortcuts to go to specific tabs, with 1 being
#: the first tab, 2 the second tab and -1 being the previously active
#: tab, and any number larger than the last tab being the last tab::

#:     map ctrl+alt+1 goto_tab 1
#:     map ctrl+alt+2 goto_tab 2

#: Just as with new_window above, you can also pass the name of
#: arbitrary commands to run when using new_tab and use
#: new_tab_with_cwd. Finally, if you want the new tab to open next to
#: the current tab rather than at the end of the tabs list, use::

#:     map ctrl+t new_tab !neighbor [optional cmd to run]
#: }}}
Layout Management
#: Layout management {{{

map kitty_mod+l next_layout

#: You can also create shortcuts to switch to specific layouts::

#:     map ctrl+alt+t goto_layout tall
#:     map ctrl+alt+s goto_layout stack

#: Similarly, to switch back to the previous layout::

#:    map ctrl+alt+p last_used_layout
#: }}}
Font Sizes
#: Font sizes {{{

#: You can change the font size for all top-level kitty OS windows at
#: a time or only the current one.

map kitty_mod+equal     change_font_size all +2.0
map kitty_mod+minus     change_font_size all -2.0
map kitty_mod+backspace change_font_size all 0

#: To setup shortcuts for specific font sizes::

#:     map kitty_mod+f6 change_font_size all 10.0

#: To setup shortcuts to change only the current OS window's font
#: size::

#:     map kitty_mod+f6 change_font_size current 10.0
#: }}}
Select and Act on Visible Text
#: Select and act on visible text {{{

#: Use the hints kitten to select text and either pass it to an
#: external program or insert it into the terminal or copy it to the
#: clipboard.

map kitty_mod+e kitten hints

#: Open a currently visible URL using the keyboard. The program used
#: to open the URL is specified in open_url_with.

map kitty_mod+p>f kitten hints --type path --program -

#: Select a path/filename and insert it into the terminal. Useful, for
#: instance to run git commands on a filename output from a previous
#: git command.

map kitty_mod+p>shift+f kitten hints --type path

#: Select a path/filename and open it with the default open program.

map kitty_mod+p>l kitten hints --type line --program -

#: Select a line of text and insert it into the terminal. Use for the
#: output of things like: ls -1

map kitty_mod+p>w kitten hints --type word --program -

#: Select words and insert into terminal.

map kitty_mod+p>h kitten hints --type hash --program -

#: Select something that looks like a hash and insert it into the
#: terminal. Useful with git, which uses sha1 hashes to identify
#: commits

map kitty_mod+p>n kitten hints --type linenum

#: Select something that looks like filename:linenum and open it in
#: vim at the specified line number.

map kitty_mod+p>y kitten hints --type hyperlink

#: Select a hyperlink (i.e. a URL that has been marked as such by the
#: terminal program, for example, by ls --hyperlink=auto).


#: The hints kitten has many more modes of operation that you can map
#: to different shortcuts. For a full description see kittens/hints.
#: }}}
Miscellaneous
#: Miscellaneous {{{

map kitty_mod+f11    toggle_fullscreen
map kitty_mod+f10    toggle_maximized
map kitty_mod+u      kitten unicode_input
map kitty_mod+f2     edit_config_file
map kitty_mod+escape kitty_shell window

#: Open the kitty shell in a new window/tab/overlay/os_window to
#: control kitty using commands.

map kitty_mod+a>m    set_background_opacity +0.1
map kitty_mod+a>l    set_background_opacity -0.1
map kitty_mod+a>1    set_background_opacity 1
map kitty_mod+a>d    set_background_opacity default
map kitty_mod+delete clear_terminal reset active

#: You can create shortcuts to clear/reset the terminal. For example::

#:     # Reset the terminal
#:     map kitty_mod+f9 clear_terminal reset active
#:     # Clear the terminal screen by erasing all contents
#:     map kitty_mod+f10 clear_terminal clear active
#:     # Clear the terminal scrollback by erasing it
#:     map kitty_mod+f11 clear_terminal scrollback active
#:     # Scroll the contents of the screen into the scrollback
#:     map kitty_mod+f12 clear_terminal scroll active

#: If you want to operate on all windows instead of just the current
#: one, use all instead of active.

#: It is also possible to remap Ctrl+L to both scroll the current
#: screen contents into the scrollback buffer and clear the screen,
#: instead of just clearing the screen::

#:     map ctrl+l combine : clear_terminal scroll active : send_text normal,application \x0c


#: You can tell kitty to send arbitrary (UTF-8) encoded text to the
#: client program when pressing specified shortcut keys. For example::

#:     map ctrl+alt+a send_text all Special text

#: This will send "Special text" when you press the ctrl+alt+a key
#: combination.  The text to be sent is a python string literal so you
#: can use escapes like \x1b to send control codes or \u21fb to send
#: unicode characters (or you can just input the unicode characters
#: directly as UTF-8 text). The first argument to send_text is the
#: keyboard modes in which to activate the shortcut. The possible
#: values are normal or application or kitty or a comma separated
#: combination of them.  The special keyword all means all modes. The
#: modes normal and application refer to the DECCKM cursor key mode
#: for terminals, and kitty refers to the special kitty extended
#: keyboard protocol.

#: Another example, that outputs a word and then moves the cursor to
#: the start of the line (same as pressing the Home key)::

#:     map ctrl+alt+a send_text normal Word\x1b[H
#:     map ctrl+alt+a send_text application Word\x1bOH

#: }}}
Dracula Theme
include dracula.conf
# https://draculatheme.com/kitty
#
# Installation instructions:
#
#  cp dracula.conf ~/.config/kitty/
#  echo "include dracula.conf" >> ~/.config/kitty/kitty.conf
#
# Then reload kitty for the config to take affect.
# Alternatively copy paste below directly into kitty.conf

foreground            #f8f8f2
background            #282a36
selection_foreground  #ffffff
selection_background  #44475a

url_color #8be9fd

# black
color0  #21222c
color8  #6272a4

# red
color1  #ff5555
color9  #ff6e6e

# green
color2  #50fa7b
color10 #69ff94

# yellow
color3  #f1fa8c
color11 #ffffa5

# blue
color4  #bd93f9
color12 #d6acff

# magenta
color5  #ff79c6
color13 #ff92df

# cyan
color6  #8be9fd
color14 #a4ffff

# white
color7  #f8f8f2
color15 #ffffff

# Cursor colors
cursor            #f8f8f2
cursor_text_color background

# Tab bar colors
active_tab_foreground   #282a36
active_tab_background   #f8f8f2
inactive_tab_foreground #282a36
inactive_tab_background #6272a4

# Marks
mark1_foreground #282a36
mark1_background #ff5555

# Splits/Windows
active_border_color #f8f8f2
inactive_border_color #6272a4

Alacritty

Configuration for Alacritty, the GPU enhanced terminal emulator.

Environment Variable
# Any items in the `env` entry below will be added as
# environment variables. Some entries may override variables
# set by alacritty itself.
#env:
# TERM variable
#
# This value is used to set the `$TERM` environment variable for
# each instance of Alacritty. If it is not present, alacritty will
# check the local terminfo database and use `alacritty` if it is
# available, otherwise `xterm-256color` is used.
#TERM: alacritty
Window
window:
    # Window dimensions (changes require restart)
    #
    # Specified in number of columns/lines, not pixels.
    # If both are `0`, this setting is ignored.
    #dimensions:
    #  columns: 0
    #  lines: 0

    # Window position (changes require restart)
    #
    # Specified in number of pixels.
    # If the position is not set, the window manager will handle the placement.
    #position:
    #  x: 0
    #  y: 0

    # Window padding (changes require restart)
    #
    # Blank space added around the window in pixels. This padding is scaled
    # by DPI and the specified value is always added at both opposing sides.
    padding:
        x: 5
        y: 5

    # Spread additional padding evenly around the terminal content.
    #dynamic_padding: false

    # Window decorations
    #
    # Values for `decorations`:
    #     - full: Borders and title bar
    #     - none: Neither borders nor title bar
    #
    # Values for `decorations` (macOS only):
    #     - transparent: Title bar, transparent background and title bar buttons
    #     - buttonless: Title bar, transparent background, but no title bar buttons
    #decorations: full

    # Startup Mode (changes require restart)
    #
    # Values for `startup_mode`:
    #   - Windowed
    #   - Maximized
    #   - Fullscreen
    #
    # Values for `startup_mode` (macOS only):
    #   - SimpleFullscreen
    #startup_mode: Windowed

    # Window title
    #title: Alacritty

    # Window class (Linux/BSD only):
    # class:
    #   Application instance name
    #   instance: Alacritty
    #   General application class
    #   general: Alacritty

    # GTK theme variant (Linux/BSD only)
    #
    # Override the variant of the GTK theme. Commonly supported values are `dark` and `light`.
    # Set this to `None` to use the default theme variant.
    #gtk_theme_variant: None
Scrolling
#scrolling:
# Maximum number of lines in the scrollback buffer.
# Specifying '0' will disable scrolling.
#history: 10000

# Number of lines the viewport will move for every line scrolled when
# scrollback is enabled (history > 0).
#multiplier: 3
Font
# Font configuration
font:
    # Normal (roman) font face
    normal:
        # Font family
        #
        # Default:
        #   - (macOS) Menlo
        #   - (Linux/BSD) monospace
        #   - (Windows) Consolas
        family: Fira Code Nerd Font

        # The `style` can be specified to pick a specific face.
        style: Regular

    # Bold font face
    bold:
        # Font family
        #
        # If the bold family is not specified, it will fall back to the
        # value specified for the normal font.
        family: Fira Code Nerd Font

        # The `style` can be specified to pick a specific face.
        style: Bold

    # Italic font face
    #italic:
    # Font family
    #
    # If the italic family is not specified, it will fall back to the
    # value specified for the normal font.
    #family: monospace

    # The `style` can be specified to pick a specific face.
    #style: Italic

    # Bold italic font face
    #bold_italic:
    # Font family
    #
    # If the bold italic family is not specified, it will fall back to the
    # value specified for the normal font.
    #family: monospace

    # The `style` can be specified to pick a specific face.
    #style: Bold Italic

    # Point size
    size: 8.0

    # Offset is the extra space around each character. `offset.y` can be thought of
    # as modifying the line spacing, and `offset.x` as modifying the letter spacing.
    #offset:
    #  x: 0
    #  y: 0

    # Glyph offset determines the locations of the glyphs within their cells with
    # the default being at the bottom. Increasing `x` moves the glyph to the right,
    # increasing `y` moves the glyph upwards.
    #glyph_offset:
    #  x: 0
    #  y: 0

    # Thin stroke font rendering (macOS only)
    #
    # Thin strokes are suitable for retina displays, but for non-retina screens
    # it is recommended to set `use_thin_strokes` to `false`
    #
    # macOS >= 10.14.x:
    #
    # If the font quality on non-retina display looks bad then set
    # `use_thin_strokes` to `true` and enable font smoothing by running the
    # following command:
    #   `defaults write -g CGFontRenderingFontSmoothingDisabled -bool NO`
    #
    # This is a global setting and will require a log out or restart to take
    # effect.
    #use_thin_strokes: true
Colors
# If `true`, bold text is drawn using the bright color variants.
#draw_bold_text_with_bright_colors: false
Tomorrow Night Bright

NOT IN USE

colors:
#   Default colors
  primary:
   background: '#000000'
   foreground: '#eaeaea'

#     Bright and dim foreground colors

#     The dimmed foreground color is calculated automatically if it is not present.
#     If the bright foreground color is not set, or `draw_bold_text_with_bright_colors`
#     is `false`, the normal foreground color will be used.
#     dim_foreground: '#9a9a9a'
#     bright_foreground: '#ffffff'

#   Cursor colors

#   Colors which should be used to draw the terminal cursor. If these are unset,
#   the cursor color will be the inverse of the cell color.
  cursor:
   text: '#000000'
   cursor: '#ffffff'

#   Selection colors

#   Colors which should be used to draw the selection area. If selection
#   background is unset, selection color will be the inverse of the cell colors.
#   If only text is unset the cell text color will remain the same.
  selection:
   text: '#eaeaea'
   background: '#404040'

#   Normal colors
  normal:
   black:   '#000000'
   red:     '#d54e53'
   green:   '#b9ca4a'
   yellow:  '#e6c547'
   blue:    '#7aa6da'
   magenta: '#c397d8'
   cyan:    '#70c0ba'
   white:   '#eaeaea'

#   Bright colors
  bright:
   black:   '#666666'
   red:     '#ff3334'
   green:   '#9ec400'
   yellow:  '#e7c547'
   blue:    '#7aa6da'
   magenta: '#b77ee0'
   cyan:    '#54ced6'
   white:   '#ffffff'

#   Dim colors

#   If the dim colors are not set, they will be calculated automatically based
#   on the `normal` colors.
  dim:
   black:   '#000000'
   red:     '#8c3336'
   green:   '#7a8530'
   yellow:  '#97822e'
   blue:    '#506d8f'
   magenta: '#80638e'
   cyan:    '#497e7a'
   white:   '#9a9a9a'
Dracula

NOT IN USE

colors:
    # Default colors
    primary:
        background: "0x282a36"
        foreground: "0xf8f8f2"

        # Bright and dim foreground colors
        #
        # The dimmed foreground color is calculated automatically if it is not present.
        # If the bright foreground color is not set, or `draw_bold_text_with_bright_colors`
        # is `false`, the normal foreground color will be used.
        #dim_foreground: '0x9a9a9a'
        #bright_foreground: '0xffffff'

    # Cursor colors
    #
    # Colors which should be used to draw the terminal cursor. If these are unset,
    # the cursor color will be the inverse of the cell color.
    cursor:
        text: "0x44475a"
        cursor: "0xf8f8f2"

    # Normal colors
    normal:
        black: "0x000000"
        red: "0xff5555"
        green: "0x50fa7b"
        yellow: "0xf1fa8c"
        blue: "0xbd93f9"
        magenta: "0xff79c6"
        cyan: "0x8be9fd"
        white: "0xbfbfbf"

    # Bright colors
    bright:
        black: "0x4d4d4d"
        red: "0xff6e67"
        green: "0x5af78e"
        yellow: "0xf4f99d"
        blue: "0xcaa9fa"
        magenta: "0xff92d0"
        cyan: "0x9aedfe"
        white: "0xe6e6e6"

    # Dim colors
    #
    # If the dim colors are not set, they will be calculated automatically based
    # on the `normal` colors.
    dim:
        black: "0x14151b"
        red: "0xff2222"
        green: "0x1ef956"
        yellow: "0xebf85b"
        blue: "0x4d5b86"
        magenta: "0xff46b0"
        cyan: "0x59dffc"
        white: "0xe6e6d1"
Dracula PRO
colors:
    # Default colors
    primary:
        background: "0x22212c"
        foreground: "0xf8f8f2"

        # Bright and dim foreground colors
        #
        # The dimmed foreground color is calculated automatically if it is not present.
        # If the bright foreground color is not set, or `draw_bold_text_with_bright_colors`
        # is `false`, the normal foreground color will be used.
        #dim_foreground: '0x9a9a9a'
        #bright_foreground: '0xffffff'

    # Cursor colors
    #
    # Colors which should be used to draw the terminal cursor. If these are unset,
    # the cursor color will be the inverse of the cell color.
    cursor:
        text: "0x454158"
        cursor: "0xf8f8f2"

    # Selection colors
    #
    # Colors which should be used to draw the selection area. If selection
    # background is unset, selection color will be the inverse of the cell colors.
    # If only text is unset the cell text color will remain the same.
    selection:
        text: "0xf8f8f2"
        background: "0x454158"

    # Normal colors
    normal:
        black: "0x22212c"
        red: "0xff9580"
        green: "0x8aff80"
        yellow: "0xffff80"
        blue: "0x9580ff"
        magenta: "0xff80bf"
        cyan: "0x80ffea"
        white: "0xf8f8f2"

    # Bright colors
    bright:
        black: "0x22212c"
        red: "0xffaa99"
        green: "0xa2ff99"
        yellow: "0xffff99"
        blue: "0xaa99ff"
        magenta: "0xff99cc"
        cyan: "0x99ffee"
        white: "0xffffff"

        # Indexed Colors
        #
        # The indexed colors include all colors from 16 to 256.
        # When these are not set, they're filled with sensible defaults.
        #
        # Example:
        #   `- { index: 16, color: '0xff00ff' }`
        #
        indexed_colors: []
Visual Bell
# Bell
#
# The bell is rung every time the BEL control character is received.
#bell:
  # Visual Bell Animation
  #
  # Animation effect for flashing the screen when the visual bell is rung.
  #
  # Values for `animation`:
  #   - Ease
  #   - EaseOut
  #   - EaseOutSine
  #   - EaseOutQuad
  #   - EaseOutCubic
  #   - EaseOutQuart
  #   - EaseOutQuint
  #   - EaseOutExpo
  #   - EaseOutCirc
  #   - Linear
  #animation: EaseOutExpo

  # Duration of the visual bell flash in milliseconds. A `duration` of `0` will
  # disable the visual bell animation.
  #duration: 0

  # Visual bell animation color.
  #color: '#ffffff'

  # Bell Command
  #
  # This program is executed whenever the bell is rung.
  #
  # When set to `command: None`, no command will be executed.
  #
  # Example:
  #   command:
  #     program: notify-send
  #     args: ["Hello, World!"]
  #
  #command: None
Background Opacity
# Background opacity
#
# Window opacity as a floating point number from `0.0` to `1.0`.
# The value `0.0` is completely transparent and `1.0` is opaque.
# background_opacity: 1.0
background_opacity: 0.8
Selection
#selection:
#semantic_escape_chars: ",│`|:\"' ()[]{}<>\t"

# When set to `true`, selected text will be copied to the primary clipboard.
#save_to_clipboard: false
Window Title
# Allow terminal applications to change Alacritty's window title.
#dynamic_title: true
Cursor
cursor:
    # Cursor style
    #
    # Values for `style`:
    #   - ▇ Block
    #   - _ Underline
    #   - | Beam
    style: Beam

    # If this is `true`, the cursor will be rendered as a hollow box when the
    # window is not focused.
    #unfocused_hollow: true
Live Config Reload
# Live config reload (changes require restart)
live_config_reload: true
Shell
# Shell
#
# You can set `shell.program` to the path of your favorite shell, e.g. `/bin/fish`.
# Entries in `shell.args` are passed unmodified as arguments to the shell.
#
# Default:
#   - (macOS) /bin/bash --login
#   - (Linux/BSD) user login shell
#   - (Windows) powershell
shell:
    program: /usr/bin/fish
    # args:
    #   - -l
    #   - -c
    #   - "tmux attach || tmux"
Startup Directory
# Startup directory
#
# Directory the shell is started in. If this is unset, or `None`, the working
# directory of the parent process will be used.
#working_directory: None
WinPTY Backend (Windows Only)
# WinPTY backend (Windows only)
#
# Alacritty defaults to using the newer ConPTY backend if it is available,
# since it resolves a lot of bugs and is quite a bit faster. If it is not
# available, the the WinPTY backend will be used instead.
#
# Setting this option to `true` makes Alacritty use the legacy WinPTY backend,
# even if the ConPTY backend is available.
#winpty_backend: false
Alt Send Escape
# Send ESC (\x1b) before characters when alt is pressed.
#alt_send_esc: true
Mouse
# mouse:
  # Click settings
  #
  # The `double_click` and `triple_click` settings control the time
  # alacritty should wait for accepting multiple clicks as one double
  # or triple click.
  #double_click: { threshold: 300 }
  #triple_click: { threshold: 300 }

  # If this is `true`, the cursor is temporarily hidden when typing.
  #hide_when_typing: false
Hints
# Regex hints
#
# Terminal hints can be used to find text in the visible part of the terminal
# and pipe it to other applications.
#hints:
  # Keys used for the hint labels.
  #alphabet: "jfkdls;ahgurieowpq"

  # List with all available hints
  #
  # Each hint must have a `regex` and either an `action` or a `command` field.
  # The fields `mouse`, `binding` and `post_processing` are optional.
  #
  # The fields `command`, `binding.key`, `binding.mods` and `mouse.mods` accept
  # the same values as they do in the `key_bindings` section.
  #
  # The `mouse.enabled` field controls if the hint should be underlined while
  # the mouse with all `mouse.mods` keys held or the vi mode cursor is above it.
  #
  # If the `post_processing` field is set to `true`, heuristics will be used to
  # shorten the match if there are characters likely not to be part of the hint
  # (e.g. a trailing `.`). This is most useful for URIs.
  #
  # Values for `action`:
  #   - Copy
  #       Copy the hint's text to the clipboard.
  #   - Paste
  #       Paste the hint's text to the terminal or search.
  #   - Select
  #       Select the hint's text.
  #   - MoveViModeCursor
  #       Move the vi mode cursor to the beginning of the hint.
  #enabled:
  # - regex: "(mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)\
  #           [^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩`]+"
  #   command: xdg-open
  #   post_processing: true
  #   mouse:
  #     enabled: true
  #     mods: None
  #   binding:
  #     key: U
  #     mods: Control|Shift
Mouse Bindings
# Mouse bindings
#
# Mouse bindings are specified as a list of objects, much like the key
# bindings further below.
#
# To trigger mouse bindings when an application running within Alacritty captures the mouse, the
# `Shift` modifier is automatically added as a requirement.
#
# Each mouse binding will specify a:
#
# - `mouse`:
#
#   - Middle
#   - Left
#   - Right
#   - Numeric identifier such as `5`
#
# - `action` (see key bindings)
#
# And optionally:
#
# - `mods` (see key bindings)
#mouse_bindings:
#  - { mouse: Middle, action: PasteSelection }
Key Bindings
# Key bindings
#
# Key bindings are specified as a list of objects. For example, this is the
# default paste binding:
#
# `- { key: V, mods: Control|Shift, action: Paste }`
#
# Each key binding will specify a:
#
# - `key`: Identifier of the key pressed
#
#    - A-Z
#    - F1-F24
#    - Key0-Key9
#
#    A full list with available key codes can be found here:
#    https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants
#
#    Instead of using the name of the keys, the `key` field also supports using
#    the scancode of the desired key. Scancodes have to be specified as a
#    decimal number. This command will allow you to display the hex scancodes
#    for certain keys:
#
#       `showkey --scancodes`.
#
# Then exactly one of:
#
# - `chars`: Send a byte sequence to the running application
#
#    The `chars` field writes the specified string to the terminal. This makes
#    it possible to pass escape sequences. To find escape codes for bindings
#    like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside
#    of tmux. Note that applications use terminfo to map escape sequences back
#    to keys. It is therefore required to update the terminfo when changing an
#    escape sequence.
#
# - `action`: Execute a predefined action
#
#   - Copy
#   - Paste
#   - PasteSelection
#   - IncreaseFontSize
#   - DecreaseFontSize
#   - ResetFontSize
#   - ScrollPageUp
#   - ScrollPageDown
#   - ScrollLineUp
#   - ScrollLineDown
#   - ScrollToTop
#   - ScrollToBottom
#   - ClearHistory
#   - Hide
#   - Minimize
#   - Quit
#   - ToggleFullscreen
#   - SpawnNewInstance
#   - ClearLogNotice
#   - ReceiveChar
#   - None
#
#   (macOS only):
#   - ToggleSimpleFullscreen: Enters fullscreen without occupying another space
#
# - `command`: Fork and execute a specified command plus arguments
#
#    The `command` field must be a map containing a `program` string and an
#    `args` array of command line parameter strings. For example:
#       `{ program: "alacritty", args: ["-e", "vttest"] }`
#
# And optionally:
#
# - `mods`: Key modifiers to filter binding actions
#
#    - Command
#    - Control
#    - Option
#    - Super
#    - Shift
#    - Alt
#
#    Multiple `mods` can be combined using `|` like this:
#       `mods: Control|Shift`.
#    Whitespace and capitalization are relevant and must match the example.
#
# - `mode`: Indicate a binding for only specific terminal reported modes
#
#    This is mainly used to send applications the correct escape sequences
#    when in different modes.
#
#    - AppCursor
#    - AppKeypad
#    - Alt
#
#    A `~` operator can be used before a mode to apply the binding whenever
#    the mode is *not* active, e.g. `~Alt`.
#
# Bindings are always filled by default, but will be replaced when a new
# binding with the same triggers is defined. To unset a default binding, it can
# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for
# a no-op if you do not wish to receive input characters for that binding.
#
# If the same trigger is assigned to multiple actions, all of them are executed
# at once.
#key_bindings:
# (Windows, Linux, and BSD only)
#- { key: V,        mods: Control|Shift, action: Paste            }
#- { key: C,        mods: Control|Shift, action: Copy             }
#- { key: Insert,   mods: Shift,         action: PasteSelection   }
#- { key: Key0,     mods: Control,       action: ResetFontSize    }
#- { key: Equals,   mods: Control,       action: IncreaseFontSize }
#- { key: Add,      mods: Control,       action: IncreaseFontSize }
#- { key: Subtract, mods: Control,       action: DecreaseFontSize }
#- { key: Minus,    mods: Control,       action: DecreaseFontSize }

# (Windows only)
#- { key: Return,   mods: Alt,           action: ToggleFullscreen }

# (macOS only)
#- { key: Key0,   mods: Command,         action: ResetFontSize    }
#- { key: Equals, mods: Command,         action: IncreaseFontSize }
#- { key: Add,    mods: Command,         action: IncreaseFontSize }
#- { key: Minus,  mods: Command,         action: DecreaseFontSize }
#- { key: K,      mods: Command,         action: ClearHistory     }
#- { key: K,      mods: Command,         chars: "\x0c"            }
#- { key: V,      mods: Command,         action: Paste            }
#- { key: C,      mods: Command,         action: Copy             }
#- { key: H,      mods: Command,         action: Hide             }
#- { key: M,      mods: Command,         action: Minimize         }
#- { key: Q,      mods: Command,         action: Quit             }
#- { key: W,      mods: Command,         action: Quit             }
#- { key: F,      mods: Command|Control, action: ToggleFullscreen }

#- { key: Paste,                    action: Paste                            }
#- { key: Copy,                     action: Copy                             }
#- { key: L,         mods: Control, action: ClearLogNotice                   }
#- { key: L,         mods: Control, chars: "\x0c"                            }
#- { key: PageUp,    mods: Shift,   action: ScrollPageUp,   mode: ~Alt       }
#- { key: PageDown,  mods: Shift,   action: ScrollPageDown, mode: ~Alt       }
#- { key: Home,      mods: Shift,   action: ScrollToTop,    mode: ~Alt       }
#- { key: End,       mods: Shift,   action: ScrollToBottom, mode: ~Alt       }
Debug & Logging
#debug:
# Display the time it takes to redraw each frame.
#render_timer: false

# Keep the log file after quitting Alacritty.
#persistent_logging: false

# Log level
#
# Values for `log_level`:
#   - None
#   - Error
#   - Warn
#   - Info
#   - Debug
#   - Trace
#log_level: Warn

# Print all received window events.
#print_events: false

Text Editor

Vim

" Don't try to be vi compatible
set nocompatible

" Syntax Highlighting
syntax on

" Pick a leader key
let mapleader = "\\"

" Security
set modelines=0

" Show line numbers
set number relativenumber

" Show file stats
set ruler

" Blink cursors on error instead of beeping
set visualbell

" Encoding
set encoding=utf-8

" Whitespace
set wrap
set textwidth=110
set formatoptions=tcqrn1
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set noshiftround
set smarttab
set autoindent

" Cursor Motion
set scrolloff=3
set backspace=indent,eol,start
set matchpairs+=<:> " use % to jumb between pairs

" Allow hidden buffers
set hidden

" Rendering
set ttyfast

" Status bar
set laststatus=2

" Last line
set showmode
set showcmd

" Searching
nnoremap / /\v
vnoremap / /\v
set hlsearch
set incsearch
set ignorecase
set smartcase
set showmatch
map <leader><space> :let @/=''<cr> " clear search

" Formatting
map <leader>q gqip

" Visualize tabs and newlines
set listchars=tab:▸\ ,eolmap <leader>l :set list!<CR> " Toggle tabs and EOL

" Exit Inser Mode Easily
:inoremap jk <esc>

" UI Config
set cursorline
filetype indent on
set wildmenu
set lazyredraw
set showmatch

" Add Dracula Themes
packadd! dracula
packadd! dracula_pro

" Enable Dracula Pro Theme
syntax enable
let g:dracula_colorterm = 0
colorscheme dracula_pro

Emacs

Chemacs2

Configurations

Define emacs configurations with chemacs2.

(
  ("personal" . ((user-emacs-directory . "~/.config/personal-emacs")))
  ("doom"     . ((user-emacs-directory . "~/.config/doom-emacs")
                 (env . (("DOOMDIR"    . "~/.config/doom-emacs-config")))))
)
Selected Configuration

Select the emacs configuration to use by default.

doom

DOOM Emacs Update Script

Script to synchronize and update Doom Emacs configuration.

# Define some local variables
DOOM_BIN=~/.config/doom-emacs/bin/doom
DOOM_DIR_PATH=~/.config/doom-emacs-config

# Upgrade Doom to the latest version (then update your packages). This is equivalent to
# $ git pull
# $ doom sync
# $ doom update
DOOMDIR=$DOOM_DIR_PATH $DOOM_BIN upgrade

# Delete orphaned packages & repos, and compacts them
DOOMDIR=$DOOM_DIR_PATH $DOOM_BIN purge

System Monitor

Conky

--[[
Conky, a system monitor, based on torsmo

Any original torsmo code is licensed under the BSD license

All code written since the fork of torsmo is licensed under the GPL

Please see COPYING for details

Copyright (c) 2004, Hannu Saransaari and Lauri Hakkarainen
Copyright (c) 2005-2021 Brenden Matthews, Philip Kovacs, et. al. (see AUTHORS)
All rights reserved.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
]]

conky.config ={
  -- CONKY SETTINGS
  background = true,
  update_interval = 1,
  update_interval_on_battery = 5,
  total_run_times = 0,

  cpu_avg_samples = 2,
  net_avg_samples = 2,

  override_utf8_locale = true,

  double_buffer = true,
  no_buffers = true,

  text_buffer_size = 32768,

  -- CONKY: WINDOW SPECIFICATIONS
  own_window = true,
  own_window_argb_value = 192,
  own_window_argb_visual = true,
  own_window_class = 'conky-semi',
  -- own_window_colour = '#0b0d18',
  own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',
  own_window_transparent = true,
  own_window_type = 'dock',

  border_inner_margin = 6,
  border_width = 5,

  minimum_height = 1020,

  minimum_width = 280,
  maximum_width = 280,

  alignment = 'bottom_left',
  gap_x = 10,
  gap_y = 0,

  -- GRAPHICS SETTINGS
  draw_outline = true,
  draw_outline = false,
  draw_borders = false,
  draw_graph_borders = true,
  -- draw_graph_borders = false,

  -- TEXT SETTINGS
  use_xft = true,
  font = 'Montserrat Regular:size=10',
  xftalpha = 0.2,

  uppercase = false,

  -- Pad percentages to this many decimals (0 = no padding)
  pad_percents = 2,

  -- COLOUR SETTINGS
  default_color = 'AAAAAA',
  default_shade_color = '333333',
  -- default_outline_color = '111111',
  default_outline_color = '010101',
  color1 = '999999',
  color2 = 'CCCCCC',
  color3 = 'EEEEEE',
  color4 = '444444',
  color5 = '555555',
  color6 = '666666',
  color7 = '3b71a1',
};


conky.text = [[
${alignc}${color1}${font Montserrat Bold:size=20}${time %X (%Z)}${font}${color}${alignc}
${voffset -9}
${alignc}${font Montserrat Light:size=10}${time %A %d %B %Y}${font}${alignc}
${color6}${hr 2}${color}
${voffset -6}
${font Montserrat Light:size=8}${color1}SYSTEM:${color}${font} ${alignr}$sysname $nodename
${font Montserrat Light:size=8}${color1}UPTIME:${color}${font} ${alignr}$uptime_short
${font Montserrat Light:size=8}${color1}KERNEL:${color}${font} ${alignr}$kernel ${voffset 5}
${font :size=11}${color}CPUs ${color}${hr 2}${color}
${voffset -15}
${font Montserrat Light:size=10}${color1}CPU:${color}${font} ${alignr}${color}${execi 300 cat /proc/cpuinfo | grep 'model name' | cut -c 14-40 | uniq}${color}${font}
${font Montserrat Light:size=9}${color1}Used: ${alignr}${color}${font}${cpu cpu0}%
${font :size=11}${color}${cpubar cpu0}${color}
${voffset -15}
${font Montserrat Light:size=9}${color1}01 - 04:${color}${font} ${goto 100}${cpu cpu1}% ${goto 150}${cpu cpu2 }% ${goto 200}${cpu cpu3 }% ${goto 250}${cpu cpu4 }%
${font Montserrat Light:size=9}${color1}05 - 08:${color}${font} ${goto 100}${cpu cpu5}% ${goto 150}${cpu cpu6 }% ${goto 200}${cpu cpu7 }% ${goto 250}${cpu cpu8 }%
${font Montserrat Light:size=9}${color1}09 - 12:${color}${font} ${goto 100}${cpu cpu9}% ${goto 150}${cpu cpu10}% ${goto 200}${cpu cpu11}% ${goto 250}${cpu cpu12}%
${voffset -8}
${font Montserrat Light:size=9}${color1}CPU TEMP:${color}${font} ${font :size=10}${alignr}${hwmon 1 temp 1}°${color4}C${color}${voffset 5}
${font :size=11}${color}Network ${color}${hr 2}${color}
${voffset -15}
# ${font Montserrat Light:size=10}${color1}IP ADDRESS:${color}${font} ${alignr}${addr wlp0s20f3}
${if_match "${addr wlp0s20f3}"!="No Address"}${voffset 5}${font Montserrat Light:size=10}${font}Download ${alignr}${downspeedf wlp0s20f3}k/s (${totaldown wlp0s20f3})
${color3}${downspeedgraph wlp0s20f3 50,280 ADFF2F 32CD32 -t}
${font Montserrat Light:size=10}${font}Upload ${alignr}${upspeedf wlp0s20f3}k/s (${totalup wlp0s20f3})
${color3}${upspeedgraph wlp0s20f3 50,280 FF0000 8B0000 -t}
${endif}${voffset 5}${font :size=11}${color}HDD ${color}${hr 2}${color}
${color1}Used: ${color3}${fs_used /}${color1}${goto 190}Free:${goto 230}${color3}${fs_free /}
${color2}${fs_bar /}
${font Montserrat Light:size=8}${color1}DISK I/O:${color}${font} ${alignr}$diskio
${voffset 2}${font Montserrat Light:size=8}${color1}READ: ${color}${font} ${goto 80}${color4}${diskiograph_read  15,210 ADFF2F 32CD32 750}${color}
${voffset 2}${font Montserrat Light:size=8}${color1}WRITE:${color}${font} ${goto 80}${color4}${diskiograph_write 15,210 FF0000 8B0000 750}${color}
${font :size=11}${color}Memory ${color}${hr 2}${color}${voffset 2}
$font${color DimGray}RAM $alignc $mem / $memmax $alignr ${color 188f18}$memperc%
${color 188f18}$membar${voffset 1}
${font :size=11}${color}GPU ${color}${hr 2}${color}${voffset 2}
${font Montserrat Light:size=9}${color1}GPU Freq.: $alignr ${color}${font}${nvidia gpufreq} Mhz${voffset 3}
${font Montserrat Light:size=9}${color1}Memory Freq.: $alignr ${color}${font}${nvidia memfreq} Mhz${voffset 3}
${font Montserrat Light:size=9}${color1}Temperature: $alignr ${color}${font}${nvidia temp}°C ${voffset 3}
${voffset 3}${font :size=11}${color}Processes ${color}${hr 2}${color}
${voffset -15}
${font :size=10}${font Montserrat Light:size=8}${color1}TOTAL:${color}${font} ${alignr}${processes}
${voffset -10}
${font Montserrat Light:size=9}${color1}APP NAME: ${goto 160}MEMORY: ${goto 245}CPU: ${color}${font}
${voffset -16}
${font Montserrat Light:size=9}${color1}${top_mem name 1} ${color}${font} ${goto 160}${top mem 1} % ${goto 235}${top cpu 1} %
${font Montserrat Light:size=9}${color1}${top_mem name 2} ${color}${font} ${goto 160}${top mem 2} % ${goto 235}${top cpu 2} %
${font Montserrat Light:size=9}${color1}${top_mem name 3} ${color}${font} ${goto 160}${top mem 3} % ${goto 235}${top cpu 3} %
${font Montserrat Light:size=9}${color1}${top_mem name 4} ${color}${font} ${goto 160}${top mem 4} % ${goto 235}${top cpu 4} %
${font Montserrat Light:size=9}${color1}${top_mem name 5} ${color}${font} ${goto 160}${top mem 5} % ${goto 235}${top cpu 5} %
${font Montserrat Light:size=9}${color1}${top_mem name 6} ${color}${font} ${goto 160}${top mem 6} % ${goto 235}${top cpu 6} %
${font Montserrat Light:size=9}${color1}${top_mem name 7} ${color}${font} ${goto 160}${top mem 7} % ${goto 235}${top cpu 7} %
${font Montserrat Light:size=9}${color1}${top_mem name 8} ${color}${font} ${goto 160}${top mem 8} % ${goto 235}${top cpu 8} %
${font Montserrat Light:size=9}${color1}${top_mem name 9} ${color}${font} ${goto 160}${top mem 9} % ${goto 235}${top cpu 9} %
${font Montserrat Light:size=9}${color1}${top_mem name 10} ${color}${font} ${goto 160}${top mem 10} % ${goto 235}${top cpu 10} %

# ${font Montserrat Light:size=10}${color1}${alignr}by: Mo Abdrabou${color}${font}

]];

Gaming

Gamemode

General

[general]
; The reaper thread will check every 5 seconds for exited clients, for config file changes, and for the CPU/iGPU power balance
reaper_freq=5

; The desired governor is used when entering GameMode instead of "performance"
desiredgov=performance
; The default governor is used when leaving GameMode instead of restoring the original value
;defaultgov=powersave

; The iGPU desired governor is used when the integrated GPU is under heavy load
igpu_desiredgov=powersave
; Threshold to use to decide when the integrated GPU is under heavy load.
; This is a ratio of iGPU Watts / CPU Watts which is used to determine when the
; integraged GPU is under heavy enough load to justify switching to
; igpu_desiredgov.  Set this to -1 to disable all iGPU checking and always
; use desiredgov for games.
igpu_power_threshold=0.3

; GameMode can change the scheduler policy to SCHED_ISO on kernels which support it (currently
; not supported by upstream kernels). Can be set to "auto", "on" or "off". "auto" will enable
; with 4 or more CPU cores. "on" will always enable. Defaults to "off".
softrealtime=off

; GameMode can renice game processes. You can put any value between 0 and 20 here, the value
; will be negated and applied as a nice value (0 means no change). Defaults to 0.
renice=10

; By default, GameMode adjusts the iopriority of clients to BE/0, you can put any value
; between 0 and 7 here (with 0 being highest priority), or one of the special values
; "off" (to disable) or "reset" (to restore Linux default behavior based on CPU priority),
; currently, only the best-effort class is supported thus you cannot set it here
ioprio=0

; Sets whether gamemode will inhibit the screensaver when active
; Defaults to 1
inhibit_screensaver=1

Filter

[filter]
; If "whitelist" entry has a value(s)
; gamemode will reject anything not in the whitelist
;whitelist=RiseOfTheTombRaider

; Gamemode will always reject anything in the blacklist
;blacklist=HalfLife3
;    glxgears

GPU

[gpu]
; Here Be Dragons!
; Warning: Use these settings at your own risk
; Any damage to hardware incurred due to this feature is your responsibility and yours alone
; It is also highly recommended you try these settings out first manually to find the sweet spots

; Setting this to the keyphrase "accept-responsibility" will allow gamemode to apply GPU optimisations such as overclocks
;apply_gpu_optimisations=0

; The DRM device number on the system (usually 0), ie. the number in /sys/class/drm/card0/
;gpu_device=0

; Nvidia specific settings
; Requires the coolbits extension activated in nvidia-xconfig
; This corresponds to the desired GPUPowerMizerMode
; "Adaptive"=0 "Prefer Maximum Performance"=1 and "Auto"=2
; See NV_CTRL_GPU_POWER_MIZER_MODE and friends in https://github.com/NVIDIA/nvidia-settings/blob/master/src/libXNVCtrl/NVCtrl.h
;nv_powermizer_mode=1

; These will modify the core and mem clocks of the highest perf state in the Nvidia PowerMizer
; They are measured as Mhz offsets from the baseline, 0 will reset values to default, -1 or unset will not modify values
;nv_core_clock_mhz_offset=0
;nv_mem_clock_mhz_offset=0

; AMD specific settings
; Requires a relatively up to date AMDGPU kernel module
; See: https://dri.freedesktop.org/docs/drm/gpu/amdgpu.html#gpu-power-thermal-controls-and-monitoring
; It is also highly recommended you use lm-sensors (or other available tools) to verify card temperatures
; This corresponds to power_dpm_force_performance_level, "manual" is not supported for now
;amd_performance_level=high

Supervisor

[supervisor]
; This section controls the new gamemode functions gamemode_request_start_for and gamemode_request_end_for
; The whilelist and blacklist control which supervisor programs are allowed to make the above requests
;supervisor_whitelist=
;supervisor_blacklist=

; In case you want to allow a supervisor to take full control of gamemode, this option can be set
; This will only allow gamemode clients to be registered by using the above functions by a supervisor client
;require_supervisor=0

Custom

[custom]
; Custom scripts (executed using the shell) when gamemode starts and ends
;start=notify-send "GameMode started"
;    /home/me/bin/stop_ethmining.sh

;end=notify-send "GameMode ended"
;    /home/me/bin/start_ethmining.sh

; Timeout for scripts (seconds). Scripts will be killed if they do not complete within this time.
;script_timeout=10

MangoHUD

toggle_fps_limit=F1


legacy_layout=false
gpu_stats
gpu_temp
gpu_core_clock
gpu_mem_clock
gpu_power
gpu_load_change
gpu_load_value=50,90
gpu_load_color=FFFFFF,FF7800,CC0000
gpu_text=GPU
cpu_stats
cpu_temp
cpu_power
cpu_mhz
cpu_load_change
core_load_change
cpu_load_value=50,90
cpu_load_color=FFFFFF,FF7800,CC0000
cpu_color=2e97cb
cpu_text=CPU
io_stats
io_read
io_write
io_color=a491d3
swap
vram
vram_color=ad64c1
ram
ram_color=c26693
fps
engine_color=eb5b5b
gpu_name
gpu_color=2e9762
vulkan_driver
wine
wine_color=eb5b5b
frame_timing=1
frametime_color=00ff00
media_player_color=ffffff
background_alpha=0.4
font_size=24
background_color=020202
position=top-left
text_color=ffffff
toggle_hud=Shift_R+F12
toggle_logging=Shift_L+F2
output_folder=/home/sravan
media_player_name=spotify

vkBasalt

casSharpness=1.0
toggleKey = Home
effects = cas

User Programs

Mangal

[downloader]
# Name template of the downloaded chapters
# Available variables:
# {index}        - index of the chapters
# {padded-index} - same as index but padded with leading zeros
# {chapter}      - name of the chapter
chapter_name_template = '{padded-index}_{chapter}'

# Where to download manga
# Absolute or relative.
#
# You can also use home variable
# Linux/macOS = $HOME or ~
# Windows = %USERPROFILE%
path = '/home/sravan/Manga'

[formats]
# Default format to export chapters
# Available options are: pdf, zip, cbz, plain
use = 'pdf'

[history]
# Save chapters to history when downloaded
save_on_download = false
# Save chapters to history on read
save_on_read = true

[icons]
# Icons variant.
# Available options are: emoji, kaomoji, plain, nerd (nerd-font)
variant = 'nerd'

[mangadex]
# Preffered language
language = 'en'
# Show nsfw manga/chapters
nsfw = true
# Show chapters that cannot be read (because they are hosted on a different site)
show_unavailable_chapters = false

[mini]
# Show bye message
bye = true
# Use vim binds to move
vim_mode = true

[reader]
# Name of the app to use as a reader. Will use default OS app if empty
name = 'zathura'
# Will open chapter in the browser instead of downloading it
read_in_browser = false

[logs]
# write logs?
write = false
# Available options are: (from less to most verbose)
# panic, fatal, error, warn, info, debug, trace
level = "info"

SSH

# Arch User Repository (AUR)
Host aur.archlinux.org
  IdentityFile ~/.ssh/aur
  User aur

# CAEN On-Campus
Host caen-oncampus
  HostName oncampus-course.engin.umich.edu
  User balajsra
  Compression yes

# CAEN Off-Campus
Host caen-offcampus
  HostName login-course.engin.umich.edu
  User balajsra
  Compression yes

System Settings

Xinit

Environment Variables

export TERM=xterm-256color            # Sets the terminal type
export SHELL=/usr/bin/fish            # Preferred shell
export EDITOR="emacs"                 # Default editor
export GIT_EDITOR="emacs"             # Default git editor
export BROWSER=vivaldi-stable         # Web Browser
export XDG_CONFIG_HOME=$HOME/.config  # Set Config directory
export QT_QPA_PLATFORMTHEME=qt5ct     # QGtkStyle
export _JAVA_AWT_WM_NONREPARENTING=1  # Java fix for Window Managers

Load Xresources

xrdb ~/.Xresources

Startup Applications & Processes

# Startup Applications
/home/sravan/.scripts/startup.sh --kill-startup &&
    /home/sravan/.scripts/startup.sh --startup

# Delayed Startup Applications
(sleep 5 &&
    /home/sravan/.scripts/startup.sh --kill-delay &&
    /home/sravan/.scripts/startup.sh --delay) &

Launch Environment

exec dwm

Xresources

Colors

! Colors
#define FOREGROUND #F8F8F2
#define BACKGROUND #282A36
#define BLACK1     #000000
#define BLACK2     #4D4D4D
#define WHITE1     #E6E6E6
#define WHITE2     #BFBFBF
#define RED1       #FF5555
#define RED2       #FF6E67
#define GREEN1     #50FA7B
#define GREEN2     #5AF78E
#define YELLOW1    #F1FA8C
#define YELLOW2    #F4F99D
#define PURPLE1    #BD93F9
#define PURPLE2    #CAA9FA
#define PINK1      #FF79C6
#define PINK2      #FF92D0
#define CYAN1      #8BE9FD
#define CYAN2      #9AEDFE
#define ORANGE     #FFB86C

! Dracula Xresources Palette
,*.foreground: FOREGROUND
,*.background: BACKGROUND
,*.color0:     BLACK1
,*.color8:     BLACK2
,*.color1:     RED1
,*.color9:     RED2
,*.color2:     GREEN1
,*.color10:    GREEN2
,*.color3:     YELLOW1
,*.color11:    YELLOW2
,*.color4:     PURPLE1
,*.color12:    PURPLE2
,*.color5:     PINK1
,*.color13:    PINK2
,*.color6:     CYAN1
,*.color14:    CYAN2
,*.color7:     WHITE2
,*.color15:    WHITE1
,*.color16:    ORANGE

Sizes

NOT IN USE

! Regular DPI Parameters
#define DPI 96
#define BAR_HEIGHT 25
#define MODULE_MARGIN 0
#define MODULE_PADDING 0
#define MODULE_DWM_PADDING 2
#define TRAY_MAXSIZE 20
#define TRAY_SCALE 1
#define BORDER_SIZE 2
#define INNER_GAPS 20
#define OUTER_GAPS 10
#define MAXLEN 75
#define CURSOR_SIZE 16
! System76 Oryx Pro 7 DPI Parameters
#define DPI 96
#define BAR_HEIGHT 25
#define MODULE_MARGIN 0
#define MODULE_PADDING 0
#define MODULE_DWM_PADDING 2
#define TRAY_MAXSIZE 20
#define TRAY_SCALE 1
#define BORDER_SIZE 2
#define INNER_GAPS 20
#define OUTER_GAPS 10
#define MAXLEN 25
#define CURSOR_SIZE 16

NOT IN USE

! HiDPI Parameters
#define DPI 192
#define BAR_HEIGHT 50
#define MODULE_MARGIN 0
#define MODULE_PADDING 0
#define MODULE_DWM_PADDING 2
#define TRAY_MAXSIZE 40
#define TRAY_SCALE 1
#define BORDER_SIZE 4
#define INNER_GAPS 40
#define OUTER_GAPS 20
#define MAXLEN 45
#define CURSOR_SIZE 32

Application Specific Changes

dwm
! DWM
dwm.normbordercolor: BLACK2
dwm.normbgcolor:     BACKGROUND
dwm.normfgcolor:     FOREGROUND
dwm.selbordercolor:  PURPLE1
dwm.selbgcolor:      PURPLE1
dwm.selfgcolor:      BACKGROUND
dwm.borderpx:        BORDER_SIZE
dwm.gappih:          INNER_GAPS
dwm.gappiv:          INNER_GAPS
dwm.gappoh:          OUTER_GAPS
dwm.gappov:          OUTER_GAPS
Polybar
! Polybar
polybar.bar-height:         BAR_HEIGHT
polybar.module-margin:      MODULE_MARGIN
polybar.module-padding:     MODULE_PADDING
polybar.module-dwm-padding: MODULE_DWM_PADDING
polybar.tray-maxsize:       TRAY_MAXSIZE
polybar.tray-scale:         TRAY_SCALE
polybar.maxlen:             MAXLEN
Dunst
! Dunst
dunst.geometry-x:           0
dunst.geometry-y:           BAR_HEIGHT
dunst.sep-height:           BORDER_SIZE
dunst.padding:              OUTER_GAPS
dunst.horiz-padding:        OUTER_GAPS
dunst.max-icon-size:        DPI
dunst.frame-width:          BORDER_SIZE
dunst.low-background:       BACKGROUND
dunst.low-foreground:       FOREGROUND
dunst.low-frame:            GREEN1
dunst.normal-background:    BACKGROUND
dunst.normal-foreground:    FOREGROUND
dunst.normal-frame:         GREEN1
dunst.critical-background:  RED1
dunst.critical-foreground:  FOREGROUND
dunst.critical-frame:       GREEN1
Display Scaling
! Display Scaling
,*.dpi: DPI
Xcursor.size: CURSOR_SIZE

Miscellaneous Scripts

Media Control

help_menu() {
    echo "Script to interact with playerctl. Use only one argument at a time."
    echo "  - Play / Pause:  playerctl.sh --play-pause"
    echo "  - Next:          playerctl.sh --next"
    echo "  - Previous:      playerctl.sh --prev"
    echo "  - Change Player: playerctl.sh --change"
    echo "  - Rofi Menu:     playerctl.sh --rofi"
    echo "  - Help:          playerctl.sh --help OR playerctl.sh -h"
}

rofi_menu() {
    declare -a options=(
        "懶 Play / Pause - play-pause"
        "怜 Next - next"
        "玲 Previous - prev"
        " Change Source - change"
        " Back - back"
        " Quit - quit"
    )

    choice=$(printf '%s\n' "${options[@]}" | rofi -dmenu -i)
    option=$(printf '%s\n' "${choice}" | awk '{print $NF}')

    if [[ "$option" == "quit" ]]; then
        killall rofi
    elif [[ "$option" != "back" ]]; then
        main "--$option" && main "--rofi"
    fi
}

main() {
    if [ $# -eq 0 ]; then
        # No arguments
        help_menu
    else
        case $1 in
        --help | -h)
            help_menu
            ;;
        --play-pause)
            playerctl --player=playerctld play-pause
            ;;
        --next)
            playerctl --player=playerctld next
            ;;
        --prev)
            playerctl --player=playerctld previous
            ;;
        --change)
            playerctld shift
            ;;
        --rofi)
            rofi_menu
            ;;
        esac
    fi
}

main $@

Volume Control

help_menu() {
    echo "Script to interact with pactl. Use only one argument at a time."
    # echo "  - Play / Pause:  playerctl.sh --play-pause"
    # echo "  - Next:          playerctl.sh --next"
    # echo "  - Previous:      playerctl.sh --prev"
    # echo "  - Change Player: playerctl.sh --change"
    # echo "  - Rofi Menu:     playerctl.sh --rofi"
    # echo "  - Help:          playerctl.sh --help OR playerctl.sh -h"
}

rofi_menu() {
    declare -a options=(
        " Raise Volume - raise"
        " Lower Volume - lower"
        " Mute - mute"
        " Mixer - mixer"
        " Back - back"
        " Quit - quit"
    )

    choice=$(printf '%s\n' "${options[@]}" | rofi -dmenu -i)
    option=$(printf '%s\n' "${choice}" | awk '{print $NF}')

    if [[ "$option" == "quit" ]]; then
        killall rofi
    elif [[ "$option" != "back" ]]; then
        main "--$option" && main "--rofi"
    fi
}

main() {
    if [ $# -eq 0 ]; then
        # No arguments
        help_menu
    else
        case $1 in
        --help | -h)
            help_menu
            ;;
        --raise)
            pactl set-sink-volume @DEFAULT_SINK@ +5%
            ;;
        --lower)
            pactl set-sink-volume @DEFAULT_SINK@ -5%
            ;;
        --mute)
            pactl set-sink-mute @DEFAULT_SINK@ toggle
            ;;
        --mixer)
            pavucontrol
            ;;
        --rofi)
            rofi_menu
            ;;
        esac
    fi
}

main $@

Brightness Control

help_menu() {
    echo "Script to interact with pactl. Use only one argument at a time."
    # echo "  - Play / Pause:  playerctl.sh --play-pause"
    # echo "  - Next:          playerctl.sh --next"
    # echo "  - Previous:      playerctl.sh --prev"
    # echo "  - Change Player: playerctl.sh --change"
    # echo "  - Rofi Menu:     playerctl.sh --rofi"
    # echo "  - Help:          playerctl.sh --help OR playerctl.sh -h"
}

rofi_menu() {
    declare -a options=(
        " Raise Brightness - raise"
        " Lower Brightness - lower"
        " Back - back"
        " Quit - quit"
    )

    choice=$(printf '%s\n' "${options[@]}" | rofi -dmenu -i)
    option=$(printf '%s\n' "${choice}" | awk '{print $NF}')

    if [[ "$option" == "quit" ]]; then
        killall rofi
    elif [[ "$option" != "back" ]]; then
        main "--$option" && main "--rofi"
    fi
}

main() {
    if [ $# -eq 0 ]; then
        # No arguments
        help_menu
    else
        case $1 in
        --help | -h)
            help_menu
            ;;
        --raise)
            xdotool key XF86MonBrightnessUp
            ;;
        --lower)
            xdotool key XF86MonBrightnessDown
            ;;
        --rofi)
            rofi_menu
            ;;
        esac
    fi
}

main $@

Trackpad Control

trackpad_id=13

if xinput list-props $trackpad_id | grep "Device Enabled (.*):.*1" >/dev/null
then
    xinput disable $trackpad_id
    notify-send -u low -i mouse "Trackpad disabled"
else
    xinput enable $trackpad_id
    notify-send -u low -i mouse "Trackpad enabled"
fi

CPU & GPU Control

help_menu() {
    echo "Script to control CPU & GPU modes / performance profiles. Use only one argument at a time."
    # echo "  - Play / Pause:  playerctl.sh --play-pause"
    # echo "  - Next:          playerctl.sh --next"
    # echo "  - Previous:      playerctl.sh --prev"
    # echo "  - Change Player: playerctl.sh --change"
    # echo "  - Rofi Menu:     playerctl.sh --rofi"
    # echo "  - Help:          playerctl.sh --help OR playerctl.sh -h"
}

rofi_menu() {
    declare -a options=(
        " CPU Performance Profile - rofi-cpu-profile"
        " GPU Switching - rofi-graphics"
        " NVIDIA GPU Performance Profile - rofi-gpu-profile"
        " Back - back"
        " Quit - quit"
    )

    choice=$(printf '%s\n' "${options[@]}" | rofi -dmenu -i)
    option=$(printf '%s\n' "${choice}" | awk '{print $NF}')

    if [[ "$option" == "quit" ]]; then
        killall rofi
    elif [[ "$option" != "back" ]]; then
        main "--$option" && main "--rofi"
    fi
}

rofi_cpu_profile_menu() {
    declare -a options=(
        "Query Current Profile - cpu-profile-query"
        "Switch to Battery Mode - cpu-profile-battery"
        "Switch to Balanced Mode - cpu-profile-balanced"
        "Switch to Performance Mode - cpu-profile-performance"
        " Back - back"
        " Quit - quit"
    )

    choice=$(printf '%s\n' "${options[@]}" | rofi -dmenu -i)
    option=$(printf '%s\n' "${choice}" | awk '{print $NF}')

    if [[ "$option" == "quit" ]]; then
        killall rofi
    elif [[ "$option" != "back" ]]; then
        main "--$option" && main "--rofi-cpu-profile"
    fi
}

rofi_graphics_menu() {
    declare -a options=(
        "Query Current Graphics - graphics-query"
        "Switch to Compute Mode - graphics-compute"
        "Switch to Hybrid Mode - graphics-hybrid"
        "Switch to Integrated Mode - graphics-integrated"
        "Switch to Nvidia Mode - graphics-nvidia"
        " Back - back"
        " Quit - quit"
    )

    choice=$(printf '%s\n' "${options[@]}" | rofi -dmenu -i)
    option=$(printf '%s\n' "${choice}" | awk '{print $NF}')

    if [[ "$option" == "quit" ]]; then
        killall rofi
    elif [[ "$option" != "back" ]]; then
        main "--$option" && main "--rofi-graphics"
    fi
}

rofi_gpu_profile_menu() {
    declare -a options=(
        "Query Current Profile - gpu-profile-query"
        "Switch to Adaptive Mode - gpu-profile-adaptive"
        "Switch to Performance Mode - gpu-profile-performance"
        "Switch to Auto Mode - gpu-profile-auto"
        " Back - back"
        " Quit - quit"
    )

    choice=$(printf '%s\n' "${options[@]}" | rofi -dmenu -i)
    option=$(printf '%s\n' "${choice}" | awk '{print $NF}')

    if [[ "$option" == "quit" ]]; then
        killall rofi
    elif [[ "$option" != "back" ]]; then
        main "--$option" && main "--rofi-gpu-profile"
    fi
}

main() {
    if [ $# -eq 0 ]; then
        # No arguments
        help_menu
    else
        case $1 in
        --help | -h)
            help_menu
            ;;
        --rofi-graphics)
            rofi_graphics_menu
            ;;
        --graphics-query)
            current_graphics=$(pkexec system76-power graphics)
            notify-send "System76-Power Graphics" "$current_graphics"
            ;;
        --graphics-compute)
            notify-send "System76-Power Graphics" "Switching to Compute Graphics..."
            pkexec system76-power graphics compute
            notify-send -u critical -t 0 "System76-Power Graphics" "Please restart computer to switch graphics"
            ;;
        --graphics-hybrid)
            notify-send "System76-Power Graphics" "Switching to Hybrid Graphics..."
            pkexec system76-power graphics hybrid
            notify-send -u critical -t 0 "System76-Power Graphics" "Please restart computer to switch graphics"
            ;;
        --graphics-integrated)
            notify-send "System76-Power Graphics" "Switching to Integrated Graphics..."
            pkexec system76-power graphics integrated
            notify-send -u critical -t 0 "System76-Power Graphics" "Please restart computer to switch graphics"
            ;;
        --graphics-nvidia)
            notify-send "System76-Power Graphics" "Switching to Nvidia Graphics..."
            pkexec system76-power graphics nvidia
            notify-send -u critical -t 0 "System76-Power Graphics" "Please restart computer to switch graphics"
            ;;
        --rofi-cpu-profile)
            rofi_cpu_profile_menu
            ;;
        --cpu-profile-query)
            current_profile=$(pkexec system76-power profile)
            notify-send "System76-Power CPU Profile" "$current_profile"
            ;;
        --cpu-profile-battery)
            pkexec system76-power profile battery
            notify-send "System76-Power CPU Profile" "Switched to Battery Profile"
            ;;
        --cpu-profile-balanced)
            pkexec system76-power profile balanced
            notify-send "System76-Power CPU Profile" "Switched to Balanced Profile"
            ;;
        --cpu-profile-performance)
            pkexec system76-power profile performance
            notify-send "System76-Power CPU Profile" "Switched to Performance Profile"
            ;;
        --rofi-gpu-profile)
            rofi_gpu_profile_menu
            ;;
        --gpu-profile-query)
            current_profile=$(nvidia-settings -q GpuPowerMizerMode)
            notify-send "NVIDIA GPU Profile" "$current_profile"
            ;;
        --gpu-profile-adaptive)
            nvidia-settings -a "[gpu:0]/GpuPowerMizerMode=0"
            notify-send "NVIDIA GPU Profile" "Switched to Adaptive Profile"
            ;;
        --gpu-profile-performance)
            nvidia-settings -a "[gpu:0]/GpuPowerMizerMode=1"
            notify-send "NVIDIA GPU Profile" "Switched to Performance Profile"
            ;;
        --gpu-profile-auto)
            nvidia-settings -a "[gpu:0]/GpuPowerMizerMode=2"
            notify-send "NVIDIA GPU Profile" "Switched to Auto Profile"
            ;;
        --rofi)
            rofi_menu
            ;;
        esac
    fi
}

main $@

Session Control

help_menu() {
    echo "Script to interact with desktop session. Use only one argument at a time."
    # echo "  - Play / Pause:  playerctl.sh --play-pause"
    # echo "  - Next:          playerctl.sh --next"
    # echo "  - Previous:      playerctl.sh --prev"
    # echo "  - Change Player: playerctl.sh --change"
    # echo "  - Rofi Menu:     playerctl.sh --rofi"
    # echo "  - Help:          playerctl.sh --help OR playerctl.sh -h"
}

rofi_menu() {
    declare -a options=(
        "勒 Restart Dwm - restart"
        " Logout - logout"
        " Lock - lock"
        "⏾ Sleep - sleep"
        " Reboot - reboot"
        " Shutdown - shutdown"
        "鈴 Hibernate - hibernate"
        " Back - back"
        " Quit - quit"
    )

    choice=$(printf '%s\n' "${options[@]}" | rofi -dmenu -i)
    option=$(printf '%s\n' "${choice}" | awk '{print $NF}')

    if [[ "$option" == "quit" ]]; then
        killall rofi
    elif [[ "$option" != "back" ]]; then
        main "--$option" && killall rofi
    fi
}

main() {
    if [ $# -eq 0 ]; then
        # No arguments
        help_menu
    else
        case $1 in
        --help | -h)
            help_menu
            ;;
        --logout)
            notify-send "Session Control" "Logging Out of Dwm"
            xdotool key Super+Shift_L+q
            ;;
        --lock)
            notify-send "Session Control" "Locking Session"
            loginctl lock-session
            ;;
        --sleep)
            notify-send "Session Control" "Going to Sleep"
            systemctl suspend
            ;;
        --reboot)
            notify-send "Session Control" "Rebooting System"
            reboot
            ;;
        --shutdown)
            notify-send "Session Control" "Shutting Down System"
            shutdown now
            ;;
        --hibernate)
            notify-send "Session Control" "Hibernating System"
            systemctl hibernate
            ;;
        --restart)
            notify-send "Session Control" "Restarting Dwm"
            xdotool key Super+Control_L+Shift_L+q
            ;;
        --rofi)
            rofi_menu
            ;;
        esac
    fi
}

main $@

Startup

declare -a startup_array=(\
    # Background Processes
    "bash /home/sravan/.scripts/deadd.sh --on" \                   # Deadd Notification Center
    "bash /home/sravan/.scripts/picom.sh --on" \                   # Picom Compositor
    "/usr/bin/greenclip daemon" \                                  # Greenclip Clipboard Manager
    "/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1" \  # GNOME Polkit Authentication Agent
    "/usr/bin/xss-lock -l -- betterlockscreen --lock" \            # Session Lock Utility
    "/usr/lib/kdeconnectd --replace" \                             # KDE Connect Daemon
    "/usr/bin/redshift -x" \                                       # Redshift Blue Light Filter
)

declare -a kill_startup_array=(\
    # Background Processes
    "killall deadd-notificat" \  # Deadd Notification Center
    "killall picom" \            # Picom Compositor
    "killall greenclip" \        # Greenclip Clipboard Manager
    "killall polkit" \           # GNOME Polkit Authentication Agent
    "killall xss-lock" \         # Session Lock Utility
    "killall kdeconnectd" \      # KDE Connect Daemon
    "killall redshift" \         # Redshift Blue Light Filter
)

declare -a delay_array=(\
    # System Tray Applications
    "/usr/bin/redshift-gtk" \                # Redshift Blue Light Filter
    "/usr/bin/blueman-applet" \              # Blueman Bluetooth Manager
    "/usr/bin/nm-applet" \                   # Network Manager Applet
    "/usr/bin/kdeconnect-indicator" \        # KDE Connect Indicator
    "/usr/bin/flameshot" \                   # Flameshot Screenshot Tool
    "/usr/bin/xfce4-power-manager" \         # XFCE4 Power Manager
    "/usr/bin/udiskie -a -n -s" \            # Udiskie
    "/usr/bin/openrgb" \                     # OpenRGB
    # System Restore Processes
    "/usr/bin/autorandr --change --force" \  # Auto restore screen layout
    "/usr/bin/numlockx on" \                 # Enable numlock
)

declare -a kill_delay_array=(\
    # System Tray Applications
    "killall redshift" \              # Redshift Blue Light Filter
    "killall blueman-applet" \        # Blueman Bluetooth Manager
    "killall nm-applet" \             # Network Manager Applet
    "killall kdeconnect-indicator" \  # KDE Connect Indicator
    "killall flameshot" \             # Flameshot Screenshot Tool
    "killall xfce4-power-manager" \   # XFCE4 Power Manager
    "killall udiskie" \               # Udiskie
    "killall openrgb" \               # OpenRGB
)

help_menu() {
    echo "Main script to launch and kill startup processes. Use only one argument at a time."
    # echo "  - Play / Pause:  playerctl.sh --play-pause"
    # echo "  - Next:          playerctl.sh --next"
    # echo "  - Previous:      playerctl.sh --prev"
    # echo "  - Change Player: playerctl.sh --change"
    # echo "  - Rofi Menu:     playerctl.sh --rofi"
    # echo "  - Help:          playerctl.sh --help OR playerctl.sh -h"
}

rofi_menu() {
    declare -a options=(
        " Launch Startup Processes - startup"
        "羽 Launch Delayed Processes - delay"
        " Kill Startup Processes - kill-startup"
        " Kill Delayed Processes - kill-delay"
        " Back - back"
        " Quit - quit"
    )

    choice=$(printf '%s\n' "${options[@]}" | rofi -dmenu -i)
    option=$(printf '%s\n' "${choice}" | awk '{print $NF}')

    if [[ "$option" == "quit" ]]; then
        killall rofi
    elif [[ "$option" != "back" ]]; then
        main "--$option" && main "--rofi"
    fi
}

main() {
    if [ $# -eq 0 ]; then
        # No arguments
        help_menu
    else
        case $1 in
        --help | -h)
            help_menu
            ;;
        --startup)
            for i in "${startup_array[@]}"
            do
                if ! command -v $i > /dev/null
                then
                    do_nothing() { :; }
                else
                    $i &
                fi
            done
            ;;
        --delay)
            for i in "${delay_array[@]}"
            do
                if ! command -v $i > /dev/null
                then
                    do_nothing() { :; }
                else
                    $i &
                fi
            done
            ;;
        --kill-startup)
            for i in "${kill_startup_array[@]}"
            do
                if ! command -v $i > /dev/null
                then
                    do_nothing() { :; }
                else
                    $i &
                fi
            done
            ;;
        --kill-delay)
            for i in "${kill_delay_array[@]}"
            do
                if ! command -v $i > /dev/null
                then
                    do_nothing() { :; }
                else
                    $i &
                fi
            done
            ;;
        --rofi)
            rofi_menu
            ;;
        esac
    fi
}

main $@

Gaming

These are scripts that should be run from Lutris when launching or exiting a game.

Pre-Launch Script

Preferences > System options > Pre-launch script

/home/sravan/.scripts/picom.sh --off
/home/sravan/.scripts/cpu-gpu.sh --gpu-profile-performance
/home/sravan/.scripts/deadd.sh --pause

Post-Exit Script

Preferences > System options > Post-exit script

/home/sravan/.scripts/deadd.sh --unpause
/home/sravan/.scripts/cpu-gpu.sh --gpu-profile-adaptive

Rsync

Rsync Options

Option Description
—— ———–
-a quick way of saying you want recursion and want to perserve almost everything
-v increases the amount of information you are given during the transfer
-L transform symlink into referent file/dir
progress show progress during transfer
delete delete extraneous files from dest dirs

Laptop to Cloud

# Define base paths
gdrive_path="/mnt/google-drive"
gdrive_personal_path="$gdrive_path/sr98vn@gmail.com"
home_path="/home/sravan"

# Define arrays
declare -a source_dirs=(
    "$home_path/Calibre_Library/"
    "$home_path/Pictures/Wallpapers/"
    "$home_path/Documents/"
)
declare -a target_dirs=(
    "$gdrive_personal_path/Calibre Library/"
    "$gdrive_personal_path/Customization/Wallpapers/Desktop/"
    "$gdrive_personal_path/Documents/"
)

# Loop through arrays
for i in ${!source_dirs[@]}; do
    # Create target directories
    mkdir -p "${target_dirs[$i]}"

    # Copy source dirs to target dirs
    rsync -a -v -L --progress --delete \
        "${source_dirs[$i]}" \
        "${target_dirs[$i]}"
done

Laptop to External HDD

# Define base paths
external_hdd_path="/run/media/sravan/Seagate 5TB"
backup_path="$external_hdd_path/Backups"
home_path="/home/sravan"

# Define arrays
declare -a source_dirs=(
    "$home_path/Calibre_Library/"
    "$home_path/ISOs/"
    "$home_path/Manga/"
    "$home_path/Music/"
    "$home_path/Pictures/"
    "$home_path/Videos/"
    "$home_path/Games/"
    "$home_path/.config/lutris/"
    "$home_path/.config/dolphin-emu/"
    "$home_path/.config/retroarch/"
    "$home_path/.config/rpcs3/"
    "$home_path/.config/PCSX2/"
    "$home_path/.cache/lutris/"
)
declare -a target_dirs=(
    "$backup_path/Calibre_Library/"
    "$backup_path/ISOs/"
    "$backup_path/Manga/"
    "$backup_path/Music/"
    "$backup_path/Pictures/"
    "$backup_path/Videos/"
    "$backup_path/Games/"
    "$backup_path/.config/lutris/"
    "$backup_path/.config/dolphin-emu/"
    "$backup_path/.config/retroarch/"
    "$backup_path/.config/rpcs3/"
    "$backup_path/.config/PCSX2/"
    "$backup_path/.cache/lutris/"
)

# Loop through arrays
for i in ${!source_dirs[@]}; do
    # Create target directories
    mkdir -p "${target_dirs[$i]}"

    # Copy source dirs to target dirs
    rsync -a -v -L --progress --delete \
        --exclude '*/dosdevices/' \
        "${source_dirs[$i]}" \
        "${target_dirs[$i]}"
done

Laptop to Phone

# Define base paths
phone_path="/run/user/1000/b2c922a2358570a6"
home_path="/home/sravan"

# Define arrays
declare -a source_dirs=(
    "$home_path/Manga/"
    "$home_path/Videos/"
)
declare -a target_dirs=(
    "$phone_path/Manga/"
    "$phone_path/Videos/"
)

# Loop through arrays
for i in ${!source_dirs[@]}; do
    # Create target directories
    mkdir -p "${target_dirs[$i]}"

    # Copy source dirs to target dirs
    rsync -a -v -L --progress --delete \
        "${source_dirs[$i]}" \
        "${target_dirs[$i]}"
done

Rofi Menu

help_menu() {
    echo "Main menu to launch run rsync scripts. Use only one argument at a time."
    # echo "  - Play / Pause:  playerctl.sh --play-pause"
    # echo "  - Next:          playerctl.sh --next"
    # echo "  - Previous:      playerctl.sh --prev"
    # echo "  - Change Player: playerctl.sh --change"
    # echo "  - Rofi Menu:     playerctl.sh --rofi"
    # echo "  - Help:          playerctl.sh --help OR playerctl.sh -h"
}

rofi_menu() {
    declare -a options=(
        "   - rsync-laptop-to-cloud"
        "   - rsync-laptop-to-external-hdd"
        "   - rsync-laptop-to-phone"
        " Back - back"
        " Quit - quit"
    )

    choice=$(printf '%s\n' "${options[@]}" | rofi -dmenu -i)
    option=$(printf '%s\n' "${choice}" | awk '{print $NF}')

    if [[ "$option" == "quit" ]]; then
        killall rofi
    elif [[ "$option" != "back" ]]; then
        main "--$option" && killall rofi
    fi
}

main() {
    if [ $# -eq 0 ]; then
        # No arguments
        help_menu
    else
        case $1 in
        --help | -h)
            help_menu
            ;;
        --rsync-laptop-to-cloud)
            kitty --hold /home/sravan/.scripts/rsync_laptop_to_cloud.sh
            ;;
        --rsync-laptop-to-external-hdd)
            kitty --hold /home/sravan/.scripts/rsync_laptop_to_external_hdd.sh
            ;;
        --rsync-laptop-to-phone)
            kitty --hold /home/sravan/.scripts/rsync_laptop_to_phone.sh
            ;;
        --rofi)
            rofi_menu
            ;;
        esac
    fi
}

main $@

Control Center

help_menu() {
    echo "Main script to launch sub-menu scripts. Use only one argument at a time."
    # echo "  - Play / Pause:  playerctl.sh --play-pause"
    # echo "  - Next:          playerctl.sh --next"
    # echo "  - Previous:      playerctl.sh --prev"
    # echo "  - Change Player: playerctl.sh --change"
    # echo "  - Rofi Menu:     playerctl.sh --rofi"
    # echo "  - Help:          playerctl.sh --help OR playerctl.sh -h"
}

rofi_menu() {
    declare -a options=(
        " Compositor - picom"
        " Display - brightness"
        " Notifications - deadd"
        " Media - playerctl"
        "墳Volume - pactl"
        "痢 Rsync - rsync"
        " Startup Processes - startup"
        " Hardware - cpu-gpu"
        " Power Menu - session"
        " Back - back"
        " Quit - quit"
    )

    choice=$(printf '%s\n' "${options[@]}" | rofi -dmenu -i)
    option=$(printf '%s\n' "${choice}" | awk '{print $NF}')

    if [[ "$option" == "quit" ]]; then
        killall rofi
    elif [[ "$option" != "back" ]]; then
        main "--$option" && main "--rofi"
    fi
}

main() {
    if [ $# -eq 0 ]; then
        # No arguments
        help_menu
    else
        case $1 in
        --help | -h)
            help_menu
            ;;
        --picom)
            /home/sravan/.scripts/picom.sh --rofi
            ;;
        --brightness)
            /home/sravan/.scripts/brightness.sh --rofi
            ;;
        --deadd)
            /home/sravan/.scripts/deadd.sh --rofi
            ;;
        --playerctl)
            /home/sravan/.scripts/playerctl.sh --rofi
            ;;
        --pactl)
            /home/sravan/.scripts/pactl.sh --rofi
            ;;
        --rsync)
            /home/sravan/.scripts/rsync.sh --rofi
            ;;
        --startup)
            /home/sravan/.scripts/startup.sh --rofi
            ;;
        --cpu-gpu)
            /home/sravan/.scripts/cpu-gpu.sh --rofi
            ;;
        --session)
            /home/sravan/.scripts/session.sh --rofi
            ;;
        --rofi)
            rofi_menu
            ;;
        esac
    fi
}

main $@

Acknowledgements

I previously used DistroTube's process for setting up a git bare repository as shown in Git Bare Repository - A Better Way To Manage Dotfiles. He references The best way to store your dotfiles: A bare Git repository by Nicola Paolucci.

I have since switched to using GNU Stow as described in System Crafters' video called Give Your Dotfiles a Home with GNU Stow.