Compare commits

...

17 Commits

  1. 2
      .config/Kvantum/kvantum.kvconfig
  2. 9
      .config/Thunar/uca.xml
  3. 4
      .config/emacs/site-lisp/dot-elpaca.el
  4. 3
      .config/emacs/site-lisp/dot-org-mode.el
  5. 8
      .config/gammastep/config.ini
  6. 12
      .config/ghostty/config
  7. 21
      .config/ghostty/themes/terminal-sexy
  8. 3
      .config/gtk-2.0/gtkrc
  9. 1
      .config/gtk-3.0/settings.ini
  10. 12
      .config/hypr/hypridle.conf
  11. 422
      .config/hypr/hyprland.conf
  12. 73
      .config/hypr/hyprlock.conf
  13. 0
      .config/hypr/hyprpaper.conf
  14. 7
      .config/keepmenu/config.ini
  15. 2
      .config/mpv/mpv.conf
  16. 1
      .config/nvim/init.lua
  17. 55
      .config/nvim/lazy-lock.json
  18. 1
      .config/nvim/lua/core.lua
  19. 12
      .config/nvim/lua/core/autocommands.lua
  20. 238
      .config/nvim/lua/core/buffers.lua
  21. 5
      .config/nvim/lua/core/filetypes.lua
  22. 20
      .config/nvim/lua/core/functions.lua
  23. 6
      .config/nvim/lua/core/globals.lua
  24. 4
      .config/nvim/lua/keybind-functions.lua
  25. 31
      .config/nvim/lua/keybinds.lua
  26. 4
      .config/nvim/lua/selection.lua
  27. 36
      .config/nvim/lua/terminal.lua
  28. 23
      .config/nvim/lua/ui.lua
  29. 7
      .config/nwg-look/config
  30. 2
      .config/qt5ct/qt5ct.conf
  31. 6
      .config/qt6ct/qt6ct.conf
  32. 146
      .config/waybar/config.jsonc
  33. 33
      .config/waybar/power_menu.xml
  34. 236
      .config/waybar/style.css
  35. 10
      .config/xfce4/xfconf/xfce-perchannel-xml/thunar.xml
  36. 9
      .config/xsettingsd/xsettingsd.conf
  37. 6
      .config/zsh/.zlogin
  38. 18
      .config/zsh/.zprofile
  39. 8
      .config/zsh/.zshrc
  40. 5
      .icons/default/index.theme
  41. 7
      .local/bin/panel/btc.sh
  42. 7
      .local/bin/panel/waybar.sh
  43. 10
      .local/bin/play
  44. 15
      .local/bin/printscreen
  45. 2
      .local/bin/system
  46. 5
      .local/bin/wm/lock.sh
  47. 23
      .local/bin/wm/wallpaper.sh
  48. 66
      .mozilla/firefox/README.org
  49. 2
      .mozilla/firefox/dotfiles.profile/chrome/userChrome.css
  50. 2
      README.org
  51. 3
      etc/resolv.conf
  52. 76
      packages/base
  53. 51
      packages/packages
  54. 32
      packages/packages-wayland

2
.config/Kvantum/kvantum.kvconfig

@ -0,0 +1,2 @@
[General]
theme=KvArcDark

9
.config/Thunar/uca.xml

@ -4,8 +4,15 @@
<icon>utilities-terminal</icon> <icon>utilities-terminal</icon>
<name>Open Terminal Here</name> <name>Open Terminal Here</name>
<unique-id>1594675818593070-1</unique-id> <unique-id>1594675818593070-1</unique-id>
<command>urxvt -cd %f</command>
<description>Open Terminal in the Current Directory</description> <description>Open Terminal in the Current Directory</description>
<!-- >>> session=xorg -->
<command>urxvt -cd %f</command>
<!-- <<< -->
<!-- >>> session=wayland -->
<!-- <command>ghostty -e &quot;sh -c &apos;cd %f &amp;&amp; exec $SHELL&apos;&quot;</command> -->
<!-- <<< -->
<patterns>*</patterns> <patterns>*</patterns>
<startup-notify/> <startup-notify/>
<directories/> <directories/>

4
.config/emacs/site-lisp/dot-elpaca.el

