diff --git a/hyprland/.config/dunst/dunstrc b/hyprland/.config/dunst/dunstrc new file mode 100644 index 00000000..3c0eff4f --- /dev/null +++ b/hyprland/.config/dunst/dunstrc @@ -0,0 +1,66 @@ +# vim: set ft=cfg: +[global] + ## BEHAVIOR + follow = mouse # Notifications follow the monitor with the mouse + format = "%s (%a)\n%b" + hide_duplicate_count = false # Hide count of stacked notifs + ignore_newline = false # Ignore \n (for some reason) + indicate_hidden = true # Show how many messages are currently hidden + idle_threshold = 120 # Time in seconds before user is considered idle + markup = full # Whether to disable markup features (see manpage) + show_age_threshold = 60 # Shows age if message is older than this (in sec) + show_indicators = true # Show hints for interactable notifs + sort = true # Sort messages by urgency. + stack_duplicates = true + timeout = 10 # Time in seconds before the thing fades + + ## MISC CONFIGURATION + always_run_script = true # Runs scripts for rules even if they're hidden + browser = xdg-open + dmenu = /usr/bin/rofi -dmenu -p dunst: + + ## WINDOW CONFIGURATION + title = Dunst + class = Dunst + + ## HISTORY + sticky_history = yes # Notifs pulled from history stay onscreen + history_length = 20 # Buffer size + + ## LOOKS + # COLORS + # Note that rules defined later on can and will override these + # All colors must be quoted so as to not misinterpret as comments + background= "#fbf1c7" # Background of the notification + frame_color = "#f2e5bc" + separator_color = frame + foreground = "#3c3836" # Font color, for body and title + highlight = "#b8bb26" # Progress bars + # SIZE AND POSITIONING + width = 400 + height = 300 + offset = 8x8 # This takes into account any bars + corner_radius = 0 + transparency = 0 + # PROGRESS BAR + progress_bar = true + progress_bar_horizontal_alignment = left + progress_bar_frame_width = 2 + progress_bar_height = 8 + # INTERIOR FORMATTING + frame_width = 6 # Defines width in pixels of frame + horizontal_padding = 12 # Horizontal padding. + padding = 12 # Padding between text and separator. + separator_height = 4 + # TEXT + alignment = left + font = IBM Plex Sans 10 + line_height = 0 + word_wrap = yes + # ICONS + icon_path = /usr/share/icons/Papirus-Light/48x48/status/:/usr/share/icons/Papirus-Light/48x48/devices/:/usr/share/icons/Papirus-Light/48x48/apps + icon_position = right + max_icon_size = 48 + +[urgency_critical] + foreground = "#fb4934" diff --git a/hyprland/.config/dunst/dunstrc-light b/hyprland/.config/dunst/dunstrc-light new file mode 100644 index 00000000..365be6b2 --- /dev/null +++ b/hyprland/.config/dunst/dunstrc-light @@ -0,0 +1,321 @@ +[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 = mouse + + # 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 = "500x8-6+50" + corner_radius = 0 + + # 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 = 0 + + # 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 = 4 + + # Padding between text and separator. + padding = 12 + + # Horizontal padding. + horizontal_padding = 12 + + # Defines width in pixels of frame around the notification window. + # Set to 0 to disable. + frame_width = 4 + + # Defines color of the frame around the notification window. + frame_color = "#32302f" + + # 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 = frame + + # 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. + idle_threshold = 120 + + ### Text ### + + #font = Monospace 8 + font = Roboto 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: + # bold + # italic + # strikethrough + # underline + # + # For a complete reference see + # . + # + # 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 + # Markup is allowed + format = "%s (%a)\n%b" + + # Alignment of message text. + # Possible values are "left", "center" and "right". + alignment = left + + # 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 + + # Ignore newlines '\n' in notifications. + ignore_newline = no + + # Merge multiple notifications with the same content + stack_duplicates = true + + # Hide the count of merged 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 = right + + # Scale larger icons down to this size, set to 0 to disable + max_icon_size = 48 + + # Paths to default icons. + icon_path = /usr/share/icons/Papirus-Dark/48x48/status/:/usr/share/icons/Papirus-Dark/48x48/devices/:/usr/share/icons/Papirus-Dark/48x48/apps + + ### 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 -p dunst: + + # Browser for opening urls in context menu. + browser = xdg-open + + # 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 = 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 + +# 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 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 = mod1+shift+space + + # Close all notifications. + close_all = mod1+shift+enter + + # 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 = mod1+shift+d + + # Context menu. + context = mod1+shift+o + +[urgency_low] + # IMPORTANT: colors have to be defined in quotation marks. + # Otherwise the "#" and following would be interpreted as a comment. + background = "#282828" + foreground = "#ebdbb2" + timeout = 10 + # Icon for notifications with low urgency, uncomment to enable + #icon = /path/to/icon + +[urgency_normal] + background = "#282828" + foreground = "#ebdbb2" + timeout = 10 + # Icon for notifications with normal urgency, uncomment to enable + #icon = /path/to/icon + +[urgency_critical] + background = "#282828" + foreground = "#fabd2f" + timeout = 0 + # Icon for notifications with critical urgency, uncomment to enable + #icon = /path/to/icon + +# 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", "summary", "body", "icon", "category", +# "msg_urgency" and you can override the "timeout", "urgency", "foreground", +# "background", "new_icon" and "format". +# Shell-like globbing will get expanded. +# +# 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. + +#[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 + +#[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 +# +# vim: ft=cfg diff --git a/hyprland/.config/foot/foot.ini b/hyprland/.config/foot/foot.ini new file mode 100644 index 00000000..54bccaf1 --- /dev/null +++ b/hyprland/.config/foot/foot.ini @@ -0,0 +1,200 @@ +# -*- conf -*- + +# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd) +# term=foot (or xterm-256color if built with -Dterminfo=disabled) +term=xterm-256color +# login-shell=no + +# app-id=foot # globally set wayland app-id. Default values are "foot" and "footclient" for desktop and server mode +# title=foot +# locked-title=no + +# font=monospace:size=8 +font=IBM Plex Mono:size=9 +# font-bold= +# font-italic= +# font-bold-italic= +# font-size-adjustment=0.5 +# line-height= +# letter-spacing=0 +# horizontal-letter-offset=0 +# vertical-letter-offset=0 +# underline-offset= +# underline-thickness= +# box-drawings-uses-font-glyphs=no +# dpi-aware=no + +# initial-window-size-pixels=700x500 # Or, +# initial-window-size-chars= +# initial-window-mode=windowed +# pad=0x0 # optionally append 'center' +# resize-delay-ms=100 + +# notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body} + +# bold-text-in-bright=no +# word-delimiters=,│`|:"'()[]{}<> +# selection-target=primary +# workers= +# utmp-helper=/usr/lib/utempter/utempter # When utmp backend is ‘libutempter’ (Linux) +# utmp-helper=/usr/libexec/ulog-helper # When utmp backend is ‘ulog’ (FreeBSD) + +[environment] +# name=value + +[bell] +# urgent=no +# notify=no +# command= +# command-focused=no + +[scrollback] +# lines=1000 +# multiplier=3.0 +# indicator-position=relative +# indicator-format="" + +[url] +# launch=xdg-open ${url} +# label-letters=sadfjklewcmpgh +# osc8-underline=url-mode +# protocols=http, https, ftp, ftps, file, gemini, gopher +# uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="'()[] + +[cursor] +# style=block +# color= +# blink=no +# beam-thickness=1.5 +# underline-thickness= + +[mouse] +# hide-when-typing=no +# alternate-scroll-mode=yes + +[touch] +# long-press-delay=400 + +[colors] +background=282828 +foreground=ebdbb2 +regular0=282828 +regular1=cc241d +regular2=98971a +regular3=d79921 +regular4=458588 +regular5=b16286 +regular6=689d6a +regular7=a89984 +bright0=928374 +bright1=fb4934 +bright2=b8bb26 +bright3=fabd2f +bright4=83a598 +bright5=d3869b +bright6=8ec07c +bright7=ebdbb2 + +## dimmed colors (see foot.ini(5) man page) +# dim0= +# ... +# dim7= + +## The remaining 256-color palette +# 16 = <256-color palette #16> +# ... +# 255 = <256-color palette #255> + +## Misc colors +# selection-foreground= +# selection-background= +# jump-labels= # black-on-yellow +# scrollback-indicator= # black-on-bright-blue +# search-box-no-match= # black-on-red +# search-box-match= # black-on-yellow +# urls= + +[csd] +# preferred=server +# size=26 +# font= +# color= +# hide-when-maximized=no +# double-click-to-maximize=yes +# border-width=0 +# border-color= +# button-width=26 +# button-color= +# button-minimize-color= +# button-maximize-color= +# button-close-color= + +[key-bindings] +# scrollback-up-page=Shift+Page_Up +# scrollback-up-half-page=none +# scrollback-up-line=none +# scrollback-down-page=Shift+Page_Down +# scrollback-down-half-page=none +# scrollback-down-line=none +# clipboard-copy=Control+Shift+c XF86Copy +# clipboard-paste=Control+Shift+v XF86Paste +# primary-paste=Shift+Insert +# search-start=Control+Shift+r +# font-increase=Control+plus Control+equal Control+KP_Add +# font-decrease=Control+minus Control+KP_Subtract +# font-reset=Control+0 Control+KP_0 +# spawn-terminal=Control+Shift+n +# minimize=none +# maximize=none +# fullscreen=none +# pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none +# pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none +# pipe-selected=[xargs -r firefox] none +# show-urls-launch=Control+Shift+o +# show-urls-copy=none +# show-urls-persistent=none +# prompt-prev=Control+Shift+z +# prompt-next=Control+Shift+x +# unicode-input=Control+Shift+u +# noop=none + +[search-bindings] +# cancel=Control+g Control+c Escape +# commit=Return +# find-prev=Control+r +# find-next=Control+s +# cursor-left=Left Control+b +# cursor-left-word=Control+Left Mod1+b +# cursor-right=Right Control+f +# cursor-right-word=Control+Right Mod1+f +# cursor-home=Home Control+a +# cursor-end=End Control+e +# delete-prev=BackSpace +# delete-prev-word=Mod1+BackSpace Control+BackSpace +# delete-next=Delete +# delete-next-word=Mod1+d Control+Delete +# extend-to-word-boundary=Control+w +# extend-to-next-whitespace=Control+Shift+w +# clipboard-paste=Control+v Control+Shift+v Control+y XF86Paste +# primary-paste=Shift+Insert +# unicode-input=none + +[url-bindings] +# cancel=Control+g Control+c Control+d Escape +# toggle-url-visible=t + +[text-bindings] +# \x03=Mod4+c # Map Super+c -> Ctrl+c + +[mouse-bindings] +# selection-override-modifiers=Shift +# primary-paste=BTN_MIDDLE +# select-begin=BTN_LEFT +# select-begin-block=Control+BTN_LEFT +# select-extend=BTN_RIGHT +# select-extend-character-wise=Control+BTN_RIGHT +# select-word=BTN_LEFT-2 +# select-word-whitespace=Control+BTN_LEFT-2 +# select-row=BTN_LEFT-3 + +# vim: ft=dosini diff --git a/hyprland/.config/rofi/config.rasi b/hyprland/.config/rofi/config.rasi new file mode 100644 index 00000000..4410d978 --- /dev/null +++ b/hyprland/.config/rofi/config.rasi @@ -0,0 +1,129 @@ +/* + * config.rasi + * Copyright (C) 2020 Vintage Salt + * + * Distributed under terms of the MIT License + * + * See rofi-theme(5) for documentation + */ + +configuration { + matching: "normal"; + show-icons: true; + icon-theme: "Papirus-Gruvbox-Dark"; + modi: "drun,ssh,window"; +} + +* { + background: #282828; + background-alt: #32302f; + foreground: #ebdbb2; + foreground-alt: #fb4934; + yellow: #fabd2f; + blue: #83a598; + cyan: #8ec07c; + + text-color: @foreground; + background-color: @background; + font: "IBM Plex Sans 10"; +} + +#window { + location: southwest; + anchor: southwest; + + border-color: @background-alt; + background-color: @background; + + border: 4px 4px 0 0; + height: 60%; + width: 30%; + padding: 0em; +} + #inputbar { + background-color: @background-alt; + padding: 0.5em; + } + #case-indicator { + enabled: false; + } + #prompt { + enabled: false; + } + #textbox-prompt-colon { + enabled: false; + } + #entry { + background-color: inherit; + font: "IBM Plex Sans 12"; + padding: 0.5em; + } + #num-filtered-rows { + background-color: inherit; + font: "IBM Plex Sans 12"; + padding: 0.5em; + } + #textbox-num-sep { + background-color: inherit; + font: "IBM Plex Sans 12"; + padding: 0.5em 0em; + } + #num-rows { + background-color: inherit; + font: "IBM Plex Sans 12"; + padding: 0.5em; + } + #message { + padding: 4px; + } + #textbox { + padding: 4px 12px 4px 12px; + font-color: @foreground-alt; + } + + #listview { + padding: 0.5em; + border: none; + } + #scrollbar { + handle-color: @background-alt; + enabled: false; + } + #element { + padding: 0.5em; + } + #element alternate.normal { + background-color: @background; + } + #element normal active { + text-color: @cyan; + } + #element normal urgent { + text-color: @yellow; + } + #element selected normal { + background-color: @blue; + text-color: @background; + } + #element selected active { + background-color: @cyan; + text-color: @background; + } + #element selected urgent { + background-color: @yellow; + text-color: @background; + } + + #sidebar { + } + + #button { + padding: 8px; + } + + #button selected { + background-color: @background-alt; + } + +/* vim:ft=css +*/ diff --git a/hyprland/.config/sway/config b/hyprland/.config/sway/config new file mode 100644 index 00000000..40cd5594 --- /dev/null +++ b/hyprland/.config/sway/config @@ -0,0 +1,21 @@ +# +# Salt's Sway configuration file +# +# NOTE +# Any further configuration that isn't just declaring a global should be +# done via the creation of a file in config.d. +# +# Note that you can also override system-provided configs by making an +# identically-named file in config.d +# + +## CONFIGS +set $term foot +# Set modifiers +set $mod Mod1 +set $sup Mod4 +set $ctl Ctrl +set $shift Shift + +include '$(/usr/libexec/sway/layered-include "/usr/share/sway/config.d/*.conf" "/etc/sway/config.d/*.conf" "${XDG_CONFIG_HOME:-$HOME/.config}/sway/config.d/*.conf")' +include "${XDG_CONFIG_HOME:-$HOME/.config}/sway/machine.d/$HOSTNAME.conf" diff --git a/hyprland/.config/sway/config.d/03-keybinds.conf b/hyprland/.config/sway/config.d/03-keybinds.conf new file mode 100644 index 00000000..a60c9cf7 --- /dev/null +++ b/hyprland/.config/sway/config.d/03-keybinds.conf @@ -0,0 +1,91 @@ +# vim: set ft=swayconfig: +# +# This file holds keybinds for all of swaywm +# + +# Use Mouse+$mod to drag floating windows to their wanted position +floating_modifier $mod +# Program opening and closing +bindsym $mod+Return exec "$term" +bindsym $mod+q kill +bindsym $mod+space exec "rofi -show drun" +bindsym $mod+backslash exec "rofi -show ssh" +bindsym $mod+Tab exec "rofi -show window" +# Dunst management +bindsym $mod+$shift+space exec dunstctl close +bindsym $mod+$shift+Return exec dunstctl close-all +bindsym $mod+$shift+d exec dunstctl history-pop +bindsym $mod+$shift+o exec dunstctl context +# Pulse controls +bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume 0 +5% #increase sound volume +bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume 0 -5% #decrease sound volume +bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute 0 toggle # mute sound +# Screenshots +bindsym $mod+o exec grim -g "$(slurp -d)" - | wl-copy +# Brightness controls +#bindsym XF86MonBrightnessUp exec xbacklight -inc 5 # increase screen brightness +#bindsym XF86MonBrightnessDown exec xbacklight -dec 5 # decrease screen brightness +# pavucontrol controls +bindsym $mod+p exec --no-startup-id "pgrep pavucontrol || pavucontrol" +bindsym $mod+$shift+p exec --no-startup-id "pkill pavucontrol" +# Miscellaneous non-movement hotkeys +bindsym $ctl+$mod+l exec --no-startup-id "loginctl lock-session" +bindsym $mod+$shift+c reload +# Change focus +bindsym $mod+h focus left +bindsym $mod+j focus down +bindsym $mod+k focus up +bindsym $mod+l focus right +# Move the focused window around +bindsym $mod+$shift+h move left +bindsym $mod+$shift+j move down +bindsym $mod+$shift+k move up +bindsym $mod+$shift+l move right +# Move the focused workspace between monitors +# Disabled here because I like having workspaces allocated to certain outputs +#bindsym $sup+h move workspace to output left +#bindsym $sup+j move workspace to output down +#bindsym $sup+k move workspace to output up +#bindsym $sup+l move workspace to output right +# Configure the split of this container +bindsym $mod+semicolon split h +bindsym $mod+v split v +# Toggle floating +bindsym $mod+f floating toggle +# Fullscreen +bindsym $mod+$shift+f fullscreen toggle +# Change the layout of this container +# Disabled because I just fatfinger these, they're never useful in my workflow +#bindsym $mod+s layout stacking +bindsym $mod+w layout tabbed +bindsym $mod+e layout toggle split +# Focus the parent container. Lets you move groups at a time +bindsym $mod+a focus parent +# Focus the child container +bindsym $mod+d focus child +# Switch between workspaces +bindsym $mod+1 workspace $w1 +bindsym $mod+2 workspace $w2 +bindsym $mod+3 workspace $w3 +bindsym $mod+4 workspace $w4 +bindsym $mod+5 workspace $w5 +bindsym $mod+6 workspace $w6 +bindsym $mod+7 workspace $w7 +bindsym $mod+8 workspace $w8 +bindsym $mod+9 workspace $w9 +bindsym $mod+0 workspace $w10 +bindsym $mod+minus workspace $w11 +bindsym $mod+period workspace next +bindsym $mod+comma workspace prev +# Move the focused container to a specific workspace +bindsym $mod+$shift+1 move container to workspace $w1 +bindsym $mod+$shift+2 move container to workspace $w2 +bindsym $mod+$shift+3 move container to workspace $w3 +bindsym $mod+$shift+4 move container to workspace $w4 +bindsym $mod+$shift+5 move container to workspace $w5 +bindsym $mod+$shift+6 move container to workspace $w6 +bindsym $mod+$shift+7 move container to workspace $w7 +bindsym $mod+$shift+8 move container to workspace $w8 +bindsym $mod+$shift+9 move container to workspace $w9 +bindsym $mod+$shift+0 move container to workspace $w10 +bindsym $mod+$shift+minus move container to workspace $w11 diff --git a/hyprland/.config/sway/config.d/04-inputs.conf b/hyprland/.config/sway/config.d/04-inputs.conf new file mode 100644 index 00000000..e9c1d400 --- /dev/null +++ b/hyprland/.config/sway/config.d/04-inputs.conf @@ -0,0 +1,22 @@ +# vim: set ft=swayconfig: +# +# This file stores global confguration for input devices +# + +# Mice +#input "type:pointer" { +# accel_profile flat # Disables mouse acceleration +# pointer_accel 0.000 # Set a sens that I like +#} +input "type:touchpad" { + drag enabled + dwt disabled + tap enabled + tap_button_map lrm +} +# Keyboards +input "type:keyboard" { + xkb_capslock disabled + xkb_numlock enabled +} + diff --git a/hyprland/.config/sway/config.d/05-theme.conf b/hyprland/.config/sway/config.d/05-theme.conf new file mode 100644 index 00000000..e59e0732 --- /dev/null +++ b/hyprland/.config/sway/config.d/05-theme.conf @@ -0,0 +1,38 @@ +# vim: set ft=swayconfig: +# +# This file controls all theming within swaywm, including colors, gaps, +# borders, fonts, etc. +# +# Right now we're staring at a nice gruvbox theme +# +font pango:IBM Plex Sans 12 +default_border pixel 4 +titlebar_border_thickness 4 +focus_on_window_activation none +gaps inner 8 + +set $red #fb4934 +set $green #b8bb26 +set $yellow #fabd2f +set $blue #83a598 +set $magenta #de869b +set $cyan #8ec07c +set $white #ebdbb2 +set $black #282828 +set $gray #32302f + +# See sway(5) for details on these +# Border color of the view itself v +# Indicator color (like for v/h split) v +# Titlebar text color v +# Titlebar backgrouond color v +# Titlebar border color v +# + # The currently focused window + client.focused $blue $blue $black $gray $blue + # The most recently focused view in an unfocused container + client.focused_inactive $gray $black $white $gray $gray + # Any other unfocused views + client.unfocused $gray $gray $white $gray $gray + # Any view with an urgency hint + client.urgent $yellow $black $white $gray $yellow diff --git a/hyprland/.config/sway/config.d/06-modes.conf b/hyprland/.config/sway/config.d/06-modes.conf new file mode 100644 index 00000000..9dd946ca --- /dev/null +++ b/hyprland/.config/sway/config.d/06-modes.conf @@ -0,0 +1,24 @@ +# vim: set ft=swayconfig: +# +# This file stores "modes" for sway, such as for resizing +# + +# Resize +bindsym $mod+r mode "resize" +mode "resize" { + bindsym h resize shrink width 10 px or 10 ppt + bindsym j resize grow height 10 px or 10 ppt + bindsym k resize shrink height 10 px or 10 ppt + bindsym l resize grow width 10 px or 10 ppt + + bindsym Left resize shrink width 10 px or 10 ppt + bindsym Down resize grow height 10 px or 10 ppt + bindsym Up resize shrink height 10 px or 10 ppt + bindsym Right resize grow width 10 px or 10 ppt + + bindsym Return mode "default" + bindsym Escape mode "default" + bindsym $mod+r mode "default" +} + + diff --git a/hyprland/.config/sway/config.d/30-wallpaper.conf b/hyprland/.config/sway/config.d/30-wallpaper.conf new file mode 100644 index 00000000..5419ed5f --- /dev/null +++ b/hyprland/.config/sway/config.d/30-wallpaper.conf @@ -0,0 +1,5 @@ +# vim: set ft=swayconfig: +# Wallpaper +#output * bg ~/Pictures/Wallpapers/.current fill +output * bg ~/Pictures/Wallpapers/.current center #282828 + diff --git a/hyprland/.config/sway/config.d/40-window-rules.conf b/hyprland/.config/sway/config.d/40-window-rules.conf new file mode 100644 index 00000000..b63231e3 --- /dev/null +++ b/hyprland/.config/sway/config.d/40-window-rules.conf @@ -0,0 +1,60 @@ +# vim: set ft=swayconfig: +# +# This file allocates rules for organizing windows +# + +## WORKSPACES +set $w1 1 +set $w2 2 +set $w3 3 +set $w4 4 +set $w5 5 +set $w6 6 +set $w7 7 +set $w8 8 +set $w9 9 +set $w10 10 +set $w11 11 + +# General rules of thought: +# * The primary monitor will contain workspaces 1-7 +# * Secondary monitors will get workspaces 8-10 +# * Important apps go on primary, unimportant ones that are likely to be side- +# content, event-driven, and distractive can go on the secondary +# * Laptops get all 10 on one monitor, but shunting unimportant junk to the +# back workspaces yields a better workflow regardless +# * No rules are set in stone and the user can totally just move stuff around +# with reckless abandon +for_window { + # Workspace 1 should always be the web browser + [app_id="org.mozilla.firefox"] move container to workspace $w1 + + # Workspace 2 should contain Steam, if we intend to launch a game this session + #[app_id="com.valvesoftware.Steam"] move container to workspace $w2 + + # Workspace 8 contains Thunderbird and Keepass + [app_id="org.keepassxc.KeePassXC"] move container to workspace $w8 + [app_id="org.mozilla.Thunderbird"] move container to workspace $w8 + [class="thunderbird"] move container to workspace $w8 + + # Workspace 9 should be communications platforms + [app_id="com.dev.vencord.Vesktop"] move container to workspace $w9 + [app_id="com.dev.vencord.Vesktop"] inhibit_idle visible + [app_id="vesktop"] move container to workspace $w9 + [app_id="vesktop"] inhibit_idle visible + [app_id="com.discordapp.Discord"] move container to workspace $w9 + [app_id="com.discordapp.Discord"] inhibit_idle visible + + [app_id="im.riot.Riot"] move container to workspace $w9 + [app_id="im.riot.Riot"] inhibit_idle visible + + # And Workspace 10 should contain misc. long-running programs + [class="Spotify"] move container to workspace $w10 + [app_id="spotube"] move container to workspace $w10 + [class="nuclear"] move container to workspace $w10 +} + +# These rules are app-specific but for any workspace +for_window { + [class="steam_app_2291060"] fullscreen +} diff --git a/hyprland/.config/sway/config.d/90-swayidle.conf b/hyprland/.config/sway/config.d/90-swayidle.conf new file mode 100644 index 00000000..81c19dd0 --- /dev/null +++ b/hyprland/.config/sway/config.d/90-swayidle.conf @@ -0,0 +1,15 @@ +# vim: set ft=swayconfig: +# +# Idle and lock configuration +# + +exec LT="900" && \ + swayidle -w \ + timeout $LT \ + 'swaylock -f' \ + before-sleep \ + 'swaylock -f' \ + lock \ + 'swaylock -f' \ + unlock \ + 'pkill -xu "$USER" -SIGUSR1 swaylock' diff --git a/hyprland/.config/sway/config.d/90-wlsunset.conf b/hyprland/.config/sway/config.d/90-wlsunset.conf new file mode 100644 index 00000000..49d84419 --- /dev/null +++ b/hyprland/.config/sway/config.d/90-wlsunset.conf @@ -0,0 +1,11 @@ +# vim: set ft=swayconfig: +# +# wlsunset is more or less redshift. It reddens the screen as the day draws +# to a close. +# +# For customization, see wlsunset(1) +# +exec wlsunset \ + -T 5300 \ + -t 3500 \ + -g 1 diff --git a/hyprland/.config/sway/config.d/template b/hyprland/.config/sway/config.d/template new file mode 100644 index 00000000..7122041d --- /dev/null +++ b/hyprland/.config/sway/config.d/template @@ -0,0 +1,2 @@ +# vim: set ft=swayconfig: + diff --git a/hyprland/.config/sway/environment b/hyprland/.config/sway/environment new file mode 100644 index 00000000..c24fe4c8 --- /dev/null +++ b/hyprland/.config/sway/environment @@ -0,0 +1,2 @@ +#!/bin/sh +SWAY_EXTRA_ARGS="-D noscanout" diff --git a/hyprland/.config/sway/machine.d/dsk-ryzen-1.ws.mgmt.desu.ltd.conf b/hyprland/.config/sway/machine.d/dsk-ryzen-1.ws.mgmt.desu.ltd.conf new file mode 100644 index 00000000..e6fda6b3 --- /dev/null +++ b/hyprland/.config/sway/machine.d/dsk-ryzen-1.ws.mgmt.desu.ltd.conf @@ -0,0 +1,54 @@ +# vim: set ft=swayconfig: +set $monprim "Acer Technologies XV272U 0x11122114" +set $monsec "Acer Technologies XV272U 0x0501FD67" + +output $monprim { + res 2560x1440@143.998993Hz + pos 1440 937 + adaptive_sync off +} +output $monsec { + res 2560x1440@143.998993Hz + pos 0 0 + transform 270 + adaptive_sync off +} +# Valve Index +output "Unknown Unknown Unknown" { + disable +} + +input type:pointer { + accel_profile flat + pointer_accel 0.000 +} + +output * bg ~/Pictures/Wallpapers/1561879941868.jpg fill + +## WORKSPACES +set $w1 1 +set $w2 2 +set $w3 3 +set $w4 4 +set $w5 5 +set $w6 6 +set $w7 7 +set $w8 8 +set $w9 9 +set $w10 10 +set $w11 11 +# Workspace setup for my desktop +# Defaults to whatever on my laptop and on other machines +workspace $w1 output $monprim +workspace $w2 output $monprim +workspace $w3 output $monprim +workspace $w4 output $monprim +workspace $w5 output $monprim +workspace $w6 output $monprim +workspace $w7 output $monprim +# Putting 10 here first so it's the default for my secondary +workspace $w10 output $monsec +workspace $w8 output $monsec +workspace $w9 output $monsec +workspace $w11 output $monsec + diff --git a/hyprland/.config/sway/machine.d/lap-fw-diy-1.ws.mgmt.desu.ltd.conf b/hyprland/.config/sway/machine.d/lap-fw-diy-1.ws.mgmt.desu.ltd.conf new file mode 100644 index 00000000..e6798700 --- /dev/null +++ b/hyprland/.config/sway/machine.d/lap-fw-diy-1.ws.mgmt.desu.ltd.conf @@ -0,0 +1,32 @@ +# vim: set ft=swayconfig: +set $monprim "eDP-1" + +output $monprim scale 1.5 + +output * bg ~/Pictures/Wallpapers/1561879941868.jpg fill + +## WORKSPACES +set $w1 1 +set $w2 2 +set $w3 3 +set $w4 4 +set $w5 5 +set $w6 6 +set $w7 7 +set $w8 8 +set $w9 9 +set $w10 10 +set $w11 11 +# Workspace setup for my desktop +# Defaults to whatever on my laptop and on other machines +workspace $w1 output $mon +workspace $w2 output $mon +workspace $w3 output $mon +workspace $w4 output $mon +workspace $w5 output $mon +workspace $w6 output $mon +workspace $w7 output $mon +workspace $w8 output $mon +workspace $w9 output $mon +workspace $w10 output $mon +workspace $w11 output $mon diff --git a/hyprland/.config/sway/machine.d/template b/hyprland/.config/sway/machine.d/template new file mode 100644 index 00000000..2c9e1484 --- /dev/null +++ b/hyprland/.config/sway/machine.d/template @@ -0,0 +1,28 @@ +# vim: set ft=swayconfig: +## WORKSPACES +set $w1 1 +set $w2 2 +set $w3 3 +set $w4 4 +set $w5 5 +set $w6 6 +set $w7 7 +set $w8 8 +set $w9 9 +set $w10 10 +# Workspace setup for my desktop +# Defaults to whatever on my laptop and on other machines +set $monprim DisplayPort-0 +set $monsec HDMI-A-0 +workspace $w1 output $monprim +workspace $w2 output $monprim +workspace $w3 output $monprim +workspace $w4 output $monprim +workspace $w5 output $monprim +workspace $w6 output $monprim +workspace $w7 output $monprim +# Putting 10 here first so it's the default for my secondary +workspace $w10 output $monsec +workspace $w8 output $monsec +workspace $w9 output $monsec + diff --git a/hyprland/.config/swaylock/config b/hyprland/.config/swaylock/config new file mode 100644 index 00000000..9160b192 --- /dev/null +++ b/hyprland/.config/swaylock/config @@ -0,0 +1,2 @@ +scaling=fill +color=000000 diff --git a/hyprland/.config/waybar/config b/hyprland/.config/waybar/config new file mode 100644 index 00000000..f8528102 --- /dev/null +++ b/hyprland/.config/waybar/config @@ -0,0 +1,130 @@ +[{ + "id": "top", + "name": "top", + "layer": "top", + "height": 40, + "modules-left": ["sway/workspaces", "sway/mode"], + "modules-center": ["sway/window"], + "modules-right": ["tray"], + "sway/workspaces": { + "all-outputs": false, + "disable-scroll": true, + "persistent-workspaces": { + "1": ["eDP-1", "DP-1"], + "2": ["eDP-1", "DP-1"], + "3": ["eDP-1", "DP-1"], + "4": ["eDP-1", "DP-1"], + "5": ["eDP-1", "DP-1"], + "6": ["eDP-1", "DP-1"], + "7": ["eDP-1", "DP-1"], + "8": ["eDP-1", "DP-2"], + "9": ["eDP-1", "DP-2"], + "10": ["eDP-1", "DP-2"], + "11": ["eDP-1", "DP-2"] + } + }, + "sway/window": { + }, + "tray": { + "icon-size": 16, + "spacing": 10 + } +}, +{ + "id": "bottom", + "name": "bottom", + "layer": "top", + "position": "bottom", + "height": 40, + "modules-left": ["gamemode", "custom/backup", "battery", "temperature", "cpu", "memory", "network"], + "modules-center": [], + "modules-right": ["mpris", "pulseaudio", "backlight", "idle_inhibitor", "clock"], + "clock": { + "format": "{:%a %b %d %I:%M %p}", + "tooltip": false + }, + "network": { + "interval": 5, + "format": " {bandwidthUpBytes}  {bandwidthDownBytes}", + "format-disconnected": "" + }, + "battery": { + "states": { + "good": 100, + "warning": 30, + "critical": 15 + }, + "format": "{icon} {capacity}%", + "format-charging": "{icon} {capacity}%", + "format-plugged": "{icon} {capacity}%", + "format-icons": ["", "", "", "", ""] + }, + "backlight": { + "format": " {percent}%" + }, + "idle_inhibitor": { + "format": "" + }, + "gamemode": { + "format": "{glyph}", + "glyph": "", + "use-icon": false, + "icon-spacing": 0, + "icon-size": 0 + }, + "pulseaudio": { + "scroll-step": 5, + "format": "{icon} {volume}%", + "format-icons": { + "default": ["", "", ""] + }, + "on-scroll-up": "/usr/libexec/sway/volume-helper --limit 100 --increase 5", + "on-scroll-down": "/usr/libexec/sway/volume-helper --limit 100 --decrease 5", + "on-click": "pactl set-sink-mute @DEFAULT_SINK@ toggle && /usr/libexec/sway/volume-helper" + }, + "cpu": { + "interval": 3, + "format": " {usage}%", + "states": { + "critical": 90, + "warning": 80, + "regular": 50 + } + }, + "memory": { + "interval": 5, + "format": " {percentage}% {swapPercentage}%", + "states": { + "critical": 90, + "warning": 80, + "regular": 50 + } + }, + "temperature": { + "format": " {temperatureC}°", + "critical-threshold": 80 + }, + "mpris": { + "interval": 1, + "artist-len": 30, + "album-len": 30, + "title-len": 40, + "format": "{player_icon} - {dynamic}", + "ignored-players": [ + "firefox" + ], + "player-icons": { + "default": "♫" + }, + "status-icons": { + "playing": "⏵", + "paused": "⏸", + "stopped": "⏹" + } + }, + "custom/backup": { + "interval": 60, + "format": "", + "exec": "systemctl is-failed backup.service" + } +}] diff --git a/hyprland/.config/waybar/style.css b/hyprland/.config/waybar/style.css new file mode 100644 index 00000000..cb47ff09 --- /dev/null +++ b/hyprland/.config/waybar/style.css @@ -0,0 +1,178 @@ +/* + * style.css + * Copyright (C) 2021 Vintage Salt + * + * Distributed under terms of the MIT license. + */ + +* { + border: none; + border-radius: 0; + font-family: "IBM Plex Sans", "Font Awesome 6 Free", sans-serif; + font-size: 13px; +} + +window#waybar { + background: #282828; +} +window#waybar.top { + background: linear-gradient(0deg, rgba(40,40,40,0) 0%, rgba(40,40,40,1) 80%); +} +window#waybar.bottom { + background: linear-gradient(180deg, rgba(40,40,40,0) 0%, rgba(40,40,40,1) 80%); +} + +/* swaywm stuff */ +#workspaces { +} +#workspaces button { + /* Any random button */ + background: transparent; + color: #a89984; + padding: 0 0.9em; +} +#workspaces button:hover { + /* A button that is currently being hovered over by the mouse cursor */ + /* This comes with free transitions */ + box-shadow: inherit; + text-shadow: inherit; + background-color: #504945; +} +#workspaces button.visible { + color: #282828; + background: #504945; + font-weight: bold; +} +#workspaces button.focused { + color: #282828; + background: #83a598; + font-weight: bold; +} +#workspaces button.urgent { + color: #fabd2f; + font-weight: bold; +} +#workspaces button.persistent { + color: #504945; +} +#mode { + background: #fb4934; + color: #ebdbb2; + padding: 0 1em; +} + +/* widgets */ +#window { + color: #ebdbb2; +} +#pulseaudio { + padding: 0 1em; + color: #ebdbb2; +} +#pulseaudio.muted { + border-top: 4px solid #fb4934; + border-bottom: 4px solid #282828; +} +#tray { + padding: 0 1em; +} +#mpris { + padding: 0 1em; +} +#mpris.playing { + color: #d3869b; +} +#mpris.paused, #mpris.stopped { + color: #504945; +} + +#network { + padding: 0 1em; + color: #504945; +} +#network.disconnected { + color: #fb4934; +} + +#idle_inhibitor { + padding: 0 1em; +} +#idle_inhibitor.deactivated { + color: #504945; +} +#idle_inhibitor.activated { + color: #ebdbb2; +} + +#backlight { + padding: 0 1em; + color: #ebdbb2; +} +#gamemode { + padding: 0 1em; + color: #504945; +} +#gamemode.running { + color: #b8bb26; +} +/* Memory */ +#memory { + padding: 0 1em; + color: #504945; +} +#memory.critical { + color: #fb4934; +} +#memory.warning { + color: #fabd2f; +} +#memory.regular { + color: #ebdbb2; +} +/* CPU */ +#cpu { + padding: 0 1em; + color: #504945; +} +#cpu.critical { + color: #fb4934; +} +#cpu.warning { + color: #fabd2f; +} +#cpu.regular { + color: #ebdbb2; +} +/* Battery */ +#battery { + padding: 0 1em; +} +#battery.charging { + color: #b8bb26; +} +#battery.good { + color: #504945; +} +#battery.discharging.warning { + color: #fabd2f; +} +#battery.discharging.critical { + color: #fb4934; +} +#clock { + color: #ebdbb2; + padding: 0 1em; +} +/* Temperature*/ +#temperature { + padding: 0 1em; + color: #504945; +} +#temperature.critical { + color: #fb4934; +} +/* Custom modules */ +#custom-backup { + color: #fb4934; + padding: 0 1em; +} diff --git a/hyprland/.var/app/dev.vencord.Vesktop/config/vesktop/themes/midnight-gruvbox.theme.css b/hyprland/.var/app/dev.vencord.Vesktop/config/vesktop/themes/midnight-gruvbox.theme.css new file mode 100644 index 00000000..33189e0c --- /dev/null +++ b/hyprland/.var/app/dev.vencord.Vesktop/config/vesktop/themes/midnight-gruvbox.theme.css @@ -0,0 +1,83 @@ +/** + * @name midnight-gruvbox + * @description A dark, rounded discord theme. Managed by .dotfiles, packed in by stow. Original by refact0r + * @author salt + * @version 1.6.2 + * @source https://github.com/refact0r/midnight-discord/blob/master/midnight.theme.css +*/ + +/* IMPORTANT: make sure to enable dark mode in discord settings for the theme to apply properly!!! */ + +@import url('https://refact0r.github.io/midnight-discord/midnight.css'); + +/* customize things here */ +:root { + /* font, change to 'gg sans' for default discord font*/ + --font: 'IBM Plex Sans'; + + /* top left corner text */ + --corner-text: 'Midnight'; + + /* color of status indicators and window controls */ + --online-indicator: #b8bb26; /* change to #23a55a for default green */ + --dnd-indicator: #fb4934; /* change to #f13f43 for default red */ + --idle-indicator: #fabd2f; /* change to #f0b232 for default yellow */ + --streaming-indicator: #d3869b; /* change to #593695 for default purple */ + + /* accent colors */ + --accent-1: #83a598; /* links */ + --accent-2: #83a598; /* general unread/mention elements */ + --accent-3: #83a598; /* accent buttons */ + --accent-4: #458588; /* accent buttons when hovered */ + --accent-5: #458588; /* accent buttons when clicked */ + --mention: #3c3836; /* mentions & mention messages */ + --mention-hover: #504945; /* mentions & mention messages when hovered */ + + /* text colors */ + --text-0: #ebdbb2; /* text on colored elements */ + --text-1: var(--text-2); /* other normally white text */ + --text-2: #ebdbb2; /* headings and important text */ + --text-3: #d5c4a1; /* normal text */ + --text-4: #bdae93; /* icon buttons and channels */ + --text-5: #7c6f64; /* muted channels/chats and timestamps */ + + /* background and dark colors */ + --bg-1: #665c54; /* dark buttons when clicked */ + --bg-2: #504945; /* dark buttons */ + --bg-3: #32302f; /* spacing, secondary elements */ + --bg-4: #282828; /* main background color */ + --hover: #3c3836; /* channels and buttons when hovered */ + --active: #3c3836; /* channels and buttons when clicked or selected */ + --message-hover: #1d2021; /* messages when hovered */ + + /* amount of spacing and padding */ + --spacing: 8px; + + /* animations */ + /* ALL ANIMATIONS CAN BE DISABLED WITH REDUCED MOTION IN DISCORD SETTINGS */ + --list-item-transition: 0.2s ease; /* channels/members/settings hover transition */ + --unread-bar-transition: 0.2s ease; /* unread bar moving into view transition */ + --moon-spin-transition: 0.4s ease; /* moon icon spin */ + --icon-spin-transition: 1s ease; /* round icon button spin (settings, emoji, etc.) */ + + /* corner roundness (border-radius) */ + --roundness-xl: 16px; /* roundness of big panel outer corners */ + --roundness-l: 14px; /* popout panels */ + --roundness-m: 12px; /* smaller panels, images, embeds */ + --roundness-s: 8px; /* members, settings inputs */ + --roundness-xs: 4px; /* channels, buttons */ + --roundness-xxs: 4px; /* searchbar, small elements */ + + /* direct messages moon icon */ + /* change to block to show, none to hide */ + --discord-icon: block; /* discord icon */ + --moon-icon: none; /* moon icon */ + --moon-icon-url: url('https://upload.wikimedia.org/wikipedia/commons/c/c4/Font_Awesome_5_solid_moon.svg'); /* custom icon url */ + --moon-icon-size: auto; + + /* filter uncolorable elements to fit theme */ + /* (just set to none, they're too much work to configure) */ + --login-bg-filter: saturate(0.3) hue-rotate(-15deg) brightness(0.4); /* login background artwork */ + --green-to-accent-3-filter: hue-rotate(56deg) saturate(1.43); /* add friend page explore icon */ + --blurple-to-accent-3-filter: hue-rotate(304deg) saturate(0.84) brightness(1.2); /* add friend page school icon */ +}