diff --git a/.config/alacritty/alacritty.yml b/.config/alacritty/alacritty.yml index 9b5cddcf..76ed17b0 100644 --- a/.config/alacritty/alacritty.yml +++ b/.config/alacritty/alacritty.yml @@ -1,4 +1,5 @@ # Configuration for Alacritty, the GPU enhanced terminal emulator. + # Import additional configuration files # # Imports are loaded in order, skipping all missing files, with the importing @@ -97,7 +98,6 @@ window: # # 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: dark decorations_theme_variant: dark scrolling: @@ -157,7 +157,7 @@ font: style: Bold Italic # Point size - size: 9.0 + size: 11.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 diff --git a/.config/awesome/json.lua b/.config/awesome/json.lua index d8ee08eb..ce0cd805 100644 --- a/.config/awesome/json.lua +++ b/.config/awesome/json.lua @@ -49,7 +49,7 @@ local function escape_char(c) return "\\" .. (escape_char_map[c] or string.format("u%04x", c:byte())) end -local function encode_nil(val) +local function encode_nil() return "null" end @@ -77,7 +77,7 @@ local function encode_table(val, stack) error("invalid table: sparse array") end -- Encode - for i, v in ipairs(val) do + for _, v in ipairs(val) do table.insert(res, encode(v, stack)) end stack[val] = nil diff --git a/.config/awesome/mytheme.lua b/.config/awesome/mytheme.lua index 809afc67..c034f43f 100644 --- a/.config/awesome/mytheme.lua +++ b/.config/awesome/mytheme.lua @@ -27,7 +27,7 @@ theme.fg_minimize = "#ffffff" theme.useless_gap = dpi(4) theme.border_width = dpi(2) theme.border_normal = "#000000" -theme.border_focus = "#f2f2f2" +theme.border_focus = "#b9bbbd" theme.border_marked = "#91231c" -- There are other variable sets diff --git a/.config/awesome/rc.lua b/.config/awesome/rc.lua index 86b55cf4..595dcd2d 100644 --- a/.config/awesome/rc.lua +++ b/.config/awesome/rc.lua @@ -2,17 +2,15 @@ -- found (e.g. lgi). If LuaRocks is not installed, do nothing. pcall(require, "luarocks.loader") --- Awesome Wm Widgets -local batteryarc_widget = require("awesome-wm-widgets.batteryarc-widget.batteryarc") -local cpu_widget = require("awesome-wm-widgets.cpu-widget.cpu-widget") -local brightness_widget = require("awesome-wm-widgets.brightness-widget.brightness") -local spotify_widget = require("awesome-wm-widgets.spotify-widget.spotify") -local spotify_shell = require("awesome-wm-widgets.spotify-shell.spotify-shell") -local volume_widget = require("awesome-wm-widgets.volume-widget.volume") +-- AwesomeWM Widgets local calendar_widget = require("awesome-wm-widgets.calendar-widget.calendar") +local cpu_widget = require("awesome-wm-widgets.cpu-widget.cpu-widget") local logout_menu_widget = require("awesome-wm-widgets.logout-menu-widget.logout-menu") local net_speed_widget = require("awesome-wm-widgets.net-speed-widget.net-speed") local ram_widget = require("awesome-wm-widgets.ram-widget.ram-widget") +local spotify_shell = require("awesome-wm-widgets.spotify-shell.spotify-shell") +local spotify_widget = require("awesome-wm-widgets.spotify-widget.spotify") +local volume_widget = require("awesome-wm-widgets.volume-widget.volume") local weather_widget = require("awesome-wm-widgets.weather-widget.weather") -- Standard awesome library @@ -27,7 +25,6 @@ local beautiful = require("beautiful") local naughty = require("naughty") local menubar = require("menubar") local hotkeys_popup = require("awful.hotkeys_popup") - -- Enable hotkeys help widget for VIM and other apps -- when client with a matching name is opened: require("awful.hotkeys_popup.keys") @@ -108,6 +105,7 @@ local editor_cmd = terminal .. " -e " .. editor -- If you do not like this or do not have such a key, -- I suggest you to remap Mod4 to another key using xmodmap or other tools. -- However, you can use another modifier like Mod1, but it may interact with others. + local modkey = "Mod4" -- Table of layouts to cover with awful.layout.inc, order matters. @@ -116,11 +114,11 @@ awful.layout.layouts = { awful.layout.suit.tile.left, awful.layout.suit.fair, awful.layout.suit.fair.horizontal, - awful.layout.suit.tile.top, - awful.layout.suit.tile.bottom, -- awful.layout.suit.spiral.dwindle, -- awful.layout.suit.spiral, -- awful.layout.suit.floating, + -- awful.layout.suit.tile.bottom, + -- awful.layout.suit.tile.top, -- awful.layout.suit.max, -- awful.layout.suit.max.fullscreen, -- awful.layout.suit.magnifier, @@ -170,10 +168,9 @@ local mytextclock = wibox.widget.textclock(" %d.%m.%Y, %H:%M:%S, %j ", 1) local cw = calendar_widget({ theme = "nord", placement = "top_right", - previous_month_button = 1, - next_month_button = 3, + previous_month_button = 4, + next_month_button = 5, }) - mytextclock:connect_signal("button::press", function(_, _, _, button) if button == 1 then cw.toggle() @@ -336,44 +333,18 @@ awful.screen.connect_for_each_screen(function(s) icons_extension = ".png", timeout = 120, }), - batteryarc_widget({ - --font = "JetBrainsMono NF 10", - arc_thickness = 2, - show_current_level = true, - size = 32, - timeout = 1, - main_color = beautiful.fg_normal, - bg_color = "#ffffff11", - low_level_color = "#e53935", - medium_level_color = "#c0ca33", - charging_color = "#43a047", - warning_msg_title = "Huston, we have a problem", - warning_msg_text = "Battery is dying", - warning_msg_position = "top_right", - enable_battery_warning = true, - show_battery_mode = "on_hover", - notification_position = "top_right", - }), - brightness_widget({ - type = "arc", - program = "brightnessctl", - step = 1, - base = 60, - font = "JetBrainsMono NF 10", - timeout = 1, - tooltip = true, - percentage = false, - }), volume_widget({ mixer_cmd = "pulsemixer", step = 1, - widget_type = "arc", + widget_type = "horizontal_bar", device = "pulse", - thickness = 2, main_color = beautiful.fg_normal, - bg_color = "#ffffff11", mute_color = "#4b4b4bff", - size = 18, + bg_color = "#ffffff11", + width = 50, + margins = 7, + shape = "bar", + with_icon = true, }), logout_menu_widget({ font = "JetBrainsMono NF 10", @@ -384,13 +355,13 @@ awful.screen.connect_for_each_screen(function(s) awful.spawn.with_shell("xlock -mode random -duration 10") end, onreboot = function() - awful.spawn.with_shell("systemctl reboot") + awful.spawn.with_shell("loginctl reboot") end, onsuspend = function() - awful.spawn.with_shell("systemctl suspend") + awful.spawn.with_shell("doas zzz") end, onpoweroff = function() - awful.spawn.with_shell("systemctl poweroff") + awful.spawn.with_shell("loginctl poweroff") end, }), mytextclock, @@ -413,34 +384,57 @@ root.buttons(gears.table.join( -- {{{ Key bindings local globalkeys = gears.table.join( - awful.key({}, "#233", function() - brightness_widget:inc(5) - end), -- increase brightness - awful.key({}, "#232", function() - brightness_widget:dec(5) - end), -- decrease brightness + awful.key({ "Shift" }, "Pause", function() + awful.spawn.with_shell("playerctl play-pause -a") + end, { description = "pause/play all", group = "media controls" }), - awful.key({}, "#123", function() - awful.spawn.with_shell("pulsemixer --change-volume +2") - end), -- increase volume - awful.key({}, "#122", function() - awful.spawn.with_shell("pulsemixer --change-volume -2") - end), -- decrease volume - awful.key({}, "#121", function() - awful.spawn.with_shell("pulsemixer --toggle-mute") - end), -- mute + awful.key({ "Control" }, "Pause", function() + awful.spawn.with_shell("playerctl pause -a") + end, { description = "pause all", group = "media controls" }), - awful.key({}, "#172", function() + awful.key({}, "Pause", function() awful.spawn.with_shell("sp play") - end), -- play/pause + end, { description = "spotify pause/play", group = "media controls" }), + + awful.key({}, "#117", function() + awful.spawn.with_shell("sp next") + end, { description = "spotify next", group = "media controls" }), + + awful.key({}, "#112", function() + awful.spawn.with_shell("sp prev") + end, { description = "spotify previous", group = "media controls" }), awful.key({ modkey }, "d", function() spotify_shell.launch() end, { description = "spotify shell", group = "media controls" }), - awful.key({ "Control" }, "#172", function() + awful.key({}, "#171", function() + awful.spawn.with_shell("sp next") + end), -- play next + + awful.key({}, "#173", function() + awful.spawn.with_shell("sp previous") + end), -- play previous + + awful.key({}, "#174", function() + awful.spawn.with_shell("playerctl -a stop") + end), -- stop + + awful.key({}, "#172", function() awful.spawn.with_shell("playerctl -a play-pause") - end), -- play/pause + end), -- play/pause all + + awful.key({}, "#123", function() + awful.spawn.with_shell("pulsemixer --change-volume +5") + end), -- increase volume + + awful.key({}, "#122", function() + awful.spawn.with_shell("pulsemixer --change-volume -5") + end), -- decrease volume + + awful.key({}, "#121", function() + awful.spawn.with_shell("pulsemixer --toggle-mute") + end), -- mute awful.key({ "Control" }, "#107", function() awful.spawn.with_shell("flameshot gui") @@ -486,9 +480,11 @@ local globalkeys = gears.table.join( awful.key({ modkey }, "Return", function() awful.spawn(terminal) end, { description = "open a terminal", group = "launcher" }), + awful.key({ modkey, "Control" }, "r", awesome.restart, { description = "reload awesome", group = "awesome" }), - -- awful.key({ modkey, "Control" }, "q", awesome.quit, - -- {description = "quit awesome", group = "awesome"}), + + -- awful.key({ modkey, "Control" }, "q", awesome.quit, { description = "quit awesome", group = "awesome" }), + awful.key({ modkey }, "b", function() awful.spawn("librewolf") end, { description = "open librewolf", group = "launcher" }), @@ -641,7 +637,7 @@ local clientbuttons = gears.table.join( c:emit_signal("request::activate", "mouse_click", { raise = true }) awful.mouse.client.move(c) end), - awful.button({ modkey, "Control" }, 1, function(c) + awful.button({ modkey }, 3, function(c) c:emit_signal("request::activate", "mouse_click", { raise = true }) awful.mouse.client.resize(c) end) @@ -678,7 +674,10 @@ awful.rules.rules = { "pinentry", }, class = { + "Arandr", "Blueman-manager", + "Gpick", + "Kruler", "MessageWin", -- kalarm. "Tor Browser", -- Needs a fixed window size to avoid fingerprinting by screen size. "Wpa_gui", @@ -706,22 +705,21 @@ awful.rules.rules = { { rule_any = { type = { "normal", "dialog" } }, properties = { titlebars_enabled = false } }, { - rule_any = { class = { "tuxedo-control-center", "corectrl" } }, - properties = { screen = 1, tag = "7" }, + rule_any = { class = { "steam_app_1172470", "steam_app_1237970", "steam_app_289070" } }, + properties = { screen = 1, fullscreen = true, floating = true }, }, { - rule_any = { class = { "Thunderbird", "discord", "ripcord", "TelegramDesktop" } }, - properties = { screen = 1, tag = "8" }, + rule_any = { class = { "steam_app_1182480" } }, + properties = { fullscreen = true }, }, - { rule_any = { class = { "Spotify" } }, properties = { screen = 1, tag = "9" } }, + { + rule_any = { class = { "discord", "TelegramDesktop", "ripcord" } }, + properties = { screen = 2, tag = "8" }, + }, + { rule_any = { class = { "kdeconnect.app" } }, properties = { screen = 2, tag = "7" } }, + { rule_any = { class = { "Spotify" } }, properties = { screen = 2, tag = "9" } }, { rule_any = { class = { "mpv" } }, properties = { fullscreen = true } }, - { rule_any = { class = { "steam_289070" } }, properties = { floating = true, fullscreen = true } }, - - -- Set Firefox to always map on the tag named "2" on screen 1. - -- { rule = { class = "Firefox" }, - -- properties = { screen = 1, tag = "2" } }, } --- }}} -- {{{ Signals -- Signal function to execute when a new client appears. @@ -790,5 +788,6 @@ end) -- }}} -- Autostart Applications -awful.spawn.with_shell("picom --experimental-backends") +-- awful.spawn.with_shell("picom --experimental-backends") +awful.spawn.with_shell("picom") awful.spawn.with_shell("setxkbmap lv") diff --git a/.config/btop/btop.conf b/.config/btop/btop.conf index d0e06c07..30d2bf07 100644 --- a/.config/btop/btop.conf +++ b/.config/btop/btop.conf @@ -1,4 +1,4 @@ -#? Config file for btop v. 1.2.8 +#? Config file for btop v. 1.2.13 #* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes. #* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes" @@ -16,7 +16,7 @@ force_tty = False #* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets. #* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box. -#* Use withespace " " as separator between different presets. +#* Use whitespace " " as separator between different presets. #* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty" presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty" @@ -47,14 +47,14 @@ graph_symbol_net = "default" graph_symbol_proc = "default" #* Manually set which boxes to show. Available values are "cpu mem net proc", separate values with whitespace. -shown_boxes = "mem proc net cpu" +shown_boxes = "mem cpu net proc" #* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs. update_ms = 1000 #* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct", #* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly. -proc_sorting = "cpu direct" +proc_sorting = "memory" #* Reverse sorting order, True or False. proc_reversed = False @@ -74,6 +74,9 @@ proc_per_core = False #* Show process memory as bytes instead of percent. proc_mem_bytes = True +#* Show cpu graph for each process. +proc_cpu_graphs = True + #* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate) proc_info_smaps = False @@ -165,6 +168,9 @@ only_physical = True #* Read disks list from /etc/fstab. This also disables only_physical. use_fstab = True +#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool) +zfs_hide_datasets = False + #* Set to true to show available disk space for privileged users. disk_free_priv = False diff --git a/.config/flameshot/flameshot.ini b/.config/flameshot/flameshot.ini index e1daec7a..e5ca7dd5 100644 --- a/.config/flameshot/flameshot.ini +++ b/.config/flameshot/flameshot.ini @@ -1,49 +1,9 @@ [General] contrastOpacity=188 copyAndCloseAfterUpload=false -disabledTrayIcon=false -drawColor=#ff0011 filenamePattern=%Y_%m_%d_%H_%M_%S -predefinedColorPaletteLarge=true saveAfterCopy=true -saveAsFileExtension=png savePath=/home/kristofers/Pictures/screenshots -savePathFixed=false showMagnifier=true -showStartupLaunchMessage=false squareMagnifier=true -uiColor=#ffffff -undoLimit=100 - -[Shortcuts] -TYPE_ARROW=A -TYPE_CIRCLE=C -TYPE_CIRCLECOUNT= -TYPE_COMMIT_CURRENT_TOOL=Ctrl+Return -TYPE_COPY=Ctrl+C -TYPE_DELETE_CURRENT_TOOL=Del -TYPE_DRAWER=D -TYPE_EXIT=Ctrl+Q -TYPE_MARKER=M -TYPE_MOVESELECTION=Ctrl+M -TYPE_MOVE_DOWN=Down -TYPE_MOVE_LEFT=Left -TYPE_MOVE_RIGHT=Right -TYPE_MOVE_UP=Up -TYPE_OPEN_APP=Ctrl+O -TYPE_PENCIL=P -TYPE_PIN= -TYPE_PIXELATE=B -TYPE_RECTANGLE=R -TYPE_REDO=Ctrl+Shift+Z -TYPE_RESIZE_DOWN=Shift+Down -TYPE_RESIZE_LEFT=Shift+Left -TYPE_RESIZE_RIGHT=Shift+Right -TYPE_RESIZE_UP=Shift+Up -TYPE_SAVE=Ctrl+S -TYPE_SELECTION=S -TYPE_SELECTIONINDICATOR= -TYPE_SELECT_ALL=Ctrl+A -TYPE_TEXT=T -TYPE_TOGGLE_PANEL=Space -TYPE_UNDO=Ctrl+Z +uiColor=#ff0000 diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf new file mode 100644 index 00000000..ab62ba72 --- /dev/null +++ b/.config/hypr/hyprland.conf @@ -0,0 +1,217 @@ +# This is an example Hyprland config file. +# +# Refer to the wiki for more information. + +# +# Please note not all available settings / options are set here. +# For a full list, see the wiki +# + +# See https://wiki.hyprland.org/Configuring/Monitors/ +monitor=,preferred,auto,1 + + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more + +# Execute your favorite apps at launch +# exec-once = waybar & hyprpaper & firefox +exec-once = pipewire & pipewire-pulse & wireplumber & waybar & hyprpaper & tuxedo-control-center & flameshot & librewolf & nextcloud & xrdb -load "$XDG_CONFIG_HOME"/X11/xresources & /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 + + +# Source a file (multi-file configs) +# source = ~/.config/hypr/myColors.conf + +# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ +input { + kb_layout = lv + kb_variant = + kb_model = + kb_options = + kb_rules = + numlock_by_default = true + + follow_mouse = 1 + + touchpad { + natural_scroll = yes + } + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. +} + +general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 5 + gaps_out = 20 + border_size = 2 + col.active_border = rgba(b9bbbdee) + col.inactive_border = rgba(000000aa) + + layout = master +} + +decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + rounding = 10 + blur = yes + blur_size = 4 + blur_passes = 1 + blur_new_optimizations = on + + drop_shadow = yes + shadow_range = 4 + shadow_render_power = 3 + col.shadow = rgba(1a1a1aee) +} + +animations { + enabled = yes + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default +} + +dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = yes # you probably want this +} + +master { + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more + new_is_master = true +} + +gestures { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + workspace_swipe = on +} + +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more +device:epic mouse V1 { + sensitivity = -0.5 +} + +# Example windowrule v1 +windowrulev2 = fullscreen, class:mpv + +windowrulev2 = workspace 7, class:tuxedo-control-center +windowrulev2 = workspace 7, class:corectrl + +windowrulev2 = workspace 8, class:discord +windowrulev2 = opacity 0.95, class:discord +windowrulev2 = workspace 8, class:Ripcord +windowrulev2 = workspace 8, class:thunderbird +windowrulev2 = opacity 0.95, class:thunderbird +windowrulev2 = workspace 8, class:telegram +windowrulev2 = opacity 0.95, class:telegram + + +windowrulev2 = workspace 9, class:Spotify +windowrulev2 = opacity 0.9, class:Spotify +windowrulev2 = tile, class:Spotify + + +windowrulev2 = opacity 0.95, class:qbittorrent +windowrulev2 = opacity 0.95, class:lutris +windowrulev2 = opacity 0.95, class:pacfinder +windowrulev2 = opacity 0.9, class:Bitwarden +windowrulev2 = opacity 0.9, class:kdeconnect +# windowrulev2 = workspace 8, class:^()$ + +# Example windowrule v2 +windowrulev2 = move 100%-250 100%-250, class:galculator +windowrulev2 = size 250 250, class:galculator +windowrulev2 = float, class:galculator +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more + + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more +$mainMod = SUPER + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, B ,exec, librewolf +bind = $mainMod, Return, exec, alacritty +bind = $mainMod SHIFT, Q, killactive +bind = $mainMod SHIFT CTRL, Q, exit +bind = $mainMod, N, exec, spacefm +bind = $mainMod CTRL, SPACE, togglefloating +bind = $mainMod, P, exec, wofi --show drun -ib +bind = $mainMod, F, fullscreen +bind = $mainMod, M, bringactivetotop +bind = $mainMod, A, pin +bind = $mainMod, O, swapactiveworkspaces + +bind = $mainMod CTRL, R, forcerendererreload + +# Resize window +bind = $mainMod, L, splitratio, 0.05 +bind = $mainMod, H, splitratio, -0.05 + +# Move focus with mainMod + arrow keys +bind = $mainMod, K, cyclenext +bind = $mainMod, J, cyclenext, prev + +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 +bind = $mainMod SHIFT, 3, movetoworkspace, 3 +bind = $mainMod SHIFT, 4, movetoworkspace, 4 +bind = $mainMod SHIFT, 5, movetoworkspace, 5 +bind = $mainMod SHIFT, 6, movetoworkspace, 6 +bind = $mainMod SHIFT, 7, movetoworkspace, 7 +bind = $mainMod SHIFT, 8, movetoworkspace, 8 +bind = $mainMod SHIFT, 9, movetoworkspace, 9 +bind = $mainMod SHIFT, 0, movetoworkspace, 10 + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, right, workspace, e+1 +bind = $mainMod, left, workspace, e-1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod CTRL, mouse:272, resizewindow + +bind = $mainMod SHIFT, J, movewindow, d +bind = $mainMod SHIFT, K, movewindow, u +bind = $mainMod SHIFT, L, movewindow, r +bind = $mainMod SHIFT, H, movewindow, l + + +bind = CTRL, Print, exec, flameshot gui +bind = SHIFT, Print, exec, flameshot screen +bind = , Print, exec, flameshot full + +bind = $mainMod SHIFT, p, exec, hyprpicker -a # colorpicker + +# Control keybinds +bindel = , XF86MonBrightnessUp, exec, brightnessctl set +2% # increase brightness by 2% +bindel = , XF86MonBrightnessDown, exec, brightnessctl set 2%- # decrease brightness by 2% +bindel = , XF86AudioRaiseVolume, exec, pulsemixer --change-volume +2 # increase volume by 2 +bindel = , XF86AudioLowerVolume, exec, pulsemixer --change-volume -2 # decrease volume by 2 +bindel = , XF86AudioMute, exec, pulsemixer --toggle-mute # mute volume +bindel = , XF86AudioPlay, exec, playerctl -a play-pause # pause/play everything + + diff --git a/.config/lf/lfrc b/.config/lf/lfrc index 7281dc82..97a52b98 100644 --- a/.config/lf/lfrc +++ b/.config/lf/lfrc @@ -1,100 +1,142 @@ +#!/bin/sh # Basic Settings -# set ratios 1:2:3 -set hidden true +set cleaner ~/.config/lf/cleaner set drawbox true +set hidden true set icons true +set ifs "\n" set ignorecase true -set previewer "~/.config/lf/preview" -set cleaner "~/.config/lf/cleaner" +set info size +set period 1 +set previewer ~/.config/lf/preview +set ratios 1:2:3 set scrolloff 8 +set shellopts '-eu' # Custom Functions -# Set Wallpapper -cmd setwallpaper ${{ - cp "$f" ~/.local/share/wallpaper.png && feh --bg-scale --no-fehbg "$f" -}} +# cmds/functions # Archive bindings cmd unarchive ${{ - case "$f" in - *.zip) unzip "$f" ;; - *.tar.gz) tar -xzvf "$f" ;; - *.tar.bz2) tar -xjvf "$f" ;; - *.tar) tar -xvf "$f" ;; - *) echo "Unsupported format" ;; - esac + case "$f" in + *.zip) unzip "$f" ;; + *.tar.gz) tar -xzvf "$f" ;; + *.tar.bz2) tar -xjvf "$f" ;; + *.tar) tar -xvf "$f" ;; + *) echo "Unsupported format" ; + esac }} -# cmds/functions -cmd mkdir $mkdir -p "$(echo $* | tr ' ' '\ ')" -cmd mkfile $touch "$(echo $* | tr ' ' '\ ')" cmd moveto ${{ - clear; tput cup $(($(tput lines)/3)); tput bold - set -f - clear; echo "Move to where?" - dest="$(sed -e 's/\s*#.*//' -e '/^$/d' -e 's/^\S*\s*//' ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | sk | sed 's|~|$HOME|')" && - for x in $fx; do - eval mv -iv \"$x\" \"$dest\" - done && - notify-send "File(s) moved." "File(s) moved to $dest." + clear; tput cup $(($(tput lines)/3)); tput bold + set -f + clear; echo "Move to where?" + dest="$(sed -e 's/\s*#.*//' -e '/^$/d' -e 's/^\S*\s*//' ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf | sed 's|~|$HOME|')" && + for x in $fx; do + eval mv -iv \"$x\" \"$dest\" + done && + notify-send "File(s) moved." "File(s) moved to $dest." }} cmd copyto ${{ - clear; tput cup $(($(tput lines)/3)); tput bold - set -f - clear; echo "Copy to where?" - dest="$(sed -e 's/\s*#.*//' -e '/^$/d' -e 's/^\S*\s*//' ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | sk | sed 's|~|$HOME|')" && - for x in $fx; do - eval cp -ivr \"$x\" \"$dest\" - done && - notify-send "File(s) copied." "File(s) copies to $dest." + clear; tput cup $(($(tput lines)/3)); tput bold + set -f + clear; echo "Copy to where?" + dest="$(sed -e 's/\s*#.*//' -e '/^$/d' -e 's/^\S*\s*//' ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf | sed 's|~|$HOME|')" && + for x in $fx; do + eval cp -ivr \"$x\" \"$dest\" + done && + notify-send "File(s) copied." "File(s) copies to $dest." }} +cmd open ${{ + case $(file --mime-type "$(readlink -f $f)" -b) in + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) localc $fx ;; + image/vnd.djvu|application/pdf|application/octet-stream|application/postscript) setsid -f zathura $fx >/dev/null 2>&1 ;; + text/*|application/json|inode/x-empty) $EDITOR $fx ;; + image/x-xcf) setsid -f gimp $f >/dev/null 2>&1 ;; + image/svg+xml) display -- $f ;; + image/*) rotdir $f | grep -i "\.\(png\|jpg\|jpeg\|gif\|webp\|tif\|ico\)\(_large\)*$" | + setsid -f sxiv -aio 2>/dev/null | while read -r file; do + [ -z "$file" ] && continue + lf -remote "send select \"$file\"" + lf -remote "send toggle" + done & + ;; + audio/*) mpv --audio-display=no $f ;; + video/*) setsid -f mpv $f -quiet >/dev/null 2>&1 ;; + application/pdf|application/vnd*|application/epub*) setsid -f zathura $fx >/dev/null 2>&1 ;; + application/pgp-encrypted) $EDITOR $fx ;; + *) for f in $fx; do setsid -f $OPENER $f >/dev/null 2>&1; done ;; + esac +}} + +cmd extract ${{ + clear; tput cup $(($(tput lines)/3)); tput bold + set -f + printf "%s\n\t" "$fx" + printf "extract?[y/N]" + read ans + [ $ans = "y" ] && aunpack $fx +}} + +cmd bulk_rename $vidir +cmd new_instance $alacritty --working-directory "${PWD}" & disown +cmd open_spacefm $spacefm -t "${PWD}" & disown +cmd mkdir $mkdir -p "$(echo $* | tr ' ' '\ ')" +cmd mkfile $touch "$(echo $* | tr ' ' '\ ')" +cmd set_wallpaper $cp "$f" "${XDG_DATA_HOME:-$HOME/.local/share}/wallpaper.png" && feh --bg-scale --no-fehbg "$f" + + # Bindings # Remove some defaults -map m -map o -map n map "'" map '"' -map d map c +map d +map m +map n +map o map p map au unarchive # Basic Functions map . set hidden! -map set hidden! -map shell -map open map $lf -remote "send $id select '$(sk)'" -map rename -map push :mkdir -map D delete -map dd cut -map mv moveto -map cp copyto -map P paste -map mf push :mkfile -map md push :mkdir +map set hidden! map clear -map bg setwallpaper -map c $vscodium "$f" +map open +map shell +map rename +map D delete +map E extract +map P paste +map bg set_wallpaper +map cp copyto +map dd cut map e $nvim "$f" +map md push :mkdir +map mf push :mkfile +map mv moveto +map nN open_spacefm +map nn new_instance +map B bulk_rename # Movement -map gd cd ~/Downloads map gD cd ~/Dropbox -map gn cd ~/Nextcloud -map gp cd ~/Pictures map gc cd ~/.config -map gr cd ~/repos -map gv cd ~/Videos -map gs cd ~/repos/Pyhton/School -map go cd ~/Documents +map gd cd ~/Downloads map gl cd ~/.local +map gn cd ~/Nextcloud +map go cd ~/Documents +map gp cd ~/Pictures +map gr cd ~/repos +map gs cd ~/repos/Pyhton/School +map gu cd ~/Documents/University +map gv cd ~/Videos +map gw cd ~/vimwiki diff --git a/.config/mimeapps.list b/.config/mimeapps.list index fa5fbe4f..3391f5f3 100644 --- a/.config/mimeapps.list +++ b/.config/mimeapps.list @@ -1,34 +1,33 @@ [Default Applications] -text/html=text.desktop; -text/py=text.desktop; -text/markdown=text.desktop; -text/plain=text.desktop; - -x-scheme-handler/http=librewolf.desktop -x-scheme-handler/https=librewolf.desktop -x-scheme-handler/about=librewolf.desktop; -x-scheme-handler/tg=userapp-Telegram Desktop-M1D2M1.desktop -x-scheme-handler/msteams=teams.desktop; - +application/octet-stream=mpv.desktop application/pdf=pdf.desktop; -image/x-canon-cr2=img.desktop; -image/jpeg=img.desktop; -image/jpg=img.desktop; -image/png=img.desktop; -image/gif=img.desktop; -image/heic=img.desktop -image/heif=img.desktop; -image/webp=img.desktop; -image/svg+xml=org.inkscape.Inkscape.desktop; - -video/ts=mpv.desktop; -video/mp4=mpv.desktop; -video/mpeg=mpv.desktop; -video/mpv=mpv.desktop; - audio/mpeg=mpv.desktop; -application/octet-stream=mpv.desktop +image/gif=img.desktop; +image/heic=img.desktop +image/heif=img.desktop; +image/jpeg=img.desktop; +image/jpg=img.desktop; +image/png=img.desktop; +image/svg+xml=org.inkscape.Inkscape.desktop; +image/webp=img.desktop; +image/x-canon-cr2=img.desktop; inode/directory=spacefm.desktop + +text/html=text.desktop; +text/markdown=text.desktop; +text/plain=text.desktop; +text/py=text.desktop; + +video/mp4=mpv.desktop; +video/mpeg=mpv.desktop; +video/mpv=mpv.desktop; +video/ts=mpv.desktop; + +x-scheme-handler/about=librewolf.desktop; +x-scheme-handler/http=librewolf.desktop; +x-scheme-handler/https=librewolf.desktop; +x-scheme-handler/msteams=teams.desktop; +x-scheme-handler/tg=userapp-Telegram Desktop-M1D2M1.desktop diff --git a/.config/mpv/input.conf b/.config/mpv/input.conf new file mode 100644 index 00000000..46270057 --- /dev/null +++ b/.config/mpv/input.conf @@ -0,0 +1,10 @@ +l seek 5 +h seek -5 +L seek 10 +H seek -10 +j seek -60 +k seek 60 +J seek -90 +K seek 90 +S cycle sub + diff --git a/.config/picom/picom.conf b/.config/picom/picom.conf index d1475ece..72996528 100644 --- a/.config/picom/picom.conf +++ b/.config/picom/picom.conf @@ -92,11 +92,11 @@ fading = false # 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; +fade-in-step = 0.1; # 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; +fade-out-step = 0.05; # The time between steps in fade step, in milliseconds. (> 0, defaults to 10) # fade-delta = 10 @@ -244,7 +244,7 @@ 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 = 75 #refresh-rate = 0 # Limit picom to repaint at most once every 1 / 'refresh_rate' second to @@ -427,13 +427,14 @@ opacity-rule = [ "95:class_g = 'Thunderbird'", "90:class_g = 'Bitwarden'", "95:class_g = 'VSCodium'", - "90:name = 'Spotify'", + "90:class_g = 'Spotify'", "95:class_g = 'qBittorrent'", "95:class_g = 'Pacfinder'", "95:class_g = 'Ripcord'", "95:class_g = 'discord'", "95:class_g = 'TelegramDesktop'", "90:class_g = 'kdeconnect.app'", + "95:class_g = 'Lutris'", ] @@ -441,4 +442,4 @@ opacity-rule = [ # Blur blur-background = true; blur-method = "dual_kawase"; -blur-strength = 3; +blur-strength = 4; diff --git a/.config/shell/aliasrc b/.config/shell/aliasrc index cb7a90f5..60f6c9e1 100644 --- a/.config/shell/aliasrc +++ b/.config/shell/aliasrc @@ -3,51 +3,49 @@ # Use neovim for vim if present [ -x "$(command -v nvim)" ] && alias vim="nvim" vimdiff="nvim -d" -# Use $XINITRC variable of file exists -[ -f "$XINITRC" ] && alias startx="startx $XINITRC" # doas not required for some system commands -for command in mount umount sv pacman updatedb su shutdown poweroff reboot zzz systemctl ; do +for command in mount umount sv pacman updatedb su shutdown poweroff reboot zzz systemctl wg wg-quick; do alias $command="doas $command" done; unset command # Vervosity and settings that you pretty much just always are going to wand alias \ - cp="cp -iv" \ - mv="mv -iv" \ - rm="rm -vI" \ bc="bc -ql" \ - mkdir="mkdir -pv" \ + cp="cp -iv" \ df="df -h" \ - nsxiv="nsxiv -a" + mkdir="mkdir -pv" \ + mv="mv -iv" \ + nsxiv="nsxiv -a" \ + rm="rm -vI" # Colorize commands when possible alias \ - ls="exa -a --icons --group-directories-first" \ - grep="rg --color=auto" \ diff="diff --color=auto" \ - ip="ip -color=auto" + grep="rg --color=auto" \ + ip="ip -color=auto" \ + ls="exa -a --icons --group-directories-first" # These common commands ate just too long! Abbriviate them alias \ - g="git" \ - ga="git add" \ - gc="git commit" \ - gP="git push" \ - gp="git pull" \ - gs="git status" \ - gd="git diff" \ - e="$EDITOR" \ - v="$EDITOR" \ battery="acpi" \ code="vscodium" \ + day="redshift -PO 6500" \ dv="doasedit" \ - matrix="unimatrix -s 95" \ - py="python" \ - airpods="bluetoothctl connect C8:B1:CD:E0:14:4F" \ + e="$EDITOR" \ + g="git" \ + gP="git push" \ + ga="git add" \ + gc="git commit" \ + gd="git diff" \ + gp="git pull" \ + gs="git status" \ lf="lfrun" \ + lg="lazygit" \ + matrix="unimatrix -s 95" \ + night="redshift -PO 4500" \ + py="python" \ + v="$EDITOR" \ weather="curl wttr.in/" \ ww="$EDITOR ~/vimwiki/index.md" \ - day="redshift -PO 6500" \ - night="redshift -PO 4500" \ z="zathura" diff --git a/.config/shell/env b/.config/shell/env index 8ffe8d8b..fc838305 100644 --- a/.config/shell/env +++ b/.config/shell/env @@ -4,29 +4,32 @@ typeset -U PATH path # Disable files export LESSHISTFILE=- -export $(dbus-launch) # Default Apps +export BROWSER="librewolf" export EDITOR="nvim" -export VISUAL="nvim" +export IMAGE="nsxiv" export READER="zathura" export TERMINAL="alacritty" -export BROWSER="librewolf" export VIDEO="mpv" -export IMAGE="nsxiv" +export VISUAL="$EDITOR" export WM="awesome" -# ~/ Clean-up +# $HOME Clean-up +export XDG_CACHE_HOME="$HOME/.cache" export XDG_CONFIG_HOME="$HOME/.config" export XDG_DATA_HOME="$HOME/.local/share" -export XDG_CACHE_HOME="$HOME/.cache" export XDG_STATE_HOME="$HOME/.local/share" +# export XDG_CURRENT_DESKTOP=Hyprland +# export XDG_SESSION_TYPE=wayland +# export XDG_SESSION_DESKTOP=Hyprland + export ANDROID_SDK_HOME="${XDG_CONFIG_HOME:-$HOME/.config}/android" export ANSIBLE_CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/ansible/ansible.cfg" export CARGO_HOME="${XDG_DATA_HOME:-$HOME/.local/share}/cargo" -export CUDA_CACHE_PATH="{$XDG_CACHE_HOME}/nv" +export CUDA_CACHE_PATH="{$XDG_CACHE_HOME:-$HOME/.cache}/nv" export ELECTRUMDIR="${XDG_DATA_HOME:-$HOME/.local/share}/electrum" export GNUPGHOME="${XDG_DATA_HOME:-$HOME/.local/share}/gnupg" export GOPATH="${XDG_DATA_HOME:-$HOME/.local/share}/go" @@ -34,9 +37,7 @@ export GTK2_RC_FILES="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-2.0/gtkrc" export HISTFILE="${XDG_CONFIG_HOME:-$HOME/.config}/zsh/history" export HISTFILE="${XDG_DATA_HOME:-$HOME/.local/share}/history" export INPUTRC="${XDG_CONFIG_HOME:-$HOME/.config}/shell/inputrc" -export _JAVA_OPTIONS=-Djava.util.prefs.userRoot="{$XDG_CONFIG_HOME:-$HOME/.config}/java" export KODI_DATA="${XDG_DATA_HOME:-$HOME/.local/share}/kodi" -export LESSHISTFILE="-" export MBSYNCRC="${XDG_CONFIG_HOME:-$HOME/.config}/mbsync/config" export NOTMUCH_CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/notmuch-config" export PASSWORD_STORE_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/password-store" @@ -47,12 +48,16 @@ export UNISON="${XDG_DATA_HOME:-$HOME/.local/share}/unison" export WEECHAT_HOME="${XDG_CONFIG_HOME:-$HOME/.config}/weechat" export WGETRC="${XDG_CONFIG_HOME:-$HOME/.config}/wget/wgetrc" export WINEPREFIX="${XDG_DATA_HOME:-$HOME/.local/share}/wineprefixes/default" +export XAUTHORITY="${XDG_RUNTIME_DIR:-$HOME}/Xauthority" export XINITRC="${XDG_CONFIG_HOME:-$HOME/.config}/x11/xinitrc" export ZDOTDIR="${XDG_CONFIG_HOME:-$HOME/.config}/zsh" +export _JAVA_OPTIONS=-Djava.util.prefs.userRoot="{$XDG_CONFIG_HOME:-$HOME/.config}/java" + # Other program settings export MOZ_USE_XINPUT2="1" # Mozilla smooth scrolling/touchpads. -export QT_QPA_PLATFORMTHEME="gtk2" # Have QT use gtk2 theme. +export QT_QPA_PLATFORMTHEME="gtk3" # Have QT use gtk3 theme. +export QT_SCREEN_SCALE_FACTORS="1;1" # Adds `~/.local/bin` to $PATH export PATH="$PATH:${$(find ~/.local/bin -type d -printf %p:)%%:}" diff --git a/.config/starship/starship.toml b/.config/starship/starship.toml index 68db8253..7063d7d6 100644 --- a/.config/starship/starship.toml +++ b/.config/starship/starship.toml @@ -5,6 +5,7 @@ add_newline = false # Replace the "❯" symbol in the prompt with "➜" [character] # The name of the module we are configuring is "character" success_symbol = "[❯](bold green)" # The "success_symbol" segment is being set to "➜" with the color "bold green" +vimcmd_symbol = "[❯](bold blue)" # Disable the package module, hiding it from the prompt completely [package] diff --git a/.config/sx/sxrc b/.config/sx/sxrc index 87a0dda0..c557f527 100755 --- a/.config/sx/sxrc +++ b/.config/sx/sxrc @@ -1,12 +1,15 @@ #!/bin/sh -autostart="pipewire pipewire-pulse wireplumber flameshot" +autostart="pipewire pipewire-pulse wireplumber telegram-desktop flameshot spotify discord nextcloud" for program in $autostart; do pidof -s "$program" || "$program" & done >/dev/null 2>&1 numlockx on & -xrdb -load $XDG_CONFIG_HOME/X11/xresources & +xinput --set-prop 'COOLERMASTER CM310' 'libinput Accel Speed' -.9 & +xrandr --output DisplayPort-0 --mode 1920x1080 --rate 75 --output HDMI-A-0 --mode 1920x1080 --rate 60 --left-of DisplayPort-0 & +xrdb -load "$XDG_CONFIG_HOME/X11/xresources" & +/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 & exec dbus-launch --sh-syntax --exit-with-session awesome diff --git a/.config/waybar/config b/.config/waybar/config new file mode 100644 index 00000000..a5a77053 --- /dev/null +++ b/.config/waybar/config @@ -0,0 +1,209 @@ +{ + "layer": "top", // Waybar at top layer + /* "position": "bottom", // Waybar position (top|bottom|left|right) */ + "height": 30, // Waybar height (to be removed for auto height) + /* "width": 1280, // Waybar width */ + "spacing": 4, // Gaps between modules (4px) + // Choose the order of the modules + "modules-left": ["wlr/workspaces", "custom/media"], + "modules-center": ["hyprland/window"], + "modules-right": ["network", "custom/pacman", "backlight", "temperature", "pulseaudio", "battery", "custom/weather", "tray", "clock"], + // Modules configuration + "wlr/workspaces": { + "format": "{icon}", + "on-click": "activate", + "format-icons": { + /* "1": "1", */ + /* "2": "2", */ + /* "3": "3", */ + /* "4": "4", */ + /* "5": "5", */ + /* "6": "6", */ + /* "7": "7", */ + /* "8": "8", */ + /* "9": "9", */ + /* "10": "10", */ + /* "urgent": "", */ + /* "active": "", */ + /* "default": "" */ + }, + "sort-by-number": true + }, + + "hyprland/window": { + "format": "{}", + "separate-outputs": true + }, + + "hyprland/language": { + "format": "{}", + "format-us": "us", + "format-lv": "lv", + "keyboard-name": "AT Translated Set 2 keyboard" + }, + + "keyboard-state": { + "numlock": true, + "capslock": true, + "format": "{name} {icon}", + "format-icons": { + "locked": "", + "unlocked": "" + } + }, + + "mpd": { + "format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ", + "format-disconnected": "Disconnected ", + "format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ", + "unknown-tag": "N/A", + "interval": 2, + "consume-icons": { + "on": " " + }, + "random-icons": { + "off": " ", + "on": " " + }, + "repeat-icons": { + "on": " " + }, + "single-icons": { + "on": "1 " + }, + "state-icons": { + "paused": "", + "playing": "" + }, + "tooltip-format": "MPD (connected)", + "tooltip-format-disconnected": "MPD (disconnected)" + }, + + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "", + "deactivated": "" + } + }, + + "tray": { + "icon-size": 21, + "spacing": 10 + }, + + "clock": { + "format": "{:%d.%m.%Y %H:%M:%S}", + "tooltip-format": "{:%Y %B}\n{calendar}", + "interval": 1 + }, + + "cpu": { + "format": "{usage}% ", + "tooltip": false + }, + + "memory": { + "interval": 30, + "format": "{used:0.1f}G/{total:0.1f}G" + }, + + "temperature": { + /* "thermal-zone": 2, */ + /* "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input", */ + "critical-threshold": 80, + "format-critical": "{temperatureC}°C ", + "format": "{temperatureC}°C ", + "format-icons": ["", "", ""] + }, + + "backlight": { + /* "device": "acpi_video1", */ + "format": "{percent}% {icon}", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "on-click": "brightnessctl -q set 60%", + "on-scroll-down": "brightnessctl -q set +1%", + "on-scroll-up": "brightnessctl -q set 1%-", + + }, + + "battery": { + "states": { + "good": 95, + "warning": 30, + "critical": 20 + }, + "format": "{capacity}% {icon}", + "format-charging": "{capacity}% ", + "format-plugged": "{capacity}% ", + "format-alt": "{time} {icon}", + /* "format-good": "", // An empty format will hide the module */ + /* "format-full": "", */ + "format-icons": ["", "", "", "", ""] + }, + + "network": { + "interface": "wlo1*", // (Optional) To force the use of this interface + "format-wifi": "{essid} ({signalStrength}%) ", + "format-ethernet": "{ipaddr}/{cidr} ", + "tooltip-format": "{ifname} via {gwaddr} ", + "format-linked": "{ifname} (No IP) ", + "format-disconnected": "Disconnected ⚠", + "format-alt": "{ifname}: {ipaddr}/{cidr}" + }, + + "pulseaudio": { + "scroll-step": 1, // %, can be a float + "format": "{volume}% {icon} {format_source}", + "format-bluetooth": "{volume}% {icon} {format_source}", + "format-bluetooth-muted": "{volume}% {icon} {format_source}", + "format-muted": "{volume}% {icon} {format_source}", + "format-source": "{volume}% ", + "format-source-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + }, + "on-click": "pulsemixer --toggle-mute" + }, + + "custom/media": { + "format": "{icon} {}", + "return-type": "json", + /* "max-length": 40, */ + "on-click": "playerctl play-pause", + "on-click-right": "playerctl stop", + "on-scroll-up": "playerctl next", + "on-scroll-down": "playerctl previous", + "format-icons": { + "spotify": "", + "default": "🎜" + }, + "escape": true, + "smooth-scrolling-threshold": 10, // This value was tested using a trackpad, it should be lowered if using a mouse. + "exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder + /* "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name */ + }, + + + "custom/pacman": { + "format": "{} ", + "interval": 600, // every hour + "exec": "checkupdates | wc -l", // # of updates + "exec-if": "exit 0", // always run; consider advanced run conditions + "on-click": "alacritty -e paru -Syu --noconfirm; pkill -RTMIN+8 waybar", // update system + "signal": 8 + }, + + "custom/weather": { + "exec": "curl 'https://wttr.in/?format=1'", + "interval": 3600 + }, + +} + diff --git a/.config/waybar/mediaplayer.py b/.config/waybar/mediaplayer.py new file mode 100644 index 00000000..242b5a48 --- /dev/null +++ b/.config/waybar/mediaplayer.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python3 +import argparse +import logging +import sys +import signal +import json +import gi +from gi.repository import Playerctl, GLib +gi.require_version('Playerctl', '2.0') + +logger = logging.getLogger(__name__) + + +def write_output(text, player): + logger.info('Writing output') + + output = {'text': text, + 'class': 'custom-' + player.props.player_name, + 'alt': player.props.player_name} + + sys.stdout.write(json.dumps(output) + '\n') + sys.stdout.flush() + + +def on_play(player, status, manager): + logger.info('Received new playback status') + on_metadata(player, player.props.metadata, manager) + + +def on_metadata(player, metadata, manager): + logger.info('Received new metadata') + track_info = '' + + if player.props.player_name == 'spotify' and \ + 'mpris:trackid' in metadata.keys() and \ + ':ad:' in player.props.metadata['mpris:trackid']: + track_info = 'AD PLAYING' + elif player.get_artist() != '' and player.get_title() != '': + track_info = '{artist} - {title}'.format(artist=player.get_artist(), + title=player.get_title()) + else: + track_info = player.get_title() + + if player.props.status != 'Playing' and track_info: + track_info = ' ' + track_info + write_output(track_info, player) + + +def on_player_appeared(manager, player, selected_player=None): + if player is not None and (selected_player is None or player.name == selected_player): + init_player(manager, player) + else: + logger.debug( + "New player appeared, but it's not the selected player, skipping") + + +def on_player_vanished(manager, player): + logger.info('Player has vanished') + sys.stdout.write('\n') + sys.stdout.flush() + + +def init_player(manager, name): + logger.debug('Initialize player: {player}'.format(player=name.name)) + player = Playerctl.Player.new_from_name(name) + player.connect('playback-status', on_play, manager) + player.connect('metadata', on_metadata, manager) + manager.manage_player(player) + on_metadata(player, player.props.metadata, manager) + + +def signal_handler(sig, frame): + logger.debug('Received signal to stop, exiting') + sys.stdout.write('\n') + sys.stdout.flush() + # loop.quit() + sys.exit(0) + + +def parse_arguments(): + parser = argparse.ArgumentParser() + + # Increase verbosity with every occurrence of -v + parser.add_argument('-v', '--verbose', action='count', default=0) + + # Define for which player we're listening + parser.add_argument('--player') + + return parser.parse_args() + + +def main(): + arguments = parse_arguments() + + # Initialize logging + logging.basicConfig(stream=sys.stderr, level=logging.DEBUG, + format='%(name)s %(levelname)s %(message)s') + + # Logging is set by default to WARN and higher. + # With every occurrence of -v it's lowered by one + logger.setLevel(max((3 - arguments.verbose) * 10, 0)) + + # Log the sent command line arguments + logger.debug('Arguments received {}'.format(vars(arguments))) + + manager = Playerctl.PlayerManager() + loop = GLib.MainLoop() + + manager.connect('name-appeared', + lambda *args: on_player_appeared(*args, arguments.player)) + manager.connect('player-vanished', on_player_vanished) + + signal.signal(signal.SIGINT, signal_handler) + signal.signal(signal.SIGTERM, signal_handler) + signal.signal(signal.SIGPIPE, signal.SIG_DFL) + + for player in manager.props.player_names: + if arguments.player is not None and arguments.player != player.name: + logger.debug('{player} is not the filtered player, skipping it' + .format(player=player.name) + ) + continue + + init_player(manager, player) + + loop.run() + + +if __name__ == '__main__': + main() diff --git a/.config/waybar/style.css b/.config/waybar/style.css new file mode 100644 index 00000000..1a58c4b6 --- /dev/null +++ b/.config/waybar/style.css @@ -0,0 +1,189 @@ +* { + /* `otf-font-awesome` is required to be installed for icons */ + font-family: JetBrains Mono NF, FontAwesome, Roboto, Helvetica, Arial, + sans-serif; + font-size: 13px; + color: #fff; +} + +window#waybar { + background-color: transparent; + border-top: 3px solid transparent; + color: #fff; + transition-property: background-color; + transition-duration: 0.5s; +} + +#window { + border-radius: 20px; + padding-left: 10px; + padding-right: 10px; +} + +window#waybar.hidden { + opacity: 0.2; +} + +/* window#waybar.termite { */ +/* background-color: #3f3f3f; */ +/* } */ + +window#waybar.chromium { + background-color: #000; + border: none; +} + +button { + /* Use box-shadow instead of border so the text isn't offset */ + box-shadow: inset 0 3px transparent; + /* Avoid rounded borders under each button name */ + border: none; + border-radius: 0; +} + +/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ +button:hover { + background: inherit; + box-shadow: inset 0 3px #fff; +} + +#workspaces button { + padding: 0 5px; + background-color: transparent; + color: #fff; +} + +/* #workspaces button:hover { */ +/* background: rgba(0, 0, 0, 0.2); */ +/* } */ + +#workspaces button.active { + box-shadow: inset 0 3px #fff; +} + +#workspaces button.urgent { + background-color: #eb4d4b; +} + +#mode { + border-bottom: 3px solid #fff; +} + +#clock, +#battery, +#cpu, +#memory, +#disk, +#temperature, +#backlight, +#network, +#pulseaudio, +#custom-media, +#tray, +#mode, +#idle_inhibitor, +#scratchpad, +#mpd { + padding: 0 10px; + font-weight: bold; +} + +#window, +#workspaces { + margin: 0 4px; +} + +/* If workspaces is the leftmost module, omit left margin */ +.modules-left > widget:first-child > #workspaces { + margin-left: 0; +} + +/* If workspaces is the rightmost module, omit right margin */ +.modules-right > widget:last-child > #workspaces { + margin-right: 0; +} + +#battery.charging, +#battery.plugged { + color: #26a65b; +} + +@keyframes blink { + to { + color: #fff; + } +} + +#battery.warning:not(.charging) { + color: #ff9e50; +} + +#battery.critical:not(.charging) { + color: #f53c3c; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; +} + +#pulseaudio.muted { + color: #5b5b5b; +} + +#custom-media { + color: #2a5c45; + min-width: 100px; +} + +#custom-media.custom-spotify { + color: #66cc99; +} + +#custom-media.custom-spotify.paused { + color: #cccccc; +} + +#custom-media.custom-vlc { + color: #ffa000; +} + +#temperature.critical { + color: #eb4d4b; +} + +#tray > .passive { + -gtk-icon-effect: dim; +} + +#tray > .needs-attention { + -gtk-icon-effect: highlight; +} + +#network.disconnected { + color: #f53c3c; +} + +#mpd { + color: #2a5c45; +} + +#mpd.disconnected { + color: #f53c3c; +} + +#mpd.stopped { + color: #90b1b1; +} + +#mpd.paused { + color: #51a37a; +} + +#scratchpad { + background: rgba(0, 0, 0, 0.2); +} + +#scratchpad.empty { + background-color: transparent; +} diff --git a/.config/zsh/.zprofile b/.config/zsh/.zprofile deleted file mode 100644 index 12a3234a..00000000 --- a/.config/zsh/.zprofile +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/zsh - -if [[ "$(tty)" = "/dev/tty1" ]]; then - pgrep awesome || sx -fi diff --git a/.config/zsh/.zprofile-X11 b/.config/zsh/.zprofile-X11 new file mode 100644 index 00000000..05f14933 --- /dev/null +++ b/.config/zsh/.zprofile-X11 @@ -0,0 +1,5 @@ +#!/bin/zsh + +if [ "$(tty)" = "/dev/tty1" ]; then + pgrep awesome || sx +fi diff --git a/.config/zsh/.zprofile-wayland b/.config/zsh/.zprofile-wayland new file mode 100644 index 00000000..fac5a9f4 --- /dev/null +++ b/.config/zsh/.zprofile-wayland @@ -0,0 +1,5 @@ +#!/bin/zsh + +if [ "$(tty)" = "/dev/tty1" ]; then + pgrep Hyprland || Hyprland +fi diff --git a/.config/zsh/.zshrc b/.config/zsh/.zshrc index 98f68a73..6172a05f 100644 --- a/.config/zsh/.zshrc +++ b/.config/zsh/.zshrc @@ -2,29 +2,29 @@ [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/zsh/startup" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/zsh/startup" # Options +setopt appendhistory # Immediately append history instead of overwriting +setopt autocd # If only directory path is entered, cd there setopt correct # Auto correct mistakes setopt extendedglob # Extended globaling. Allows using regular expressions with * +setopt histignorealldups # If a new command is a duplicate, remove older one +setopt histignorespace # Don't save commands that start with space +setopt inc_append_history # Save commands are addded to the history immediately +setopt nobeep # No beep setopt nocaseglob # Case insensative globbing setopt numericglobsort # Sort filenames numeracally when it makse sense -setopt nobeep # No beep -setopt appendhistory # Immediately append history instead of overwriting -setopt histignorealldups # If a new command is a duplicate, remove older one -setopt autocd # If only directory path is entered, cd there -setopt inc_append_history # Save commands are addded to the history immediately -setopt histignorespace # Don't save commands that start with space autoload -U select-word-style # Themeing autoload -U colors && colors -zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # Case sensetive TAB completions zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" # Colored completion (different colors fr dirs/files/etc) +zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # Case sensetive TAB completions zstyle ':completion:*' rehash true # Automaticly find new executables in path # Speed up completions zstyle ':completion:*' accept-exact '*(N)' -zstyle ':completion:*' use-cache on zstyle ':completion:*' cache-path ~/.config/zsh/cache zstyle ':completion:*' menu select +zstyle ':completion:*' use-cache on autoload -U compinit zmodload zsh/complist compinit @@ -85,22 +85,22 @@ function lfcd() { } # Navigate words with CTRL+ARROW keys +bindkey '^H' backward-kill-word # delete previous word with CTRL+BACKSPACE bindkey '^[Oc' forward-word bindkey '^[Od' backward-word bindkey '^[[1;5C' forward-word bindkey '^[[1;5D' backward-word -bindkey '^H' backward-kill-word # delete previous word with CTRL+BACKSPACE -bindkey '^[[Z' undo # SHIFT+TAB undo last action bindkey '^[[3~' delete-char +bindkey '^[[Z' undo # SHIFT+TAB undo last action bindkey '^[[A' history-substring-search-up bindkey '^[[B' history-substring-search-down # Use vim keys in tab complete menu bindkey -M menuselect 'h' vi-backward-char +bindkey -M menuselect 'j' vi-down-line-or-history bindkey -M menuselect 'k' vi-up-line-or-history bindkey -M menuselect 'l' vi-forward-char -bindkey -M menuselect 'j' vi-down-line-or-history bindkey -v '^?' backward-delete-char bindkey -s '^o' '^ulfcd\n' diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..92914ffa --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.config/awesome/rc-laptop.lua +.config/awesome/weather diff --git a/.local/bin/lfrun b/.local/bin/lfrun index 5bb0ba31..1591251a 100755 --- a/.local/bin/lfrun +++ b/.local/bin/lfrun @@ -3,17 +3,17 @@ set -e cleanup() { exec 3>&- - rm "$FIFO_UEBERZUG" + rm "$FIFO_UEBERZUG" } if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then - lf "$@" + lf "$@" else - [ ! -d "$HOME/.cache/lf" ] && mkdir --parents "$HOME/.cache/lf" - export FIFO_UEBERZUG="$HOME/.cache/lf/ueberzug-$$" - mkfifo "$FIFO_UEBERZUG" - ueberzug layer -s <"$FIFO_UEBERZUG" -p json & - exec 3>"$FIFO_UEBERZUG" - trap cleanup EXIT - lf "$@" 3>&- + [ ! -d "$HOME/.cache/lf" ] && mkdir --parents "$HOME/.cache/lf" + export FIFO_UEBERZUG="$HOME/.cache/lf/ueberzug-$$" + mkfifo "$FIFO_UEBERZUG" + ueberzug layer -s <"$FIFO_UEBERZUG" -p json & + exec 3>"$FIFO_UEBERZUG" + trap cleanup EXIT + lf "$@" 3>&- fi diff --git a/.local/share/wallpaper.png b/.local/share/wallpaper.png index b79c8f1b..50a2724e 100644 Binary files a/.local/share/wallpaper.png and b/.local/share/wallpaper.png differ