@ -9,12 +9,12 @@
;; ----------------------------------------- ;; -----------------------------------------
;; Elpaca bootstrap ;; Elpaca bootstrap
(defvar elpaca-installer-version 0.8) (defvar elpaca-installer-version 0.9)
(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory)) (defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
(defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory)) (defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory))
(defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory)) (defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory))
(defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git" (defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git"
:ref nil :depth 1 :ref nil :depth 1 :inherit ignore
:files (:defaults "elpaca-test.el" (:exclude "extensions")) :files (:defaults "elpaca-test.el" (:exclude "extensions"))
:build (:not elpaca--activate-package))) :build (:not elpaca--activate-package)))
(let* ((repo (expand-file-name "elpaca/" elpaca-repos-directory)) (let* ((repo (expand-file-name "elpaca/" elpaca-repos-directory))

3
.config/emacs/site-lisp/dot-org-mode.el

@ -222,7 +222,8 @@ When ANYWHERE is non-nil, search beyond the preamble."
;;; Org Roam ;;; Org Roam
(elpaca-setup emacsql-sqlite-builtin) (elpaca-setup emacsql
(:also-load emacsql-sqlite-builtin))
(elpaca-setup org-roam (elpaca-setup org-roam
(:autoload org-roam-node-find) ;; TODO, is this enough? (:autoload org-roam-node-find) ;; TODO, is this enough?

8
.config/redshift/redshift.conf → .config/gammastep/config.ini

@ -1,4 +1,4 @@
[redshift] [general]
temp-day=5700 temp-day=5700
; >>> hostname=arch-desktop ; >>> hostname=arch-desktop
@ -14,7 +14,13 @@ brightness-day=1.0
brightness-night=0.9 brightness-night=0.9
location-provider=manual location-provider=manual
; >>> session=xorg
adjustment-method=randr adjustment-method=randr
; <<<
; >>> session=wayland
; adjustment-method=wayland
; <<<
[manual] [manual]
lat=51.81 lat=51.81

12
.config/ghostty/config

@ -0,0 +1,12 @@
app-notifications = no-clipboard-copy
confirm-close-surface = false
copy-on-select = clipboard
cursor-style-blink = false
font-family = DejaVuSansM Nerd Font Mono
font-size = 10
link-url = true
selection-invert-fg-bg = true
term = xterm-256color
theme = terminal-sexy
window-decoration = false
window-inherit-working-directory = true

21
.config/ghostty/themes/terminal-sexy

@ -0,0 +1,21 @@
palette = 0=#282a2e
palette = 1=#a54242
palette = 2=#8c9440
palette = 3=#de935f
palette = 4=#5f819d
palette = 5=#85678f
palette = 6=#5e8d87
palette = 7=#707880
palette = 8=#373b41
palette = 9=#cc6666
palette = 10=#b5bd68
palette = 11=#f0c674
palette = 12=#81a2be
palette = 13=#b294bb
palette = 14=#8abeb7
palette = 15=#c5c8c6
background = #1c1c1c
foreground = #c5c8c6
cursor-color = #c5c8c6
selection-background = #373b41
selection-foreground = #c5c8c6

3
.config/gtk-2.0/gtkrc

@ -1,6 +1,7 @@
# DO NOT EDIT! This file will be overwritten by LXAppearance. # DO NOT EDIT! This file will be overwritten by nwg-look.
# Any customization should be done in ~/.gtkrc-2.0.mine instead. # Any customization should be done in ~/.gtkrc-2.0.mine instead.
include "/home/rick/.gtkrc-2.0.mine"
gtk-theme-name="Arc-Dark" gtk-theme-name="Arc-Dark"
gtk-icon-theme-name="Arc" gtk-icon-theme-name="Arc"
gtk-font-name="DejaVu Sans 10" gtk-font-name="DejaVu Sans 10"

1
.config/gtk-3.0/settings.ini

@ -14,3 +14,4 @@ gtk-xft-antialias=1
gtk-xft-hinting=1 gtk-xft-hinting=1
gtk-xft-hintstyle=hintslight gtk-xft-hintstyle=hintslight
gtk-xft-rgba=rgb gtk-xft-rgba=rgb
gtk-application-prefer-dark-theme=1

12
.config/hypr/hypridle.conf

@ -0,0 +1,12 @@
general {
lock_cmd = pidof hyprlock || hyprlock
before_sleep_cmd = loginctl lock-session
after_sleep_cmd = hyprctl dispatch dpms on # avoid having to press a key twice to turn on display
}
# Turn the screen off after 30 seconds on the lock-screen
listener {
timeout = 30
on-timeout = pidof hyprlock && hyprctl dispatch dpms off
on-resume = hyprctl dispatch dpms on
}

422
.config/hypr/hyprland.conf

@ -0,0 +1,422 @@
################
### MONITORS ###
################
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor = desc:Ancor Communications Inc ASUS PB298 D7LMTF059917, preferred, 0x0, auto
monitor = desc:Iiyama North America PL2492H 11511037C7430, preferred, 2560x0, auto
monitor = , preferred, auto, auto # fallback
###################
### MY PROGRAMS ###
###################
# See https://wiki.hyprland.org/Configuring/Keywords/
# Set programs that you use
$terminal = ghostty
$fileManager = thunar
$menu = rofi -show drun
#################
### AUTOSTART ###
#################
# System level
exec-once = gammastep
exec-once = systemctl --user start hyprpolkitagent
exec-once = hyprctl setcursor capitaine-cursors-light 24
exec-once = hypridle
exec-once = ydotoold
# Scripts
exec-once = ${HOME}/.local/bin/wm/wallpaper.sh
exec-once = ${HOME}/.local/bin/panel/waybar.sh
# Applications
exec-once = [workspace 1] firefox
exec-once = [workspace 2] $terminal
exec-once = [workspace 3] thunar --daemon
exec-once = [workspace 3] thunar
#############################
### ENVIRONMENT VARIABLES ###
#############################
# See https://wiki.hyprland.org/Configuring/Environment-variables/
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_TYPE,wayland
env = XDG_SESSION_DESKTOP,Hyprland
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
#####################
### LOOK AND FEEL ###
#####################
# Refer to https://wiki.hyprland.org/Configuring/Variables/
# https://wiki.hyprland.org/Configuring/Variables/#general
general {
gaps_in = 5
gaps_out = 10
border_size = 2
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
col.active_border = rgb(404552)
col.inactive_border = rgb(2b2e39)
# Set to true enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = false
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
allow_tearing = false
layout = dwindle
}
# https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration {
rounding = 0
# Change transparency of focused and unfocused windows
active_opacity = 1.0
inactive_opacity = 1.0
shadow {
enabled = false
}
# https://wiki.hyprland.org/Configuring/Variables/#blur
blur {
enabled = false
}
}
# https://wiki.hyprland.org/Configuring/Variables/#animations
animations {
enabled = true
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = easeOutQuint,0.23,1,0.32,1
bezier = easeInOutCubic,0.65,0.05,0.36,1
bezier = linear,0,0,1,1
bezier = almostLinear,0.5,0.5,0.75,1.0
bezier = quick,0.15,0,0.1,1
animation = global, 1, 10, default
animation = border, 1, 5.39, easeOutQuint
animation = windows, 1, 4.79, easeOutQuint
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
animation = windowsOut, 1, 1.49, linear, popin 87%
animation = fadeIn, 1, 1.73, almostLinear
animation = fadeOut, 1, 1.46, almostLinear
animation = fade, 1, 3.03, quick
animation = layers, 1, 3.81, easeOutQuint
animation = layersIn, 1, 4, easeOutQuint, fade
animation = layersOut, 1, 1.5, linear, fade
animation = fadeLayersIn, 1, 1.79, almostLinear
animation = fadeLayersOut, 1, 1.39, almostLinear
animation = workspaces, 1, 1.94, almostLinear, fade
animation = workspacesIn, 1, 1.21, almostLinear, fade
animation = workspacesOut, 1, 1.94, almostLinear, fade
}
# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/
# "Smart gaps" / "No gaps when only"
workspace = w[tv1], gapsout:0, gapsin:0
workspace = f[1], gapsout:0, gapsin:0
windowrulev2 = bordersize 0, floating:0, onworkspace:w[tv1]
windowrulev2 = rounding 0, floating:0, onworkspace:w[tv1]
windowrulev2 = bordersize 0, floating:0, onworkspace:f[1]
windowrulev2 = rounding 0, floating:0, onworkspace:f[1]
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
dwindle {
force_split = 2 # split to the bottom right
preserve_split = true
pseudotile = false
}
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
master {
new_status = master
}
# https://wiki.hyprland.org/Configuring/Variables/#misc
misc {
disable_hyprland_logo = true
vfr = true # lower amount of sent frames when nothing is happening on-screen
}
#############
### INPUT ###
#############
# https://wiki.hyprland.org/Configuring/Variables/#input
input {
kb_layout = us
kb_variant =
kb_model =
kb_options = caps:swapescape
kb_rules =
follow_mouse = 1
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
touchpad {
natural_scroll = false
}
}
# https://wiki.hyprland.org/Configuring/Variables/#gestures
gestures {
workspace_swipe = false
}
# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
device { # hyprctl devices
name = logitech-wireless-mouse-pid:4038
sensitivity = -0.5
accel_profile = flat
}
###################
### KEYBINDINGS ###
###################
# See https://wiki.hyprland.org/Configuring/Keywords/
$mainMod = SUPER # Sets "Windows" key as main modifier
# Bind docs https://wiki.hyprland.org/Configuring/Binds/
#--- Control ---#
# Reload hyprland
bind = $mainMod Control_L, r, forcerendererreload
# Close hyprland
bind = $mainMod SHIFT, M, exit,
#--- Window ---#
# Close window
bind = $mainMod, q, killactive,
#-- State/flags --#
# Toggle fullscreen mode
bind = $mainMod, f, fullscreen
# Toggle tiled/floating
bind = $mainMod, Space, togglefloating,
#-- Focus --#
# Focus window in direction
bind = $mainMod, h, movefocus, l
bind = $mainMod, j, movefocus, d
bind = $mainMod, k, movefocus, u
bind = $mainMod, l, movefocus, r
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
# Focus previous/next window
bind = $mainMod, Tab, cyclenext
bind = $mainMod SHIFT, Tab, cyclenext, prev
# Focus workspace
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
# Focus previous/next workspace
bind = $mainMod, equal, workspace, e+1
bind = $mainMod, minus, workspace, e-1
# Focus last workspace
bind = $mainMod, GRAVE, focuscurrentorlast
# Focus previous/next monitor
# TODO
# Special workspace (scratchpad)
bind = $mainMod, T, togglespecialworkspace, magic
#-- Move --#
# Send window to workspace
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
# Move window to previous/next workspace
bind = $mainMod SHIFT, equal, movetoworkspace, e+1
bind = $mainMod SHIFT, minus, movetoworkspace, e-1
# Move window to previous/next monitor
# TODO
# Move floating window
bind = Control_L Alt_L, h, moveactive, -30 0
bind = Control_L Alt_L, j, moveactive, 0 30
bind = Control_L Alt_L, k, moveactive, 0 -30
bind = Control_L Alt_L, l, moveactive, 30 0
bind = Control_L Alt_L, left, moveactive, -30 0
bind = Control_L Alt_L, right, moveactive, 30 0
bind = Control_L Alt_L, up, moveactive, 0 -30
bind = Control_L Alt_L, down, moveactive, 0 30
# Flip the tree from the current windows parent
bind = $mainMod Alt_L, 5, swapsplit, # dwindle
bind = $mainMod Alt_L, 6, togglesplit, # dwindle
# Special workspace (scratchpad)
bind = $mainMod SHIFT, T, movetoworkspace, special:magic
#-- Resize --#
# Resize windows
bind = $mainMod Alt_L, h, resizeactive, -10 0
bind = $mainMod Alt_L, j, resizeactive, 0 10
bind = $mainMod Alt_L, k, resizeactive, 0 -10
bind = $mainMod Alt_L, l, resizeactive, 10 0
bind = $mainMod Alt_L, left, resizeactive, -10 0
bind = $mainMod Alt_L, right, resizeactive, 10 0
bind = $mainMod Alt_L, up, resizeactive, 0 -10
bind = $mainMod Alt_L, down, resizeactive, 0 10
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
#-- Preselect node --#
bind = SUPER Control_L, h, layoutmsg, preselect left
bind = SUPER Control_L, j, layoutmsg, preselect down
bind = SUPER Control_L, k, layoutmsg, preselect up
bind = SUPER Control_L, l, layoutmsg, preselect right
bind = SUPER Control_L, left, layoutmsg, preselect left
bind = SUPER Control_L, right, layoutmsg, preselect right
bind = SUPER Control_L, up, layoutmsg, preselect up
bind = SUPER Control_L, down, layoutmsg, preselect down
#--- General ---#
# Start terminal
bind = $mainMod, Return, exec, $terminal
# Start rofi (program launcher)
bind = $mainMod, d, exec, $menu
# mpv
bind = $mainMod, m, exec, play
bind = $mainMod SHIFT, m, exec, play queue
#--- Control, compositor agnostic ---#
# Reload
bind = $mainMod Control_L, r, exec, ${HOME}/.local/bin/panel/waybar.sh
# System
bind = $mainMod SHIFT, s, exec, system
# Screen brightness
bind = $mainMod, F2, exec, brictl dec 10
bind = $mainMod, F3, exec, brictl inc 10
# Screen capture
bind = , Print, exec, printscreen
bind = Control_L, Print, exec, aliases screencast
# Laptop multimedia keys
bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
bindel = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindel = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindel = , XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
bindel = , XF86MonBrightnessUp, exec, brictl inc 10
bindel = , XF86MonBrightnessDown, exec, brictl dec 10
bindl = , XF86AudioNext, exec, playerctl next
bindl = , XF86AudioPause, exec, playerctl play-pause
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPrev, exec, playerctl previous
bindl = , XF86HomePage, exec, inputctl -d toggle # toggle touchpad
bindl = , XF86Search, exec, inputctl -s toggle # toggle touchscreen
#--- Notification ---#
# Notifiation
bind = Control_L, space, exec, dunstctl close
bind = Control_L SHIFT, space, exec, dunstctl close-all
bind = Control_L, grave, exec, dunstctl history-pop
bind = Control_L SHIFT, period, exec, dunstctl context
##############################
### WINDOWS AND WORKSPACES ###
##############################
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
# Ignore maximize requests from apps. You'll probably like this.
windowrule = suppressevent maximize, class:.*
# Fix some dragging issues with XWayland
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
# Set to floating
windowrule = float, class:feh # window rule v1 can only do either class or title, not both
windowrule = float, class:mpv
windowrule = float, class:org.pulseaudio.pavucontrol
windowrule = float, class:pinentry-gtk
windowrule = float, class:xarchiver
windowrule = float, class:firefox, title:Library
windowrule = float, class:firefox, title:^About.*
windowrule = float, class:thunar, title:File Operation Progress
# Resize floating windows
windowrule = size >50% >70%, class:org.pulseaudio.pavucontrol
# Put workspaces on specific monitors
workspace = 1, monitor:desc:Ancor Communications Inc ASUS PB298 D7LMTF059917, persistent:true, default:true
workspace = 2, monitor:desc:Ancor Communications Inc ASUS PB298 D7LMTF059917, persistent:true
workspace = 3, monitor:desc:Ancor Communications Inc ASUS PB298 D7LMTF059917, persistent:true
workspace = 4, monitor:desc:Ancor Communications Inc ASUS PB298 D7LMTF059917, persistent:true
workspace = 5, monitor:desc:Ancor Communications Inc ASUS PB298 D7LMTF059917, persistent:true
workspace = 6, monitor:desc:Ancor Communications Inc ASUS PB298 D7LMTF059917, persistent:true
workspace = 7, monitor:desc:Ancor Communications Inc ASUS PB298 D7LMTF059917, persistent:true
workspace = 8, monitor:desc:Ancor Communications Inc ASUS PB298 D7LMTF059917, persistent:true
workspace = 9, monitor:desc:Iiyama North America PL2492H 11511037C7430, persistent:true, default:true
workspace = 10, monitor:desc:Iiyama North America PL2492H 11511037C7430, persistent:true

73
.config/hypr/hyprlock.conf

@ -0,0 +1,73 @@
$font_size = 48
$font_size_small = 16
$image_size = 175
general {
hide_cursor = true
ignore_empty_input = true
}
background {
monitor =
path = screenshot
blur_passes = 2
blur_size = 2
noise = 0
}
label {
font_family = DejaVu Sans Serif
font_size = $font_size
text = $TIME12
text_align = center
position = 0, 275
halign = center
valign = center
}
label {
font_family = DejaVu Sans Serif
font_size = $font_size_small
text = cmd[] date "+%A, %B %d"
position = 0, 200
halign = center
valign = center
}
image {
monitor =
path = ~/.local/bin/wm/lock.png
size = $image_size
rounding = -1
border_size = 0
halign = center
valign = center
}
input-field {
monitor =
size = $image_size, $image_size
outline_thickness = 10
outer_color = rgba(255, 255, 255, 0.0)
inner_color = rgba(0, 0, 0, 0.0)
check_color = rgba(255, 255, 255, 1.0)
fail_color = rgba(255, 0, 0, 1.0)
font_family = DejaVu Sans Serif
font_color = rgba(255, 255, 255, 0.9)
placeholder_text =
fail_text =
hide_input = true
rounding = -1
fade_on_empty = false
halign = center
valign = center
}

0
.config/hypr/hyprpaper.conf

7
.config/keepmenu/config.ini

@ -11,5 +11,12 @@ autotype_default = {USERNAME}{TAB}{PASSWORD}{ENTER}
gui_editor = emacsclient gui_editor = emacsclient
editor = vim editor = vim
terminal = urxvt terminal = urxvt
# >>> session=xorg
type_library = xdotool type_library = xdotool
# <<<
# >>> session=wayland
# type_library = ydotool
# <<<
hide_groups = Recycle Bin hide_groups = Recycle Bin

2
.config/mpv/mpv.conf

@ -31,7 +31,7 @@ sub-auto=fuzzy
sub-file-paths=ass:srt:sub:subs:subtitles:Subtitles sub-file-paths=ass:srt:sub:subs:subtitles:Subtitles
# [SUBTITLES LOOK] (for srt) # [SUBTITLES LOOK] (for srt)
sub-font="Segoe UI Semibold" sub-font="DejaVu Sans"
sub-font-size=48 sub-font-size=48
sub-margin-y=36 sub-margin-y=36
sub-color="#FFFFFFFF" sub-color="#FFFFFFFF"

1
.config/nvim/init.lua

@ -6,4 +6,5 @@ require("packages").setup({
require("development"), require("development"),
require("git"), require("git"),
}) })
require("terminal").setup()
require("keybinds").setup() require("keybinds").setup()

55
.config/nvim/lazy-lock.json

@ -1,42 +1,43 @@
{ {
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" }, "Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
"LuaSnip": { "branch": "master", "commit": "33b06d72d220aa56a7ce80a0dd6f06c70cd82b9d" }, "LuaSnip": { "branch": "master", "commit": "c9b9a22904c97d0eb69ccb9bab76037838326817" },
"auto-save.nvim": { "branch": "main", "commit": "b58948445c43e6903987a9bb97c82e66fdcc0786" }, "auto-save.nvim": { "branch": "main", "commit": "29f793a3a7f98129387590269ffe3ad61ab5e509" },
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, "cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
"cmp-nvim-lsp": { "branch": "main", "commit": "99290b3ec1322070bcfb9e846450a46f6efa50f0" }, "cmp-nvim-lsp": { "branch": "main", "commit": "a8912b88ce488f411177fc8aed358b04dc246d7b" },
"cmp-nvim-lua": { "branch": "main", "commit": "f12408bdb54c39c23e67cab726264c10db33ada8" }, "cmp-nvim-lua": { "branch": "main", "commit": "f12408bdb54c39c23e67cab726264c10db33ada8" },
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, "cmp-path": { "branch": "main", "commit": "c6635aae33a50d6010bf1aa756ac2398a2d54c32" },
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
"dashboard-nvim": { "branch": "master", "commit": "ae309606940d26d8c9df8b048a6e136b6bbec478" }, "dashboard-nvim": { "branch": "master", "commit": "000448d837f6e7a47f8f342f29526c4d7e49e9ce" },
"diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" }, "diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" },
"friendly-snippets": { "branch": "main", "commit": "efff286dd74c22f731cdec26a70b46e5b203c619" }, "friendly-snippets": { "branch": "main", "commit": "efff286dd74c22f731cdec26a70b46e5b203c619" },
"gitsigns.nvim": { "branch": "main", "commit": "5f808b5e4fef30bd8aca1b803b4e555da07fc412" }, "gitsigns.nvim": { "branch": "main", "commit": "17ab794b6fce6fce768430ebc925347e349e1d60" },
"lazy.nvim": { "branch": "main", "commit": "7c493713bc2cb392706866eeba53aaef6c8e9fc6" }, "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
"lspkind.nvim": { "branch": "master", "commit": "d79a1c3299ad0ef94e255d045bed9fa26025dab6" }, "lspkind.nvim": { "branch": "master", "commit": "d79a1c3299ad0ef94e255d045bed9fa26025dab6" },
"lspsaga.nvim": { "branch": "main", "commit": "2710a0ad97b5aaff404cd4756c296df454b3f726" }, "lspsaga.nvim": { "branch": "main", "commit": "778d56ff9b387dacd14ae648ed5604394b486f51" },
"lualine.nvim": { "branch": "master", "commit": "2a5bae925481f999263d6f5ed8361baef8df4f83" }, "lualine.nvim": { "branch": "master", "commit": "0ea56f91b7f51a37b749c050a5e5dfdd56b302b3" },
"neodev.nvim": { "branch": "main", "commit": "46aa467dca16cf3dfe27098042402066d2ae242d" }, "neodev.nvim": { "branch": "main", "commit": "46aa467dca16cf3dfe27098042402066d2ae242d" },
"neogit": { "branch": "master", "commit": "40038473707c54a846bd11ecaf5933dd45858972" }, "neogit": { "branch": "master", "commit": "97f83f1dc51dee41e08e3c7a8adf00e1083e3178" },
"nvim-base16": { "branch": "master", "commit": "6ac181b5733518040a33017dde654059cd771b7c" }, "nvim-base16": { "branch": "master", "commit": "3f13e15c53ea2aaf79c24ceab725309d87f0619c" },
"nvim-cmp": { "branch": "main", "commit": "3403e2e9391ed0a28c3afddd8612701b647c8e26" }, "nvim-cmp": { "branch": "main", "commit": "059e89495b3ec09395262f16b1ad441a38081d04" },
"nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" }, "nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" },
"nvim-lspconfig": { "branch": "master", "commit": "5a812abc65d529ea7673059a348814c21d7f87ff" }, "nvim-lspconfig": { "branch": "master", "commit": "4ea9083b6d3dff4ddc6da17c51334c3255b7eba5" },
"nvim-treesitter": { "branch": "master", "commit": "337b503688eccb3046547661e4c738e674548fcf" }, "nvim-treesitter": { "branch": "master", "commit": "0e21ee8df6235511c02bab4a5b391d18e165a58d" },
"nvim-treesitter-textobjects": { "branch": "master", "commit": "ad8f0a472148c3e0ae9851e26a722ee4e29b1595" }, "nvim-treesitter-textobjects": { "branch": "master", "commit": "698b5f805722254bca3c509591c1806d268b6c2f" },
"nvim-web-devicons": { "branch": "master", "commit": "e73d2774d12d0ecf9e05578d692ba1ea50508cf2" }, "nvim-web-devicons": { "branch": "master", "commit": "c90dee4e930ab9f49fa6d77f289bff335b49e972" },
"omnisharp-extended-lsp.nvim": { "branch": "main", "commit": "4916fa12e5b28d21a1f031f0bdd10aa15a75d85d" }, "omnisharp-extended-lsp.nvim": { "branch": "main", "commit": "ec1a2431f8872f650a85ed71c24f0715df2e49c2" },
"plenary.nvim": { "branch": "master", "commit": "2d9b06177a975543726ce5c73fca176cedbffe9d" }, "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
"project.nvim": { "branch": "main", "commit": "8c6bad7d22eef1b71144b401c9f74ed01526a4fb" }, "project.nvim": { "branch": "main", "commit": "8c6bad7d22eef1b71144b401c9f74ed01526a4fb" },
"rainbow-delimiters.nvim": { "branch": "master", "commit": "c7e489756b5455f922ce79ac374a4ede594f4a20" }, "rainbow-delimiters.nvim": { "branch": "master", "commit": "c7e489756b5455f922ce79ac374a4ede594f4a20" },
"sqlite.lua": { "branch": "master", "commit": "d0ffd703b56d090d213b497ed4eb840495f14a11" }, "sqlite.lua": { "branch": "master", "commit": "50092d60feb242602d7578398c6eb53b4a8ffe7b" },
"telescope-all-recent.nvim": { "branch": "main", "commit": "267e9e5fd13a6e9a4cc6ffe00452d446d040401d" }, "telescope-all-recent.nvim": { "branch": "main", "commit": "e437f60ea468268e49ffdc0c9ed7c5ba384e63cf" },
"telescope-file-browser.nvim": { "branch": "master", "commit": "626998e5c1b71c130d8bc6cf7abb6709b98287bb" }, "telescope-file-browser.nvim": { "branch": "master", "commit": "626998e5c1b71c130d8bc6cf7abb6709b98287bb" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "cf48d4dfce44e0b9a2e19a008d6ec6ea6f01a83b" }, "telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" },
"telescope-recent-files": { "branch": "main", "commit": "3a7a1b9c6b52b6ff7938c59f64c87a05e013dff8" }, "telescope-recent-files": { "branch": "main", "commit": "eb190c0baded1cbfa9d8767c817b054377683163" },
"telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" }, "telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
"todo-comments.nvim": { "branch": "main", "commit": "ae0a2afb47cf7395dc400e5dc4e05274bf4fb9e0" }, "todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" },
"trouble.nvim": { "branch": "main", "commit": "46cf952fc115f4c2b98d4e208ed1e2dce08c9bf6" }, "toggleterm.nvim": { "branch": "main", "commit": "9a88eae817ef395952e08650b3283726786fb5fb" },
"ultimate-autopair.nvim": { "branch": "development", "commit": "9e3209190c22953566ae4e6436ad2b4ff4dabb95" }, "trouble.nvim": { "branch": "main", "commit": "85bedb7eb7fa331a2ccbecb9202d8abba64d37b3" },
"ultimate-autopair.nvim": { "branch": "development", "commit": "5835876b57901d81ebbeb3cd6ad71aaed66f82d7" },
"vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" }, "vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" },
"which-key.nvim": { "branch": "main", "commit": "9b365a6428a9633e3eeb34dbef1b791511c54f70" } "which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" }
} }

1
.config/nvim/lua/core.lua

@ -3,3 +3,4 @@ require("core.config")
require("core.buffers") require("core.buffers")
require("core.autocommands") require("core.autocommands")
require("core.globals") require("core.globals")
require("core.filetypes")

12
.config/nvim/lua/core/autocommands.lua

@ -42,12 +42,18 @@ vim.api.nvim_create_autocmd("User", {
end, end,
}) })
-- Create an autocommand for full window buffers
vim.api.nvim_create_autocmd("BufWinEnter", { vim.api.nvim_create_autocmd("BufWinEnter", {
-- callback = require("core.buffers").add_buffer
callback = function() callback = function()
-- Buffer tracking
require("core.buffers").add_buffer() require("core.buffers").add_buffer()
LOG(require("core.buffers").buffers)
end, end,
desc = "Track all full window buffers visited", desc = "Track all full window buffers visited",
}) })
vim.api.nvim_create_autocmd({ "BufDelete", "BufWipeout" }, {
callback = function(opts)
-- Buffer tracking
require("core.buffers").remove_buffer(opts.match)
end,
desc = "Track all full window buffers killed",
})

238
.config/nvim/lua/core/buffers.lua

@ -4,9 +4,10 @@ local F = require("core.functions")
local M = {} local M = {}
-- Buffer table structure: -- Buffers, categorized into groups
-- { -- {
-- "Group" = { "buffer1", "buffer2", active_index = 1 } -- { group = "Project", buffers = { "buffer1", "buffer2" }, active_index = 1 },
-- { group = "Other", buffers = { "buffer3", "buffer4" }, active_index = 1 },
-- } -- }
M.buffers = {} M.buffers = {}
@ -42,19 +43,32 @@ M.add_buffer = function()
-- Add if buffer does not exist yet -- Add if buffer does not exist yet
local add = function(config_group) local add = function(config_group)
local group = eval_group(config_group) local group = eval_group(config_group)
if not M.buffers[group] then M.buffers[group] = {} end
for i, buffer in ipairs(M.buffers[group]) do local index
for i, buffer_group in ipairs(M.buffers) do
if buffer_group.group == group then index = i end
end
-- Group is new entirely, so we only have 1 buffer
if not index then
table.insert(M.buffers, { group = group, buffers = { buffer_name }, active_index = 1 })
return #M.buffers, 1 -- group index, buffer index
end
-- Buffer previously added, set active
for i, buffer in ipairs(M.buffers[index].buffers) do
if buffer == buffer_name then if buffer == buffer_name then
M.buffers[group]["active_index"] = i M.buffers[index].active_index = i
return group, i return index, i -- group index, buffer index
end end
end end
table.insert(M.buffers[group], buffer_name) -- Buffer is new, add it to the list
local count = #M.buffers[group] table.insert(M.buffers[index].buffers, buffer_name)
M.buffers[group]["active_index"] = count local count = #M.buffers[index].buffers
M.buffers[index].active_index = count
return group, count return index, count -- group index, buffer index
end end
-- Walk matcher configuration -- Walk matcher configuration
@ -82,34 +96,74 @@ M.add_buffer = function()
end end
local get_group_from_buffer = function(buffer_name) local get_group_from_buffer = function(buffer_name)
for group, buffers in pairs(M.buffers) do for i, buffer_group in ipairs(M.buffers) do
for i, buffer in ipairs(buffers) do for j, buffer in ipairs(buffer_group.buffers) do
if buffer == buffer_name then return group, i end if buffer == buffer_name then
return i, j -- group index, buffer index
end
end end
end end
return nil return nil
end end
local focus_buffer = function(new_buffer_name)
for _, buffer in ipairs(vim.api.nvim_list_bufs()) do
if vim.api.nvim_buf_get_name(buffer) == new_buffer_name then
vim.api.nvim_set_current_buf(buffer)
break
end
end
end
M.remove_buffer = function(buffer_name)
if not buffer_name or buffer_name == "" then return end
local group_index, buffer_index = get_group_from_buffer(buffer_name)
if not group_index or not buffer_index then return end
local buffer_group = M.buffers[group_index]
-- Remove the buffer and decrease active index
table.remove(buffer_group.buffers, buffer_index)
buffer_group.active_index = math.max(buffer_group.active_index - 1, 1)
local new_buffer_name = buffer_group.buffers[buffer_group.active_index]
-- If there are now no buffers in the group, delete the group
if #buffer_group.buffers == 0 then
table.remove(M.buffers, group_index)
if #M.buffers == 0 then return end
if #M.buffers < group_index then group_index = group_index - 1 end
new_buffer_name = M.buffers[group_index].buffers[M.buffers[group_index].active_index]
end
-- Make the new index the active buffer
focus_buffer(new_buffer_name)
end
local buffer_action_in_active_group = function(action, direction) local buffer_action_in_active_group = function(action, direction)
local buffer_name = get_buffer_name() local buffer_name = get_buffer_name()
if not buffer_name then return end if not buffer_name then return end
local group, index = get_group_from_buffer(buffer_name) -- Get active group from the current buffer
if not group then group, index = M.add_buffer() end local group_index, buffer_index = get_group_from_buffer(buffer_name)
if not group_index then group_index, buffer_index = M.add_buffer() end
local buffers = M.buffers[group] -- Get buffer set
local buffers = M.buffers[group_index].buffers
if #buffers < 2 then return end if #buffers < 2 then return end
-- Determine the other index -- Determine the other index
local other_index = index + direction local other_index = buffer_index + direction
if index == 1 and direction == -1 then if buffer_index == 1 and direction == -1 then
other_index = #buffers other_index = #buffers
elseif index == #buffers and direction == 1 then elseif buffer_index == #buffers and direction == 1 then
other_index = 1 other_index = 1
end end
if action == "move" then if action == "move" then
for _, buffer in ipairs(vim.api.nvim_list_bufs()) do for _, buffer in ipairs(vim.api.nvim_list_bufs()) do
-- TODO: Probably not needed if the other autocommands are implemented
-- Remove inactive buffers -- Remove inactive buffers
if not vim.api.nvim_buf_is_loaded(buffer) then if not vim.api.nvim_buf_is_loaded(buffer) then
for i, group_buffer in ipairs(buffers) do for i, group_buffer in ipairs(buffers) do
@ -127,7 +181,7 @@ local buffer_action_in_active_group = function(action, direction)
-- Make buffer active -- Make buffer active
if vim.api.nvim_buf_get_name(buffer) == buffers[other_index] then if vim.api.nvim_buf_get_name(buffer) == buffers[other_index] then
vim.api.nvim_set_current_buf(buffer) vim.api.nvim_set_current_buf(buffer)
buffers.active_index = other_index M.buffers[group_index].active_index = other_index
break break
end end
@ -135,11 +189,11 @@ local buffer_action_in_active_group = function(action, direction)
end end
elseif action == "swap" then elseif action == "swap" then
local tmp = buffers[other_index] local tmp = buffers[other_index]
buffers[other_index] = buffers[index] buffers[other_index] = buffers[buffer_index]
buffers[index] = tmp buffers[buffer_index] = tmp
end end
M.buffers[group] = buffers M.buffers[group_index].buffers = buffers
end end
M.buffer_move_left = function() M.buffer_move_left = function()
@ -165,13 +219,28 @@ local buffer_group_move = function(direction)
local buffer_name = get_buffer_name() local buffer_name = get_buffer_name()
if not buffer_name then return end if not buffer_name then return end
-- TODO: How to get groups deterministically?
-- Get active group from the current buffer -- Get active group from the current buffer
local group_index, _ = get_group_from_buffer(buffer_name)
if not group_index then group_index, _ = M.add_buffer() end
-- Check groups bounds -- Check groups bounds
if #M.buffers < 2 then return end
-- Determine the other index
local other_index = group_index + direction
if group_index == 1 and direction == -1 then
other_index = #M.buffers
elseif group_index == #M.buffers and direction == 1 then
other_index = 1
end
-- Get active index from other group
local other_active_index = M.buffers[other_index].active_index
-- Change active group -- Make buffer active
-- TODO: What do if this buffer no longer exists?
local other_buffer = M.buffers[other_index].buffers[other_active_index]
focus_buffer(other_buffer)
end end
M.buffer_group_move_up = function() M.buffer_group_move_up = function()
@ -182,32 +251,97 @@ M.buffer_group_move_down = function()
buffer_group_move(1) buffer_group_move(1)
end end
-- TODO: functions that can --------------------------------------------
-- v Navigate buffer left -- Telescope functionss
-- v Navigate buffer right
-- - Navigate group up (use active_index when swapping) local pick = function(title, items, entry_maker, action)
-- - Navigate group down local actions = require("telescope.actions")
-- v Move buffer left local action_state = require("telescope.actions.state")
-- v Move buffer right local conf = require("telescope.config").values
-- - Remove buffer from currently active group (decrease active_index) local finders = require("telescope.finders")
local pickers = require("telescope.pickers")
pickers.new({}, {
prompt_title = title,
finder = finders.new_table {
results = items,
entry_maker = entry_maker,
},
previewer = false,
sorter = conf.generic_sorter({}),
attach_mappings = function(prompt_bufnr)
actions.select_default:replace(function()
actions.close(prompt_bufnr)
local selection = action_state.get_selected_entry()
action(selection)
end)
return true
end,
}):find()
end
return M M.buffer_pick_buffer = function()
local buffer_name = get_buffer_name()
if not buffer_name then return end
-- Get active group from the current buffer
local group_index, _ = get_group_from_buffer(buffer_name)
if not group_index then group_index, _ = M.add_buffer() end
-- Get all buffers from the active group
local buffers = {}
for i, buffer in ipairs(M.buffers[group_index].buffers) do
table.insert(buffers, { key = buffer, value = tostring(i) })
end
pick("Group buffers",
buffers,
function(buffer)
-- Only show last part of the path
local display = buffer.key:match("^.+/(.+)$") or buffer.key
return {
display = display, -- shown in the picker
ordinal = buffer.value, -- used for sorting/filtering
value = buffer.value, -- actual value
}
end,
function(selection)
local new_buffer_name = M.buffers[group_index].buffers[tonumber(selection.value)]
-- Make new buffer active
focus_buffer(new_buffer_name)
end
)
end
-- (cond M.buffer_pick_group = function()
-- ((string-equal "*" (substring (buffer-name) 0 1)) "Emacs") -- Get all groups
-- ((or (memq major-mode '(magit-process-mode local groups = {}
-- magit-status-mode for i, buffer_group in ipairs(M.buffers) do
-- magit-diff-mode table.insert(groups, { key = buffer_group.group, value = tostring(i) })
-- magit-log-mode end
-- magit-file-mode
-- magit-blob-mode pick("Groups",
-- magit-blame-mode)) groups,
-- (string= (buffer-name) "COMMIT_EDITMSG")) "Magit") function(group)
-- ((project-current) (dot/project-project-name)) -- Only show last part of the path
-- ((memq major-mode '(org-mode local display = group.key:match("^.+/(.+)$") or group.key
-- emacs-lisp-mode)) "Org Mode") return {
-- ((derived-mode-p 'dired-mode) "Dired") display = display, -- shown in the picker
-- ((derived-mode-p 'prog-mode ordinal = group.value, -- used for sorting/filtering
-- 'text-mode) "Editing") value = group.value, -- actual value
-- (t "Other"))))) }
end,
function(selection)
local buffer_group = M.buffers[tonumber(selection.value)]
local new_buffer_name = buffer_group.buffers[buffer_group.active_index]
-- Make new buffer active
focus_buffer(new_buffer_name)
end
)
end
return M

5
.config/nvim/lua/core/filetypes.lua

@ -0,0 +1,5 @@
vim.filetype.add({
extension = {
flw = "lua",
},
})

20
.config/nvim/lua/core/functions.lua

@ -6,13 +6,18 @@ M.is_buffer_a_file = function()
return buffer_name ~= "" and vim.fn.filereadable(buffer_name) == 1 return buffer_name ~= "" and vim.fn.filereadable(buffer_name) == 1
end end
M.normalize_path = function(path)
if not path then return nil end
return IS_WINDOWS() and path:gsub("\\", "/") or path
end
M.get_file_path = function() M.get_file_path = function()
if not M.is_buffer_a_file() then if not M.is_buffer_a_file() then
return nil return nil
end end
local file_path = vim.fn.expand("%:p") local file_path = vim.fn.expand("%:p")
return vim.fn.fnamemodify(file_path, ":h") .. "/" return M.normalize_path(vim.fn.fnamemodify(file_path, ":h")) .. "/"
end end
M.get_netrw_path = function() -- b:netrw_curdir M.get_netrw_path = function() -- b:netrw_curdir
@ -20,29 +25,30 @@ M.get_netrw_path = function() -- b:netrw_curdir
return nil return nil
end end
return vim.fn.fnamemodify(vim.fn.bufname(), ":p") return M.normalize_path(vim.fn.fnamemodify(vim.fn.bufname(), ":p"))
end end
M.get_current_directory = function() M.get_current_directory = function()
return M.get_file_path() or M.get_netrw_path() or vim.fn.getcwd() return M.get_file_path() or M.get_netrw_path() or M.normalize_path(vim.fn.getcwd())
end end
M.find_project_root = function() M.find_project_root = function()
local current_directory = M.get_current_directory() local current_directory = M.get_current_directory()
if current_directory:match("^term://") then return nil, current_directory end
local directory = current_directory local directory = current_directory
while directory ~= "/" do while directory ~= "/" and not directory:match("^%a:[/\\]?$") do
local git_path = vim.loop.fs_stat(directory .. "/.git") local git_path = vim.loop.fs_stat(directory .. "/.git")
if git_path then if git_path then
return directory:gsub("/$", "") -- remove trailing slash return M.normalize_path(directory:gsub("/$", "")) -- remove trailing slash
end end
local project_file = vim.loop.fs_stat(directory .. "/.project") local project_file = vim.loop.fs_stat(directory .. "/.project")
if project_file and project_file.type == "file" then if project_file and project_file.type == "file" then
return directory:gsub("/$", "") -- remove trailing slash return M.normalize_path(directory:gsub("/$", "")) -- remove trailing slash
end end
directory = vim.fn.fnamemodify(directory, ":h") directory = M.normalize_path(vim.fn.fnamemodify(directory, ":h"))
end end
return nil, current_directory return nil, current_directory

6
.config/nvim/lua/core/globals.lua

@ -1,3 +1,7 @@
IS_WINDOWS = function()
return string.find(vim.loop.os_uname().sysname, "NT")
end
-- Usage: -- Usage:
-- :lua P("Hello World!") -- :lua P("Hello World!")
P = function(v) P = function(v)
@ -15,5 +19,5 @@ R = function(name)
end end
LOG = function(v) LOG = function(v)
vim.fn.writefile({ vim.inspect(v) }, "/tmp/nvim-log", "a") vim.fn.writefile({ vim.inspect(v) }, vim.fn.stdpath("cache") .. "/log", "a")
end end

4
.config/nvim/lua/keybind-functions.lua

@ -223,6 +223,10 @@ M.search_buffer = function()
}) })
end end
M.toggle_term = function()
vim.api.nvim_command("ToggleTerm")
end
-- TODO: Temporary copy/pasted until project_nvim exposes this function -- TODO: Temporary copy/pasted until project_nvim exposes this function
-- https://github.com/ahmedkhalf/project.nvim/issues/145 -- https://github.com/ahmedkhalf/project.nvim/issues/145
-- TODO: Create a Telescope extension out of this, for telescope-all-recent -- TODO: Create a Telescope extension out of this, for telescope-all-recent

31
.config/nvim/lua/keybinds.lua

@ -1,6 +1,7 @@
local K = vim.keymap.set local K = vim.keymap.set
local builtin local builtin
local bs = require("core.buffers")
local wk = require("which-key") local wk = require("which-key")
local F = require("keybind-functions") local F = require("keybind-functions")
@ -57,6 +58,18 @@ M.setup = function()
K("i", "<BS>", F.hungry_delete_backspace()) K("i", "<BS>", F.hungry_delete_backspace())
K("i", "<Del>", F.hungry_delete()) K("i", "<Del>", F.hungry_delete())
-- Navigation
K("n", "<M-h>", bs.buffer_move_left)
K("n", "<M-j>", bs.buffer_group_move_down)
K("n", "<M-k>", bs.buffer_group_move_up)
K("n", "<M-l>", bs.buffer_move_right)
K("n", "<M-H>", bs.buffer_swap_left)
K("n", "<M-L>", bs.buffer_swap_right)
-- Terminal
K("n", "<C-\\>", F.toggle_term)
K("t", "<C-\\>", F.toggle_term)
---------------------------------------- ----------------------------------------
--- Leader keys --- --- Leader keys ---
@ -66,6 +79,7 @@ M.setup = function()
F.wk("<leader>b", "buffer/bookmark") F.wk("<leader>b", "buffer/bookmark")
K("n", "<leader>bb", builtin.buffers, { desc = "Switch buffer" }) K("n", "<leader>bb", builtin.buffers, { desc = "Switch buffer" })
K("n", "<leader>bB", bs.buffer_pick_buffer, { desc = "Switch tab group buffer" })
K("n", "<leader>bd", F.buffer_dashboard, { desc = "Dashboard" }) K("n", "<leader>bd", F.buffer_dashboard, { desc = "Dashboard" })
@ -112,6 +126,10 @@ M.setup = function()
K("n", "<leader>sq", ":nohlsearch<CR>", { desc = "Stop search", silent = true }) K("n", "<leader>sq", ":nohlsearch<CR>", { desc = "Stop search", silent = true })
F.wk("<leader>t", "tabs/toggle")
K("n", "<leader>tg", bs.buffer_pick_group, { desc = "Switch tab group" })
F.wk("<leader>v", "git") -- version control F.wk("<leader>v", "git") -- version control
K("n", "<leader>vr", F.vc_select_repo, { desc = "Select repo" }) K("n", "<leader>vr", F.vc_select_repo, { desc = "Select repo" })
K("n", "<leader>vv", F.vc_status, { desc = "Neogit status" }) K("n", "<leader>vv", F.vc_status, { desc = "Neogit status" })
@ -239,4 +257,17 @@ M.telescope_default_mappings = function()
} }
end end
-- Keybindings for toggleterm.nvim
M.toggleterm_nvim = function()
local keymaps = function()
local opts = { buffer = 0 }
K("t", "<Esc>", [[<C-\><C-n>]], opts)
end
vim.api.nvim_create_autocmd("TermOpen", {
pattern = "term://*toggleterm#*",
callback = keymaps,
})
end
return M return M

4
.config/nvim/lua/selection.lua

@ -9,9 +9,9 @@ return {
-- Fuzzy Finder Algorithm which requires local dependencies to be built. -- Fuzzy Finder Algorithm which requires local dependencies to be built.
{ {
"nvim-telescope/telescope-fzf-native.nvim", "nvim-telescope/telescope-fzf-native.nvim",
build = "make", build = IS_WINDOWS() and "mingw32-make" or "make",
cond = function() cond = function()
return vim.fn.executable "make" == 1 return vim.fn.executable(IS_WINDOWS() and "mingw32-make" or "make") == 1
end, end,
}, },
-- Extensions -- Extensions

36
.config/nvim/lua/terminal.lua

@ -0,0 +1,36 @@
-- Module for managing popup terminal
local M = {}
M.persistent_term = nil
local create_command = function(name, command)
if not name or type(name) ~= "string" then return end
vim.api.nvim_create_user_command(name, function()
local cmd = type(command) == "function" and command() or command
M.send_cmd_to_term(cmd)
end, {})
end
M.setup = function()
-- Setup keybinds
require("keybinds").toggleterm_nvim()
create_command("RunScript", "sleep 2 && ls /")
create_command("ScanScript", function()
local file_path = vim.fn.expand("%:p")
LOG(file_path)
return "ls"
end)
end
M.send_cmd_to_term = function(cmd)
local term = require("toggleterm.terminal").Terminal
local default = term:new({ id = 1 })
if not default:is_open() then default:open() end
default:send(cmd)
end
return M

23
.config/nvim/lua/ui.lua

@ -183,4 +183,27 @@ return {
opts = {}, opts = {},
}, -- :ColorizerToggle }, -- :ColorizerToggle
-- Popup terminal
{
"akinsho/toggleterm.nvim",
config = function()
vim.cmd [[let &shellcmdflag = '-s']] -- required for Windows
require("toggleterm").setup({
auto_scroll = true,
direction = "float",
float_opts = {
border = "curved",
row = function() return vim.o.lines - 4 end,
width = function() return vim.o.columns - 6 end,
height = 20,
winblend = 0,
},
hide_numbers = true,
open_mapping = nil,
persist_mode = true,
size = 20,
start_in_insert = true,
})
end,
}
} }

7
.config/nwg-look/config

@ -0,0 +1,7 @@
{
"export-settings-ini": true,
"export-gtkrc-20": true,
"export-index-theme": true,
"export-xsettingsd": true,
"export-gtk4-symlinks": true
}

2
.config/qt5ct/qt5ct.conf

@ -3,7 +3,7 @@ color_scheme_path=/usr/share/qt5ct/colors/darker.conf
custom_palette=false custom_palette=false
icon_theme=Arc icon_theme=Arc
standard_dialogs=default standard_dialogs=default
style=qt5gtk2 style=kvantum
[Fonts] [Fonts]
fixed=@Variant(\0\0\0@\0\0\0\x16\0\x44\0\x65\0j\0\x61\0V\0u\0 \0S\0\x61\0n\0s@$\0\0\0\0\0\0\xff\xff\xff\xff\x5\x1\0\x32\x10) fixed=@Variant(\0\0\0@\0\0\0\x16\0\x44\0\x65\0j\0\x61\0V\0u\0 \0S\0\x61\0n\0s@$\0\0\0\0\0\0\xff\xff\xff\xff\x5\x1\0\x32\x10)

6
.config/qt6ct/qt6ct.conf

@ -3,11 +3,11 @@ color_scheme_path=/usr/share/qt6ct/colors/darker.conf
custom_palette=false custom_palette=false
icon_theme=Arc icon_theme=Arc
standard_dialogs=default standard_dialogs=default
style=qt6gtk2 style=kvantum
[Fonts] [Fonts]
fixed=@Variant(\0\0\0@\0\0\0\x16\0\x44\0\x65\0j\0\x61\0V\0u\0 \0S\0\x61\0n\0s@$\0\0\0\0\0\0\xff\xff\xff\xff\x5\x1\0\x32\x10) fixed="DejaVu Sans,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
general=@Variant(\0\0\0@\0\0\0\x16\0\x44\0\x65\0j\0\x61\0V\0u\0 \0S\0\x61\0n\0s@$\0\0\0\0\0\0\xff\xff\xff\xff\x5\x1\0\x32\x10) general="DejaVu Sans,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
[Interface] [Interface]
activate_item_on_single_click=1 activate_item_on_single_click=1

146
.config/waybar/config.jsonc

@ -0,0 +1,146 @@
// -*- mode: jsonc -*-
{
// "layer": "top", // Waybar at top layer
"position": "top",
"height": 22, // Waybar height (to be removed for auto height)
"spacing": 0, // Gaps between modules (4px)
// Choose the order of the modules
"modules-left": [
"hyprland/workspaces",
],
"modules-center": [
"hyprland/window"
],
"modules-right": [
"custom/btc",
"pulseaudio",
"backlight",
"network",
"battery",
"custom/battery-low",
"clock",
"tray",
"custom/power"
],
// Modules configuration
"hyprland/workspaces": {
"disable-scroll": false,
"on-scroll-up": "hyprctl dispatch workspace -1",
"on-scroll-down": "hyprctl dispatch workspace +1",
"all-outputs": false,
"warp-on-scroll": false,
"format": "{icon}",
"format-icons": {
"1": "一",
"2": "二",
"3": "三",
"4": "四",
"5": "五",
"6": "六",
"7": "七",
"8": "八",
"9": "九",
"10": "十",
"urgent": "",
"focused": "",
"default": ""
}
},
"custom/btc": {
"escape": false,
"exec": "$HOME/.local/bin/panel/btc.sh",
"interval": 300,
"format": " {}",
"tooltip": false
},
"pulseaudio": {
"scroll-step": 2, // %, can be a float
"format": "{icon} {volume}%",
"format-bluetooth": "{icon} {volume}%",
"format-bluetooth-muted": " {icon}",
"format-muted": " {volume}%",
"format-source": "{volume}%",
"format-source-muted": "",
"format-icons": {
"headphone": "",
"hands-free": "",
"headset": "",
"phone": "",
"portable": "",
"car": "",
"default": ["", "", ""]
},
"on-click": "pavucontrol"
},
"backlight": {
"device": "intel_backlight",
"format": "{percent}% {icon}",
"format-icons": ["", "", "", "", "", "", "", "", ""]
},
"network": {
"format-wifi": " {signalStrength}%",
"format-ethernet": "",
"tooltip-format": "{ifname}: {ipaddr}/{cidr}\n via {gwaddr}",
"tooltip-format-wifi": "{ifname}: {ipaddr}/{cidr}\n via {gwaddr}\n ssid {essid}",
"tooltip-format-disconnected": "Disconnected",
"format-linked": " (No IP)",
"format-disconnected": "<span color='#676e7d'></span>",
"on-click": "$HOME/.local/bin/panel/iface.sh"
},
"battery": {
"bat": "BAT0",
"interval": 30,
"full-at": 98,
"states": {
"good": 95,
"critical": 20
},
"format": "{icon} {capacity}% ({time})",
"format-time": "{H}:{m}",
"format-full": "{icon} {capacity}%",
"format-charging": " {capacity}%",
"format-plugged": " {capacity}%",
"format-icons": ["", "", "", "", ""]
},
"custom/battery-low": {
"exec": "$HOME/.local/bin/panel/battery.sh",
"interval": 30,
"format": "",
"tooltip": false
},
"clock": {
// "timezone": "America/New_York",
"tooltip-format": "<tt><small>{calendar}</small></tt>",
"calendar": {
"mode" : "month",
"mode-mon-col" : 3,
"weeks-pos" : "right",
"format": {
"months": "<span color='#b294bb'><b>{}</b></span>",
"days": "<span color='#fff'><b>{}</b></span>",
"weeks": "<span color='#81a2be'><b>W{}</b></span>",
"weekdays": "<span color='#8abeb7'><b>{}</b></span>",
"today": "<span color='#f0c674'><b><u>{}</u></b></span>"
}
},
"format": " {:%I:%M %p}",
"on-click": "$HOME/.local/bin/panel/date.sh"
},
"tray": {
// "icon-size": 21,
"spacing": 10
},
"custom/power": {
"format": "⏻",
"tooltip": false,
"menu": "on-click",
"menu-file": "$HOME/.config/waybar/power_menu.xml", // Menu file in resources folder
"menu-actions": {
"lock": "hyprlock",
"shutdown": "shutdown",
"reboot": "reboot",
"suspend": "systemctl suspend",
"hibernate": "systemctl hibernate"
}
}
}

33
.config/waybar/power_menu.xml

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<object class="GtkMenu" id="menu">
<child>
<object class="GtkMenuItem" id="lock">
<property name="label">Lock</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="suspend">
<property name="label">Suspend</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="hibernate">
<property name="label">Hibernate</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="shutdown">
<property name="label">Shutdown</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="delimiter1"/>
</child>
<child>
<object class="GtkMenuItem" id="reboot">
<property name="label">Reboot</property>
</object>
</child>
</object>
</interface>

236
.config/waybar/style.css

@ -0,0 +1,236 @@
@define-color black #000;
@define-color red #a54242; /* 1 */
@define-color orange #de935f; /* 3 */
@define-color blue #5f819d; /* 4 */
@define-color green #b5bd68; /* 10 */
@define-color bgcolor #404552;
@define-color bgcolor-inactive #2b2e39;
@define-color bgcolor-urgent #dc7a43;
@define-color fgcolor #fff;
@define-color fgcolor-inactive #676e7d;
* {
/* `otf-font-awesome` is required to be installed for icons */
font-family: FontAwesome, DejaVu Sans Serif;
font-size: 12px;
}
window#waybar {
background-color: @bgcolor-inactive;
color: @fgcolor;
transition-property: background-color;
transition-duration: .5s;
}
window#waybar.hidden {
opacity: 0.2;
}
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 @fgcolor;
}
#custom-btc,
#pulseaudio,
#wireplumber,
#custom-media,
#backlight,
#network,
#battery,
#clock,
#tray,
#custom-power {
padding: 0 6px;
color: @fgcolor;
}
#window,
#workspaces {
margin: 0 4px;
}
@keyframes blink {
to {
background-color: @fgcolor;
color: @black;
}
}
label:focus {
background-color: @black;
}
/* -------------------------------------- */
/* Workspaces module */
#workspaces button {
padding: 0 5px;
background-color: transparent;
color: @fgcolor-inactive;
box-shadow: none;
}
#workspaces button:hover,
#workspaces button.empty:hover {
background-color: @bgcolor;
color: @fgcolor-inactive;
}
#workspaces button.active,
#workspaces button.active.empty {
background-color: @bgcolor;
box-shadow: inset 0 -3px @blue;
color: @fgcolor;
}
#workspaces button.empty {
background-color: transparent;
color: @bgcolor;
}
#workspaces button.focused {
background-color: @bgcolor;
}
#workspaces button.urgent {
background-color: @bgcolor-urgent;
}
/* 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;
}
/* -------------------------------------- */
/* BTC module */
#custom-btc:hover {
background-color: @bgcolor;
}
/* -------------------------------------- */
/* Media modules */
#pulseaudio, #wireplumber {
color: @fgcolor;
}
#pulseaudio:hover, #wireplumber:hover {
background-color: @bgcolor;
}
#pulseaudio.muted, #wireplumber.muted {
color: @fgcolor-inactive
}
#custom-media {
color: @green;
min-width: 100px;
}
#custom-media.custom-spotify {
color: @green;
}
#custom-media.custom-vlc {
color: @orange;
}
/* -------------------------------------- */
/* Backlight module */
#backlight:hover {
background-color: @bgcolor;
}
/* -------------------------------------- */
/* Network module */
#network:hover {
background-color: @bgcolor;
}
#network.disconnected {
background-color: @bgcolor-inactive;
}
/* -------------------------------------- */
/* Battery module */
#battery:hover {
background-color: @bgcolor;
}
#battery.good {
color: @green;
}
/* Using steps() instead of linear as a timing function to limit cpu usage */
#battery.critical:not(.charging) {
background-color: @bgcolor-urgent;
animation-name: blink;
animation-duration: 2s;
animation-timing-function: steps(3);
animation-iteration-count: infinite;
animation-direction: alternate;
}
/* -------------------------------------- */
/* Clock module */
#clock:hover {
background-color: @bgcolor;
}
/* -------------------------------------- */
/* Tray module */
#tray:hover {
background-color: @bgcolor;
}
#tray > .passive {
-gtk-icon-effect: dim;
}
#tray > .needs-attention {
-gtk-icon-effect: highlight;
background-color: @bgcolor-urgent;
}
/* -------------------------------------- */
/* Power module */
#custom-power {
color: @red;
}
#custom-power:hover {
background-color: @bgcolor;
}
/* If power module is the leftmost module, set left margin */
.modules-left > widget:first-child > #custom-power {
margin-left: 6px;
}
/* If power module is the rightmost module, set right margin */
.modules-right > widget:last-child > #custom-power {
margin-right: 6px;
}

10
.config/xfce4/xfconf/xfce-perchannel-xml/thunar.xml

@ -1,20 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.1" encoding="UTF-8"?>
<channel name="thunar" version="1.0"> <channel name="thunar" version="1.0">
<property name="last-view" type="string" value="ThunarDetailsView"/> <property name="last-view" type="string" value="ThunarDetailsView"/>
<property name="last-icon-view-zoom-level" type="string" value="THUNAR_ZOOM_LEVEL_LARGEST"/> <property name="last-icon-view-zoom-level" type="string" value="THUNAR_ZOOM_LEVEL_LARGEST"/>
<property name="last-window-width" type="int" value="3000"/> <property name="last-window-width" type="int" value="3000"/>
<property name="last-window-height" type="int" value="1962"/> <property name="last-window-height" type="int" value="1962"/>
<property name="last-window-maximized" type="bool" value="false"/> <property name="last-window-maximized" type="bool" value="true"/>
<property name="last-separator-position" type="int" value="400"/> <property name="last-separator-position" type="int" value="209"/>
<property name="misc-single-click" type="bool" value="false"/> <property name="misc-single-click" type="bool" value="false"/>
<property name="misc-volume-management" type="bool" value="true"/> <property name="misc-volume-management" type="bool" value="true"/>
<property name="last-details-view-zoom-level" type="string" value="THUNAR_ZOOM_LEVEL_SMALLEST"/> <property name="last-details-view-zoom-level" type="string" value="THUNAR_ZOOM_LEVEL_SMALLEST"/>
<property name="last-details-view-column-widths" type="string" value="50,241,50,50,1757,50,50,160,440"/> <property name="last-details-view-column-widths" type="string" value="50,241,136,50,85,352,50,160,744,50,50,63,50,108"/>
<property name="last-show-hidden" type="bool" value="true"/> <property name="last-show-hidden" type="bool" value="true"/>
<property name="last-sort-column" type="string" value="THUNAR_COLUMN_NAME"/> <property name="last-sort-column" type="string" value="THUNAR_COLUMN_NAME"/>
<property name="last-sort-order" type="string" value="GTK_SORT_ASCENDING"/> <property name="last-sort-order" type="string" value="GTK_SORT_ASCENDING"/>
<property name="last-side-pane" type="string" value="ThunarShortcutsPane"/> <property name="last-side-pane" type="string" value="THUNAR_SIDEPANE_TYPE_SHORTCUTS"/>
<property name="last-location-bar" type="string" value="ThunarLocationEntry"/> <property name="last-location-bar" type="string" value="ThunarLocationEntry"/>
<property name="hidden-bookmarks" type="array"> <property name="hidden-bookmarks" type="array">
<value type="string" value="network:///"/> <value type="string" value="network:///"/>

9
.config/xsettingsd/xsettingsd.conf

@ -0,0 +1,9 @@
Net/ThemeName "Arc-Dark"
Net/IconThemeName "Arc"
Gtk/CursorThemeName "capitaine-cursors-light"
Net/EnableEventSounds 1
EnableInputFeedbackSounds 1
Xft/Antialias 1
Xft/Hinting 1
Xft/HintStyle "hintslight"
Xft/RGBA "rgb"

6
.config/zsh/.zlogin

@ -1,3 +1,7 @@
XORG_USER='rick' XORG_USER='rick'
[ "$USER" = "$XORG_USER" ] && [ "$(tty)" = "/dev/tty1" ] && exec xinit -- vt1 > /dev/null 2>&1 if [ "$WAYLAND" = true ]; then
[ "$USER" = "$XORG_USER" ] && [ "$(tty)" = "/dev/tty1" ] && exec hyprland > /dev/null 2>&1
else
[ "$USER" = "$XORG_USER" ] && [ "$(tty)" = "/dev/tty1" ] && exec xinit -- vt1 > /dev/null 2>&1
fi

18
.config/zsh/.zprofile

@ -24,6 +24,11 @@ export R_ENVIRON_USER="$XDG_CONFIG_HOME/R/Renviron"
# export HIDPI=true # export HIDPI=true
# <<< # <<<
# Wayland
# >>> system=wayland
# export WAYLAND=true
# <<<
#--- Program Specific ---# #--- Program Specific ---#
# Android # Android
@ -79,7 +84,12 @@ if [ "$HIDPI" = true ]; then
export QT_AUTO_SCREEN_SCALE_FACTOR=0 export QT_AUTO_SCREEN_SCALE_FACTOR=0
export QT_SCREEN_SCALE_FACTORS=2 export QT_SCREEN_SCALE_FACTORS=2
fi fi
export QT_QPA_PLATFORMTHEME="qt5gtk2" if [ "$WAYLAND" = true ]; then
export QT_QPA_PLATFORM="wayland"
fi
export QT_QPA_PLATFORMTHEME="qt5ct"
export QT_WAYLAND_DISABLE_WINDOWDECORATION="1"
export QT_STYLE_OVERRIDE="kvantum"
# Rust # Rust
export CARGO_HOME="$XDG_DATA_HOME/cargo" export CARGO_HOME="$XDG_DATA_HOME/cargo"
@ -104,7 +114,11 @@ export WGETRC="$XDG_CONFIG_HOME/wget/wgetrc"
export WINEPREFIX="$XDG_DATA_HOME/wine" export WINEPREFIX="$XDG_DATA_HOME/wine"
# WM # WM
export WM="bspwm" if [ "$WAYLAND" = true ]; then
export WM="hyprland"
else
export WM="bspwm"
fi
# Xorg # Xorg
export XINITRC="$XDG_CONFIG_HOME/xorg/xinitrc" export XINITRC="$XDG_CONFIG_HOME/xorg/xinitrc"

8
.config/zsh/.zshrc

@ -73,12 +73,20 @@ zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end zle -N history-beginning-search-forward-end history-search-end
bindkey '\eOc' forward-word # ctrl-right bindkey '\eOc' forward-word # ctrl-right
bindkey '\e[1;5C' forward-word # ctrl-right
bindkey '\eOd' backward-word # ctrl-left bindkey '\eOd' backward-word # ctrl-left
bindkey '\e[1;5D' backward-word # ctrl-left
bindkey '\e[3~' delete-char # del bindkey '\e[3~' delete-char # del
bindkey '\e[7~' beginning-of-line # home bindkey '\e[7~' beginning-of-line # home
bindkey '\e[H' beginning-of-line # home
bindkey '\eOH' beginning-of-line # home
bindkey '\e[8~' end-of-line # end bindkey '\e[8~' end-of-line # end
bindkey '\e[F' end-of-line # end
bindkey '\eOF' end-of-line # end
bindkey '\e[A' history-beginning-search-backward-end # up bindkey '\e[A' history-beginning-search-backward-end # up
bindkey '\eOA' history-beginning-search-backward-end # up
bindkey '\e[B' history-beginning-search-forward-end # down bindkey '\e[B' history-beginning-search-forward-end # down
bindkey '\eOB' history-beginning-search-forward-end # down
bindkey '\e[Z' reverse-menu-complete # shift-tab bindkey '\e[Z' reverse-menu-complete # shift-tab
bindkey '\eh' kill-whole-line # meta-h bindkey '\eh' kill-whole-line # meta-h
bindkey '\ej' history-beginning-search-forward-end # meta-j bindkey '\ej' history-beginning-search-forward-end # meta-j

5
.icons/default/index.theme

@ -0,0 +1,5 @@
# This file is written by nwg-look. Do not edit.
[Icon Theme]
Name=Default
Comment=Default Cursor Theme
Inherits=capitaine-cursors-light

7
.local/bin/panel/btc.sh

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
file="/tmp/polybar-btc-module" file="/tmp/panel-btc-module"
# Enable mathematics in POSIX shell # Enable mathematics in POSIX shell
calc() { awk "BEGIN { printf(\"%.2f\", $*) }"; } calc() { awk "BEGIN { printf(\"%.2f\", $*) }"; }
@ -27,7 +27,12 @@ output() {
fi fi
# Result # Result
# >>> session=xorg
echo "%{F$color}$symbol $difference%%{F$COLOR15}" echo "%{F$color}$symbol $difference%%{F$COLOR15}"
# <<<
# >>> session=wayland
# echo "<span color='$color'>$symbol $difference%</span>"
# <<<
} }
if [ ! -f "$file" ]; then if [ ! -f "$file" ]; then

7
.local/bin/panel/waybar.sh

@ -0,0 +1,7 @@
#!/bin/sh
# Kill existing panel
pkill --exact --signal 9 waybar
# Start panel
setsid -f waybar

10
.local/bin/play

@ -237,7 +237,12 @@ if [ $qualityOption -eq 1 ]; then
fi fi
# Set url to clipboard if none provided # Set url to clipboard if none provided
# >>> session=xorg
clip="$(xclip -selection clipboard -out)" clip="$(xclip -selection clipboard -out)"
# <<<
# >>> session=wayland
# clip="$(wl-paste)"
# <<<
if [ "$#" -eq 0 ]; then if [ "$#" -eq 0 ]; then
eval set -- "$clip" eval set -- "$clip"
fi fi
@ -257,7 +262,12 @@ elif [ $queueOption -eq 1 ]; then
queue "$*" queue "$*"
else else
if [ "$*" = "" ]; then if [ "$*" = "" ]; then
# >>> session=xorg
play "$(xclip -o)" play "$(xclip -o)"
# <<<
# >>> session=wayland
# play "$(wl-paste)"
# <<<
else else
for url in "$@"; do for url in "$@"; do
play "$url" play "$url"

15
.local/bin/printscreen

@ -1,12 +1,17 @@
#!/bin/sh #!/bin/sh
# Take a screenshot with the configured program # Take a screenshot with the configured program
# Depends: scrot / maim, xdotool / magick, xdotool # Depends: rofi and scrot / maim, xdotool / magick, xdotool / grim, slurp, jq
# User-config--------------------------- # User-config---------------------------
# scrot / maim / magick import # scrot / maim / magick import / grim
# >>> session=xorg
screenshotter="maim" screenshotter="maim"
# <<<
# >>> session=wayland
# screenshotter="grim"
# <<<
# -------------------------------------- # --------------------------------------
@ -25,6 +30,12 @@ elif [ "$screenshotter" = "magick import" ] || [ "$screenshotter" = "import" ];
selection="" selection=""
activeWindow="-window \$(xdotool getactivewindow)" activeWindow="-window \$(xdotool getactivewindow)"
filename="$CAPTURE/$(date '+%Y-%m-%d-%H%M%S')_import.png" filename="$CAPTURE/$(date '+%Y-%m-%d-%H%M%S')_import.png"
elif [ "$screenshotter" = "grim" ]; then
screenshotter="" # start of command needs to be overwritten
fullscreen="grim"
selection="slurp | grim -g -"
activeWindow="hyprctl -j activewindow | jq -r '\"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])\"' | grim -g -"
filename="$CAPTURE/$(date '+%Y-%m-%d-%H%M%S')_grim.png"
else else
echo "Printscreen configuration is invalid" echo "Printscreen configuration is invalid"
exit 1 exit 1

2
.local/bin/system

@ -6,6 +6,8 @@ if [ "$WM" = "bspwm" ]; then
logout="bspc quit" logout="bspc quit"
elif [ "$WM" = "i3" ]; then elif [ "$WM" = "i3" ]; then
logout="i3-msg exit" logout="i3-msg exit"
elif [ "$WM" = "hyprland" ]; then
logout="hyprctl dispatch exit"
fi fi
commands="\ commands="\

5
.local/bin/wm/lock.sh

@ -2,6 +2,11 @@
LOCK="$XDG_CACHE_HOME/lock.png" LOCK="$XDG_CACHE_HOME/lock.png"
if [ "$WM" = "hyprland" ]; then
hyprlock
exit 0
fi
# Cache the lock image # Cache the lock image
if [ ! -f "$LOCK" ]; then if [ ! -f "$LOCK" ]; then
touch "$LOCK" touch "$LOCK"

23
.local/bin/wm/wallpaper.sh

@ -1,7 +1,26 @@
#!/bin/sh #!/bin/sh
WALLPAPER="$HOME/pictures/wallpaper.jpg"
# Overwrite wallpaper with new image if provided # Overwrite wallpaper with new image if provided
[ -n "$1" ] && cp "$1" "$HOME/pictures/wallpaper.jpg" [ -n "$1" ] && cp "$1" "$WALLPAPER"
# Set wallpaper # Set wallpaper
feh --no-fehbg --bg-fill "$HOME/pictures/wallpaper.jpg" if [ "$WAYLAND" = true ]; then
pkill hyprpaper
setsid -f hyprpaper
# Wait until hyprpaper is available
while true; do
output=$(hyprctl hyprpaper)
if ! echo "$output" | grep -q ".sock"; then
break
fi
sleep 0.1
done
hyprctl hyprpaper preload "$WALLPAPER"
hyprctl hyprpaper wallpaper ",$WALLPAPER"
else
feh --no-fehbg --bg-fill "$WALLPAPER"
fi

66
.mozilla/firefox/README.org

@ -26,39 +26,39 @@ Manual interventions needed to setup Firefox.
Tree Style Tab style rules. Tree Style Tab style rules.
#+BEGIN_SRC css #+BEGIN_SRC css
#tabbar { #tabbar {
background: #2b2e39; background: #2b2e39;
} }
.tab { .tab {
height: 23px; height: 25px;
margin-bottom: 1px; margin-bottom: 1px;
background: #404552; background: #404552;
border: 0px; border: 0px;
color: #c5c8c6; color: #c5c8c6;
} }
.tab .label { .tab .label {
line-height: 1.15; line-height: 1.75;
margin-bottom: 1px; margin-bottom: 1px;
margin-left: 0.25em; margin-left: 0.25em;
} }
.tab .closebox { .tab .closebox {
display: none; display: none;
} }
.tab.active { .tab.active {
background: #2b2e39 !important; background: #2b2e39 !important;
} }
.tab:hover { .tab:hover {
background: #2b2e39; background: #2b2e39;
} }
.newtab-button-box { .newtab-button-box {
display: none; display: none;
} }
#+END_SRC #+END_SRC
* Ublock Origin Filters * Ublock Origin Filters

2
.mozilla/firefox/dotfiles.profile/chrome/userChrome.css

@ -1,7 +1,7 @@
@-moz-document url(chrome://browser/content/browser.xhtml) { @-moz-document url(chrome://browser/content/browser.xhtml) {
/* Hide Firefox top tab bar */ /* Hide Firefox top tab bar */
#TabsToolbar { #TabsToolbar {
visibility: hidden !important; display: none !important;
} }
/* Remove titlebar */ /* Remove titlebar */

2
README.org

@ -1,7 +1,7 @@
#+TITLE: Dotfiles #+TITLE: Dotfiles
#+OPTIONS: toc:nil #+OPTIONS: toc:nil
This is a collection of dotfiles and scripts for my i3/bspwm setup, previewed below: This is a collection of dotfiles and scripts for my i3/bspwm/hyprland setup, previewed below:
[[screenshot.png]] [[screenshot.png]]

3
etc/resolv.conf

@ -0,0 +1,3 @@
# Resolver configuration file.
# See resolv.conf(5) for details.
nameserver 192.168.0.1

76
packages → packages/base

@ -1,18 +1,14 @@
acpi acpi
adobe-source-han-sans-jp-fonts adobe-source-han-sans-jp-fonts
alsa-utils
android-studio
android-tools
arandr
arc-gtk-theme arc-gtk-theme
archlinux-keyring
arc-icon-theme arc-icon-theme
aria2 aria2
aspell-en aspell-en
aspell-nl aspell-nl
autorandr
base base
base-devel
brightnessctl brightnessctl
bspwm
capitaine-cursors capitaine-cursors
checkbashisms checkbashisms
chromium chromium
@ -21,32 +17,23 @@ cmake
dhcpcd dhcpcd
dialog dialog
dnsmasq dnsmasq
domoticz-git
dos2unix dos2unix
downgrade downgrade
doxygen
duf duf
dunst dunst
ebtables
edk2-ovmf
efibootmgr efibootmgr
emacs-nativecomp
evtest evtest
exfat-utils exfat-utils
feh feh
ffmpegthumbnailer ffmpegthumbnailer
firefox firefox
frei0r-plugins
fritzing
gdb gdb
gedit gedit
ghc
git git
gnome-calculator gnome-calculator
gnome-keyring gnome-keyring
gnome-themes-extra gnome-themes-extra
gparted gparted
graphviz
gst-plugins-good gst-plugins-good
gucharmap gucharmap
gvfs gvfs
@ -57,32 +44,19 @@ htop
hunspell hunspell
hunspell-en_us hunspell-en_us
hunspell-nl hunspell-nl
i3lock-color-git
imagemagick imagemagick
inetutils inetutils
inkscape inkscape
intel-media-driver
intel-media-sdk
intel-ucode
isync isync
iw iw
jdk11-openjdk
jdownloader2
jq jq
kcachegrind kcachegrind
kdenlive kdenlive
keepmenu-git keepmenu-git
kolourpaint kolourpaint
kotlin-language-server-git
krita krita
lib32-alsa-lib
lib32-alsa-plugins
lib32-glibc lib32-glibc
lib32-libpulse
lib32-openal lib32-openal
lib32-vulkan-intel
libmtp
libnotify-id
libvirt libvirt
linux linux
linux-firmware linux-firmware
@ -90,17 +64,11 @@ linux-headers
linux-lts linux-lts
linux-lts-headers linux-lts-headers
llvm llvm
lua-language-server-git
lvm2
lxappearance
maim
manafiles-git manafiles-git
man-db man-db
man-pages man-pages
mariadb mariadb
mdadm
mesa-demos mesa-demos
minted
mkvtoolnix-cli mkvtoolnix-cli
moka-icon-theme-git moka-icon-theme-git
mpv mpv
@ -109,10 +77,9 @@ mysql-workbench
namcap namcap
ncdu ncdu
neofetch neofetch
nerd-fonts-dejavu-complete neovim
netctl netctl
nlohmann-json nlohmann-json
nodejs-intelephense
ntfs-3g ntfs-3g
openssh openssh
otf-font-awesome otf-font-awesome
@ -121,12 +88,7 @@ pacman-contrib
pamixer pamixer
pavucontrol pavucontrol
pdfjs pdfjs
platformio
polkit-kde-agent
polybar
poppler-glib poppler-glib
pulseaudio
pulseaudio-alsa
python-adblock python-adblock
python-beautifulsoup4 python-beautifulsoup4
python-certifi python-certifi
@ -134,46 +96,33 @@ python-filelock
python-flask python-flask
python-google-api-python-client python-google-api-python-client
python-google-auth-oauthlib python-google-auth-oauthlib
python-image
python-matplotlib python-matplotlib
python-opengl python-opengl
python-pycurl python-pycurl
python-pyqt5 python-pyqt5
python-pyusb python-pyusb
python-tqdm
python-watchdog python-watchdog
python-zstandard python-zstandard
qbittorrent qbittorrent
qemu qt5ct
qemu-arch-extra
qt5-serialport qt5-serialport
qt5-tools qt5-tools
qt5ct
qt5gtk2
qt6ct qt6ct
qt6gtk2
r r
redshift
reflector reflector
renderdoc-bin renderdoc-bin
rofi
rsync rsync
rtmpdump rtmpdump
rxvt-unicode
signal-desktop signal-desktop
smartmontools smartmontools
socat socat
sqlitebrowser sqlitebrowser
sshfs sshfs
stalonetray
streamlink streamlink
sxhkd
syncthing syncthing
synergy2-bin
sysfsutils sysfsutils
texlab texlab
texlive-bibtexextra texlive-bibtexextra
texlive-core
texlive-fontsextra texlive-fontsextra
texlive-formatsextra texlive-formatsextra
texlive-games texlive-games
@ -193,8 +142,8 @@ tokei
tree tree
trizen trizen
ttf-dejavu ttf-dejavu
ttf-dejavu-nerd
ttf-joypixels ttf-joypixels
ttf-ms-win10
tumbler tumbler
tumbler-extra-thumbnailers tumbler-extra-thumbnailers
unrar unrar
@ -202,27 +151,14 @@ unzip
usbutils usbutils
valgrind valgrind
ventoy-bin ventoy-bin
vim-spell-en
vim-spell-nl vim-spell-nl
virt-manager
vulkan-intel
wget wget
wine-staging wine-staging
wpa_supplicant wpa_supplicant
x264
x86_energy_perf_policy x86_energy_perf_policy
xarchiver
xclip
xdo
xdotool
xf86-input-wacom xf86-input-wacom
xfsprogs xfsprogs
xorg-server
xorg-xev
xorg-xinit
xorg-xinput
xorg-xprop
xorg-xrandr
xorg-xsetroot
yt-dlp yt-dlp
yt-dlp-drop-in yt-dlp-drop-in
zathura zathura

51
packages/packages

@ -0,0 +1,51 @@
arandr
autorandr
bspwm
doxygen
ebtables
emacs-nativecomp
frei0r-plugins
fritzing
ghc
graphviz
i3lock-color-git
intel-media-driver
intel-media-sdk
intel-ucode
lib32-vulkan-intel
libmtp
libnotify-id
lxappearance
maim
mdadm
minted
platformio
polkit-kde-agent
polybar
python-image
python-tqdm
qemu
qemu-arch-extra
qt5gtk2
qt6gtk2
redshift
rofi
rxvt-unicode
stalonetray
sxhkd
synergy2-bin
texlive-core
ttf-ms-win10
vulkan-intel
x264
xarchiver
xclip
xdo
xdotool
xorg-server
xorg-xev
xorg-xinit
xorg-xinput
xorg-xprop
xorg-xrandr
xorg-xsetroot

32
packages/packages-wayland

@ -0,0 +1,32 @@
amd-ucode
ark
dxvk-bin
emacs-wayland
gamescope
gammastep
ghostty
grim
hypridle
hyprland
hyprlock
hyprpaper
hyprpolkitagent
kvantum
kvantum-qt5
lib32-mesa
lib32-vkd3d-proton-git
lib32-vulkan-radeon
nwg-look
pipewire-alsa
pipewire-pulse
rofi-wayland
rtkit
slurp
steam
sunshine-bin
vkd3d-proton-bin
vulkan-radeon
waybar
wl-clipboard
xdg-desktop-portal-hyprland
ydotool
Loading…
Cancel
Save