readme at the root, and fix what would break on a fresh machine

The repo landing page showed .config, .themes and .gtkrc-2.0 and nothing else,
so there was no sign the bootstrap existed. It has always been at
.config/rice/install.sh - that is just where it lands on disk. Root README now
carries the curl one-liner, a map of what is tracked, and a note that this is a
bare repo over $HOME so nobody goes looking for a wrapper folder again.

Things that would not have survived a replication:

  - polybar's click and scroll handlers called $HOME/bin/system-info.sh and
    $HOME/bin/volume.sh. That directory does not exist; the scripts are in
    .config/scripts. The exec lines already pointed there, so only the
    interactive bits were dead.
  - bspwmrc hardcoded DisplayPort-0, so no desktops on any other machine.
    Takes the xrandr primary now, falling back to the first monitor bspc sees.
  - install.sh picked conflicting files out of git's checkout error with a
    regex that required a dot inside the name, so .bashrc and .xinitrc were
    never matched and never backed up - and .bashrc always exists on a fresh
    Arch install, which is precisely when the checkout aborts.
  - bspwmrc sourced ~/.env and merged ~/.Xresources unconditionally; neither
    exists. Guarded.

packages.txt was missing programs whose configs this repo already carries:
fish, neovim, yazi, kitty, plus xrdb/xsetroot/xsettingsd/wmname that bspwmrc
launches, gtk3 for the control panel, and wireplumber for the wpctl calls.

Newly tracked: .xinitrc (the thing that actually starts bspwm), .bashrc (which
holds the dotfiles alias), greenclip, flameshot, kitty, Thunar, mimeapps and
user-dirs. Dropped six editor backups that had been committed by accident.
Skipped QtProject.conf - it is file-dialog history, not configuration.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011beBgzmH72WFn8wiWqRZPf
This commit is contained in:
Sarthak 2026-09-04 10:09:16 +05:30
parent 10fca7d9e4
commit 0780a3abf5
22 changed files with 358 additions and 262 deletions

15
.bashrc Normal file
View file

@ -0,0 +1,15 @@
alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
export PATH="$HOME/.local/bin:$PATH"
# opencode
export PATH=/home/sarthak/.opencode/bin:$PATH
# >>> NightFrame Android build toolchain (added by Claude) >>>
export JAVA_HOME="$HOME/android-dev/jdk17"
export ANDROID_HOME="$HOME/Android/Sdk"
export ANDROID_SDK_ROOT="$ANDROID_HOME"
export PATH="$JAVA_HOME/bin:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH"
# <<< NightFrame Android build toolchain <<<
export PATH=$PATH:$HOME/.maestro/bin
alias k="kubectl"

125
.config/Thunar/accels.scm Normal file
View file

@ -0,0 +1,125 @@
; thunar GtkAccelMap rc-file -*- scheme -*-
; this file is an automated accelerator map dump
;
; (gtk_accel_path "<Actions>/ThunarStandardView/sort-by-type" "")
; (gtk_accel_path "<Actions>/ThunarStatusBar/toggle-last-modified" "")
; (gtk_accel_path "<Actions>/Thunarwindow/menu" "")
; (gtk_accel_path "<Actions>/ThunarActionManager/cut" "<Primary>x")
; (gtk_accel_path "<Actions>/ThunarStandardView/sort-by-size" "")
; (gtk_accel_path "<Actions>/ThunarWindow/file-menu" "")
; (gtk_accel_path "<Actions>/ThunarWindow/close-tab" "<Primary>w")
; (gtk_accel_path "<Actions>/ThunarWindow/switch-previous-tab-alt" "<Primary><Shift>ISO_Left_Tab")
; (gtk_accel_path "<Actions>/ThunarStatusBar/toggle-size" "")
; (gtk_accel_path "<Actions>/ThunarWindow/new-window" "<Primary>n")
; (gtk_accel_path "<Actions>/ThunarWindow/clear-directory-specific-settings" "")
; (gtk_accel_path "<Actions>/ThunarWindow/close-window" "<Primary>q")
; (gtk_accel_path "<Actions>/ThunarWindow/open-parent" "<Alt>Up")
; (gtk_accel_path "<Actions>/ThunarWindow/view-side-pane-menu" "")
; (gtk_accel_path "<Actions>/ThunarStatusBar/toggle-size-in-bytes" "")
; (gtk_accel_path "<Actions>/ThunarWindow/switch-previous-tab" "<Primary>Page_Up")
; (gtk_accel_path "<Actions>/ThunarActionManager/open" "<Primary>o")
; (gtk_accel_path "<Actions>/ThunarStandardView/sort-ascending" "")
; (gtk_accel_path "<Actions>/ThunarWindow/toggle-split-view" "F3")
; (gtk_accel_path "<Actions>/ThunarActionManager/copy-2" "<Primary>Insert")
; (gtk_accel_path "<Actions>/ThunarActionManager/trash-delete" "Delete")
; (gtk_accel_path "<Actions>/ThunarWindow/open-recent" "")
; (gtk_accel_path "<Actions>/ThunarWindow/view-configure-toolbar" "")
; (gtk_accel_path "<Actions>/ThunarStandardView/forward" "<Alt>Right")
; (gtk_accel_path "<Actions>/ThunarActionManager/restore" "")
; (gtk_accel_path "<Actions>/ThunarWindow/open-location-alt" "<Alt>d")
; (gtk_accel_path "<Actions>/ThunarWindow/zoom-out-alt" "<Primary>KP_Subtract")
; (gtk_accel_path "<Actions>/ThunarStandardView/select-by-pattern" "<Primary>s")
; (gtk_accel_path "<Actions>/ThunarWindow/open-file-menu" "F10")
; (gtk_accel_path "<Actions>/ThunarWindow/contents" "F1")
; (gtk_accel_path "<Actions>/ThunarWindow/show-highlight" "")
; (gtk_accel_path "<Actions>/ThunarStandardView/sort-descending" "")
; (gtk_accel_path "<Actions>/ThunarStandardView/sort-by-name" "")
; (gtk_accel_path "<Actions>/ThunarStandardView/select-all-files" "<Primary>a")
; (gtk_accel_path "<Actions>/ThunarActionManager/execute" "")
; (gtk_accel_path "<Actions>/ThunarStandardView/properties" "<Alt>Return")
; (gtk_accel_path "<Actions>/ThunarActionManager/cut-2" "")
; (gtk_accel_path "<Actions>/ThunarStandardView/sort-by-dtime" "")
; (gtk_accel_path "<Actions>/ThunarWindow/switch-next-tab" "<Primary>Page_Down")
; (gtk_accel_path "<Actions>/ThunarWindow/open-templates" "")
; (gtk_accel_path "<Actions>/ThunarActionManager/paste-2" "<Shift>Insert")
; (gtk_accel_path "<Actions>/ThunarStatusBar/toggle-filetype" "")
; (gtk_accel_path "<Actions>/ThunarWindow/close-all-windows" "<Primary><Shift>w")
; (gtk_accel_path "<Actions>/ThunarStandardView/create-document" "")
; (gtk_accel_path "<Actions>/ThunarWindow/detach-tab" "")
; (gtk_accel_path "<Actions>/ThunarWindow/cancel-search" "Escape")
; (gtk_accel_path "<Actions>/ThunarWindow/zoom-in-alt2" "<Primary>equal")
; (gtk_accel_path "<Actions>/ThunarStatusBar/toggle-hidden-count" "")
; (gtk_accel_path "<Actions>/ThunarShortcutsPane/sendto-shortcuts" "<Primary>d")
; (gtk_accel_path "<Actions>/ThunarActionManager/undo" "<Primary>z")
; (gtk_accel_path "<Actions>/ThunarStandardView/toggle-sort-order" "")
; (gtk_accel_path "<Actions>/ThunarWindow/view-location-selector-entry" "")
; (gtk_accel_path "<Actions>/ThunarActionManager/paste" "<Primary>v")
; (gtk_accel_path "<Actions>/ThunarWindow/zoom-in-alt1" "<Primary>KP_Add")
; (gtk_accel_path "<Actions>/ThunarWindow/view-menubar" "<Primary>m")
; (gtk_accel_path "<Actions>/ThunarStandardView/back" "<Alt>Left")
; (gtk_accel_path "<Actions>/ThunarWindow/open-desktop" "")
; (gtk_accel_path "<Actions>/ThunarWindow/view-as-detailed-list" "<Primary>2")
; (gtk_accel_path "<Actions>/ThunarActionManager/restore-show" "")
; (gtk_accel_path "<Actions>/ThunarWindow/sendto-menu" "")
; (gtk_accel_path "<Actions>/ThunarStatusBar/toggle-display-name" "")
; (gtk_accel_path "<Actions>/ThunarWindow/go-menu" "")
; (gtk_accel_path "<Actions>/ThunarWindow/zoom-out" "<Primary>minus")
; (gtk_accel_path "<Actions>/ThunarWindow/remove-from-recent" "")
; (gtk_accel_path "<Actions>/ThunarActionManager/open-with-other" "")
; (gtk_accel_path "<Actions>/ThunarStandardView/invert-selection" "<Primary><Shift>i")
; (gtk_accel_path "<Actions>/ThunarWindow/view-side-pane-shortcuts" "<Primary>b")
; (gtk_accel_path "<Actions>/ThunarWindow/reload-alt-2" "Reload")
; (gtk_accel_path "<Actions>/ThunarWindow/view-location-selector-menu" "")
; (gtk_accel_path "<Actions>/ThunarWindow/reload" "<Primary>r")
; (gtk_accel_path "<Actions>/ThunarWindow/edit-menu" "")
; (gtk_accel_path "<Actions>/ThunarActionManager/copy" "<Primary>c")
; (gtk_accel_path "<Actions>/ThunarWindow/bookmarks-menu" "")
; (gtk_accel_path "<Actions>/ThunarStandardView/forward-alt" "Forward")
; (gtk_accel_path "<Actions>/ThunarActionManager/move-to-trash" "")
; (gtk_accel_path "<Actions>/ThunarWindow/reload-alt-1" "F5")
; (gtk_accel_path "<Actions>/ThunarActionManager/delete-3" "<Shift>KP_Delete")
; (gtk_accel_path "<Actions>/ThunarStandardView/unselect-all-files" "Escape")
; (gtk_accel_path "<Actions>/ThunarWindow/contents/help-menu" "")
; (gtk_accel_path "<Actions>/ThunarStandardView/arrange-items-menu" "")
; (gtk_accel_path "<Actions>/ThunarStandardView/sort-by-mtime" "")
; (gtk_accel_path "<Actions>/ThunarWindow/open-computer" "")
; (gtk_accel_path "<Actions>/ThunarWindow/toggle-image-preview" "")
; (gtk_accel_path "<Actions>/ThunarWindow/toggle-side-pane" "F9")
; (gtk_accel_path "<Actions>/ThunarWindow/view-as-icons" "<Primary>1")
; (gtk_accel_path "<Actions>/ThunarActionManager/delete-2" "<Shift>Delete")
; (gtk_accel_path "<Actions>/ThunarWindow/zoom-in" "<Primary>plus")
; (gtk_accel_path "<Actions>/ThunarStandardView/rename" "F2")
; (gtk_accel_path "<Actions>/ThunarWindow/open-location" "<Primary>l")
; (gtk_accel_path "<Actions>/ThunarWindow/view-as-compact-list" "<Primary>3")
; (gtk_accel_path "<Actions>/ThunarWindow/view-menu" "")
; (gtk_accel_path "<Actions>/ThunarWindow/search" "<Primary>f")
; (gtk_accel_path "<Actions>/ThunarWindow/new-tab" "<Primary>t")
; (gtk_accel_path "<Actions>/ThunarWindow/zoom-reset" "<Primary>0")
; (gtk_accel_path "<Actions>/ThunarStandardView/back-alt2" "Back")
; (gtk_accel_path "<Actions>/ThunarActionManager/open-in-new-tab" "<Primary><Shift>p")
; (gtk_accel_path "<Actions>/ThunarWindow/view-location-selector-buttons" "")
; (gtk_accel_path "<Actions>/ThunarActionManager/redo" "<Primary><Shift>z")
; (gtk_accel_path "<Actions>/ThunarWindow/open-trash" "")
; (gtk_accel_path "<Actions>/ThunarActionManager/open-in-new-window" "<Primary><Shift>o")
; (gtk_accel_path "<Actions>/ThunarWindow/view-statusbar" "")
; (gtk_accel_path "<Actions>/ThunarActionManager/open-location" "")
; (gtk_accel_path "<Actions>/ThunarStandardView/duplicate" "")
; (gtk_accel_path "<Actions>/ThunarActionManager/trash-delete-2" "KP_Delete")
; (gtk_accel_path "<Actions>/ThunarStandardView/back-alt1" "BackSpace")
; (gtk_accel_path "<Actions>/ThunarStandardView/create-folder" "<Primary><Shift>n")
; (gtk_accel_path "<Actions>/ThunarWindow/open-home" "<Alt>Home")
; (gtk_accel_path "<Actions>/ThunarWindow/switch-focused-split-view-pane" "")
; (gtk_accel_path "<Actions>/ThunarWindow/show-hidden" "<Primary>h")
; (gtk_accel_path "<Actions>/ThunarStandardView/set-default-app" "")
; (gtk_accel_path "<Actions>/ThunarWindow/empty-trash" "")
; (gtk_accel_path "<Actions>/ThunarWindow/preferences" "")
; (gtk_accel_path "<Actions>/ThunarActionManager/delete" "")
; (gtk_accel_path "<Actions>/ThunarWindow/open-network" "")
; (gtk_accel_path "<Actions>/ThunarWindow/view-side-pane-tree" "<Primary>e")
; (gtk_accel_path "<Actions>/ThunarWindow/open-file-system" "")
; (gtk_accel_path "<Actions>/ThunarWindow/search-alt" "Search")
; (gtk_accel_path "<Actions>/ThunarWindow/switch-next-tab-alt" "<Primary>Tab")
; (gtk_accel_path "<Actions>/ThunarActionManager/sendto-desktop" "")
; (gtk_accel_path "<Actions>/ThunarStandardView/make-link" "")
; (gtk_accel_path "<Actions>/ThunarWindow/zoom-reset-alt" "<Primary>KP_0")
; (gtk_accel_path "<Actions>/ThunarWindow/about" "")

15
.config/Thunar/uca.xml Normal file
View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<actions>
<action>
<icon>utilities-terminal</icon>
<name>Open Terminal Here</name>
<submenu></submenu>
<unique-id>1777121406915879-1</unique-id>
<command>exo-open --working-directory %f --launch TerminalEmulator</command>
<description>Example for a custom action</description>
<range></range>
<patterns>*</patterns>
<startup-notify/>
<directories/>
</action>
</actions>

View file

@ -20,10 +20,13 @@ wmname LG3D
# Vars
export XDG_CURRENT_DESKTOP="bspwm"
sh -c 'function shenv() { export "$1=$2"; }; source ~/.env;'
[ -f "$HOME/.env" ] && . "$HOME/.env"
# Workspaces Configuration
bspc monitor DisplayPort-0 -d 1 2 3 4 5 6 7 8
# Whatever the primary output is called on this machine.
MONITOR="$(xrandr --query | awk '/ connected primary/{print $1; exit}')"
[ -z "$MONITOR" ] && MONITOR="$(bspc query -M --names | head -n1)"
bspc monitor "$MONITOR" -d 1 2 3 4 5 6 7 8
# Enable window focus follow mouse pointer
bspc config focus_follows_pointer true
@ -82,7 +85,7 @@ bspc rule -a 'legcord' desktop=10
# (xdg-desktop-portal-gtk, used by browser file pickers) fail with "cannot open display".
systemctl --user import-environment DISPLAY XAUTHORITY XDG_CURRENT_DESKTOP
dbus-update-activation-environment --systemd DISPLAY XAUTHORITY XDG_CURRENT_DESKTOP
xrdb merge $HOME/.Xresources
[ -f "$HOME/.Xresources" ] && xrdb merge "$HOME/.Xresources"
xsettingsd &
dunst &
flameshot &

View file

@ -1,144 +0,0 @@
# Animations
animations = true;
animation-stiffness-in-tag = 200;
animation-stiffness-tag-change = 120.0;
animation-window-mass = 0.5;
animation-dampening = 20;
animation-clamping = true;
animation-for-open-window = "slide-up";
animation-for-unmap-window = "slide-down";
animation-for-menu-window = "slide-up";
animation-for-transient-window = "slide-up";
animation-for-prev-tag = "slide-up";
enable-fading-prev-tag = true;
animation-for-next-tag = "slide-down";
enable-fading-next-tag = true;
# Shadow
shadow = false;
# Fading
fading = true;
fade-in-step = 0.02;
fade-out-step = 0.03;
fade-delta = 8;
no-fading-openclose = false;
# Transparency
inactive-opacity-override = true;
active-opacity-override = true;
focus-exclude = [
"class_g = 'Cairo-clock'",
];
opacity-rule = [
# Fullscreen is not transparent
"100:fullscreen",
"100:_NET_WM_STATE@[*]:32a = '_NET_WM_STATE_FULLSCREEN'",
# Rest of the apps
"75:class_g *?= 'firefox'",
"75:class_g *?= 'Signal'",
"75:class_g *?= 'Code'",
"75:class_g *?= 'nemo'",
"75:class_g *?= 'pavucontrol'",
"75:class_g *?= 'qt5ct'",
"75:class_g *?= 'qt6ct'",
"75:class_g *?= 'Ark'",
"75:class_g *?= 'Xarchiver'",
"75:class_g *?= 'obs'",
"75:class_g *?= 'kitty'",
"75:class_g *?= 'Spotify'",
"75:class_g *?= 'blueman-manager'",
"75:class_g *?= 'Steam'",
"75:class_g *?= 'steamwebhelper'",
"75:class_g *?= 'Discord'",
"75:class_g *?= 'Webcord'",
"75:class_g *?= 'legcord'",
"75:class_g *?= 'yad'",
"75:class_g *?= 'org.kde.polkit-kde-authentication-agent-1'",
"75:class_g *?= 'polkit-gnome-authentication-agent-1'",
"75:class_g *?= 'org.freedesktop.impl.portal.desktop.gtk'",
"75:class_g *?= 'Loupe'",
"75:class_g *?= 'gnome-calculator'",
"75:class_g *?= 'Evince'",
"75:class_g *?= 'Polybar'",
"75:class_g *?= 'Rofi'",
];
# Borders
border-color = "#8b9151";
corner-radius = 0;
unredir-if-possible = true;
no-ewmh-fullscreen = true;
rounded-corners-exclude = [
"name = 'Polybar tray window'",
"window_type = 'desktop'",
"window_type = 'dropdown_menu'",
"window_type = 'popup_menu'",
"window_type = 'utility'",
"window_type = 'tooltip'",
"window_type = 'splash'",
"class_g *?= 'dunst'",
"class_g *?= 'Rofi'",
"BSPWM_TILED@:c = 1",
"_NET_WM_STATE@[*]:32a = '_NET_WM_STATE_FULLSCREEN'",
];
# Blur
blur: {
method = "dual_kawase";
strength = 3;
background = true;
background-frame = false;
background-fixed = false;
}
blur-background-exclude = [
"class_g = 'Dunst'",
"window_type = 'desktop'",
"window_type *= 'menu'",
"window_type = 'utility'",
"window_type = 'tooltip'",
"window_type = 'splash'",
"class_g *?= 'polybar'",
"class_g *?= 'Rofi'",
"class_g *?= 'screenkey'",
"class_g *?= 'GLava'",
"class_g *?= 'kdeconnectd'",
"class_g *?= 'kdeconnect.daemon'",
"class_g *?= 'activate-linux'",
"_GTK_FRAME_EXTENTS@:c",
];
# General settings
backend = "glx"
dithered-present = false;
mark-wmwin-focused = true;
mark-ovredir-focused = true;
detect-rounded-corners = false;
detect-client-opacity = false;
use-ewmh-active-win = true;
unredir-if-possible = false;
detect-transient = true;
#glx-no-stencil = true;
use-damage = true;
xrender-sync-fence = true;
#window-shader-fg = "";
transparent-clipping = false;
log-level = "warn";
# Window types
wintypes:
{
tooltip = { fade = true; shadow = false; opacity = 0.85; focus = true; full-shadow = false; };
dock = { shadow = false; clip-shadow-above = true; }
dnd = { shadow = false; }
popup_menu = { opacity = 0.9; }
dropdown_menu = { opacity = 0.9; }
normal = { animation = "slide-down"; animation-unmap = "slide-up"; }
};

View file

@ -0,0 +1,6 @@
[General]
contrastOpacity=188
drawColor=#800080
drawFontSize=26
drawThickness=3
useX11LegacyScreenshot=true

11
.config/greenclip.toml Normal file
View file

@ -0,0 +1,11 @@
[greenclip]
blacklisted_applications = []
enable_image_support = true
history_file = "/home/sarthak/.cache/greenclip.history"
image_cache_directory = "/tmp/greenclip"
max_history_length = 50
max_selection_size_bytes = 0
static_history = ["Greenclip has been updated to v4.1, update your new config file at ~/.config/greenclip.toml"]
trim_space_from_selection = true
use_primary_selection_as_input = false

11
.config/kitty/kitty.conf Executable file
View file

@ -0,0 +1,11 @@
font_family JetBrainsMono Nerd Font Regular
bold_font JetBrainsMono Nerd Font Bold
italic_font JetBrainsMono Nerd Font SemiBold Italic
bold_italic_font JetBrainsMono Nerd Font Bold Italic
font_size 11.0
hide_window_decorations yes
confirm_os_window_close 0
window_padding_width 10
include ./themes/dc.conf

22
.config/kitty/themes/dc.conf Executable file
View file

@ -0,0 +1,22 @@
# Sakura Line - sampled from bspwm/wallpaper/wallpaper.jpg
background #0f0d17
foreground #e9eefb
cursor #92b9ea
selection_background #2e2842
selection_foreground #0f0d17
color0 #0f0d17
color8 #3a3350
color1 #cf6a80
color9 #e0798f
color2 #8fae74
color10 #a8c68d
color3 #d8a87c
color11 #e9c79b
color4 #7c9ede
color12 #92b9ea
color5 #b483c0
color13 #d0a4d8
color6 #8ab6c4
color14 #a3c0cb
color7 #c9d1e2
color15 #e9eefb

28
.config/mimeapps.list Normal file
View file

@ -0,0 +1,28 @@
[Default Applications]
x-scheme-handler/claude-cli=claude-code-url-handler.desktop
x-scheme-handler/postman=Postman.desktop
text/html=brave-browser.desktop
x-scheme-handler/http=brave-browser.desktop
x-scheme-handler/https=brave-browser.desktop
x-scheme-handler/about=brave-browser.desktop
x-scheme-handler/unknown=brave-browser.desktop
x-scheme-handler/chrome=zen.desktop
application/x-extension-htm=zen.desktop
application/x-extension-html=zen.desktop
application/x-extension-shtml=zen.desktop
application/xhtml+xml=zen.desktop
application/x-extension-xhtml=zen.desktop
application/x-extension-xht=zen.desktop
x-scheme-handler/claude=com.anthropic.Claude.desktop
[Added Associations]
x-scheme-handler/http=zen.desktop;
x-scheme-handler/https=zen.desktop;
x-scheme-handler/chrome=zen.desktop;
text/html=zen.desktop;
application/x-extension-htm=zen.desktop;
application/x-extension-html=zen.desktop;
application/x-extension-shtml=zen.desktop;
application/xhtml+xml=zen.desktop;
application/x-extension-xhtml=zen.desktop;
application/x-extension-xht=zen.desktop;

View file

@ -109,7 +109,7 @@ time = %H:%M
[module/cpu]
type = custom/script
exec = "$HOME/.config/scripts/system-info.sh --cpu --normal-color '#92b9ea' --critical-color '#cf6a80'"
click-left = "$HOME/bin/system-info.sh --cpu --click"
click-left = "$HOME/.config/scripts/system-info.sh --cpu --click"
format = "%{F#92b9ea}CPU%{F-} <label>"
format-padding = 1
interval = 2
@ -124,7 +124,7 @@ interval = 2
[module/gpu]
type = custom/script
exec = "$HOME/.config/scripts/system-info.sh --gpu --normal-color '#b483c0' --critical-color '#cf6a80'"
click-left = "$HOME/bin/system-info.sh --gpu --click"
click-left = "$HOME/.config/scripts/system-info.sh --gpu --click"
format = "%{F#b483c0}GPU%{F-} <label>"
format-padding = 1
interval = 2
@ -134,9 +134,9 @@ interval = 2
type = custom/script
exec = "SESSION_TYPE=x11 sh $HOME/.config/scripts/volume.sh --device output --status --disabled-color '#cf6a80' --enabled-color '#8fae74'"
tail = true
click-left = "sh $HOME/bin/volume.sh --device output --action toggle"
scroll-up = "sh $HOME/bin/volume.sh --device output --action increase"
scroll-down = "sh $HOME/bin/volume.sh --device output --action decrease"
click-left = "sh $HOME/.config/scripts/volume.sh --device output --action toggle"
scroll-up = "sh $HOME/.config/scripts/volume.sh --device output --action increase"
scroll-down = "sh $HOME/.config/scripts/volume.sh --device output --action decrease"
format = "%{F#8fae74}VOL%{F-} <label>"
format-padding = 1

View file

@ -74,6 +74,10 @@ map_pkg() {
gd) echo "libgd-dev" ;;
xorg-xrandr) echo "x11-xserver-utils" ;;
xorg-xprop) echo "x11-utils" ;;
xorg-xrdb) echo "x11-xserver-utils" ;;
xorg-xsetroot) echo "x11-xserver-utils" ;;
wmname) echo "suckless-tools" ;;
gtk3) echo "libgtk-3-0" ;;
ttf-jetbrains-mono-nerd) echo "fonts-jetbrains-mono" ;;
noto-fonts) echo "fonts-noto" ;;
noto-fonts-emoji) echo "fonts-noto-color-emoji" ;;
@ -97,6 +101,9 @@ map_pkg() {
gd) echo "gd-devel" ;;
xorg-xrandr) echo "xrandr" ;;
xorg-xprop) echo "xprop" ;;
xorg-xrdb) echo "xorg-x11-server-utils" ;;
xorg-xsetroot) echo "xsetroot" ;;
wmname) echo "suckless-tools" ;;
ttf-jetbrains-mono-nerd) echo "jetbrains-mono-fonts" ;;
noto-fonts) echo "google-noto-sans-fonts" ;;
noto-fonts-emoji) echo "google-noto-emoji-fonts" ;;
@ -156,7 +163,10 @@ deploy_dotfiles() {
# Move anything that would be clobbered into a backup instead of losing it.
mkdir -p "$BACKUP"
local conflicts
conflicts="$(dot checkout main 2>&1 | grep -oP '^\s+\K\S+\.\S+$' || true)"
# git lists the offending paths indented by a tab; anything else it prints
# in that message is flush-left prose. Matching on a dot in the name would
# miss dotfiles like .bashrc, which is exactly what collides on a fresh box.
conflicts="$(dot checkout main 2>&1 | sed -n 's/^[[:space:]]\{1,\}\([^[:space:]].*\)$/\1/p' || true)"
if [ -n "$conflicts" ]; then
say "backing up files that would be overwritten -> $BACKUP"
while IFS= read -r f; do

View file

@ -12,6 +12,10 @@ feh
xdotool
xorg-xrandr
xorg-xprop
xorg-xrdb
xorg-xsetroot
xsettingsd
wmname
# --- build toolchain (st + particles) ---
base-devel
@ -41,19 +45,27 @@ aur:bibata-cursor-theme
# --- runtime deps the rice actually calls ---
networkmanager
wireplumber
bluez
bluez-utils
pamixer
playerctl
libnotify
gtk3
python-gobject
xclip
flameshot
i3lock
aur:rofi-greenclip
# --- shell / editor / files ---
fish
neovim
yazi
# --- apps ---
thunar
kitty
fastfetch
# --- showcase toys ---

11
.config/user-dirs.dirs Normal file
View file

@ -0,0 +1,11 @@
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run.
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
#
XDG_DOWNLOAD_DIR="$HOME/downloads/"
XDG_DOCUMENTS_DIR="$HOME/documents/"
XDG_PICTURES_DIR="$HOME/pictures/"
XDG_VIDEOS_DIR="$HOME/videos/"

View file

@ -0,0 +1,12 @@
<?xml version="1.1" encoding="UTF-8"?>
<channel name="thunar" version="1.0">
<property name="last-view" type="string" value="ThunarIconView"/>
<property name="last-icon-view-zoom-level" type="string" value="THUNAR_ZOOM_LEVEL_100_PERCENT"/>
<property name="last-window-width" type="int" value="941"/>
<property name="last-window-height" type="int" value="503"/>
<property name="last-window-maximized" type="bool" value="true"/>
<property name="last-details-view-zoom-level" type="string" value="THUNAR_ZOOM_LEVEL_38_PERCENT"/>
<property name="last-details-view-column-widths" type="string" value="50,50,124,50,50,87,50,50,394,50,50,75,50,139"/>
<property name="last-separator-position" type="int" value="170"/>
</channel>

View file

@ -1,13 +0,0 @@
[manager]
prepend_keymap = [
{ on = ["+"], run = "cd /home/carrie", desc = "Home" },
{ on = ["+", "f"], run = "cd /home/carrie/Documents", desc = "Documents" },
{ on = ["+", "a"], run = "cd /home/carrie/Pictures", desc = "Pictures" },
{ on = ["+", "c"], run = "cd /home/carrie/.config", desc = "Config" },
{ on = ["+", "d"], run = "cd /home/carrie/Downloads", desc = "Downloads" },
{ on = ["+", "v"], run = "cd /home/carrie/Videos", desc = "Videos" },
{ on = ["+", "h"], run = "cd /drives", desc = "Drives" },
]

View file

@ -1,26 +0,0 @@
[manager] # <--- Use [manager], not [mgr]
# ... your other single-key bindings might go here ...
prepend_keymap = [
{ on = ["`", "`"], run = "cd /home/carrie", desc = "Home" },
{ on = ["`", "f"], run = "cd /home/carrie/Documents", desc = "Documents" },
{ on = ["`", "a"], run = "cd /home/carrie/Pictures", desc = "Pictures" },
{ on = ["`", "c"], run = "cd /home/carrie/.config", desc = "Config" },
{ on = ["`", "d"], run = "cd /home/carrie/Downloads", desc = "Downloads" },
{ on = ["`", "v"], run = "cd /home/carrie/Videos", desc = "Videos" },
{ on = ["`", "h"], run = "cd /drives", desc = "Drives" },
{ on = ["n", "f"], run = "create --dir", desc = "New Folder" },
{ on = ["n", "d"], run = "create", desc = "New File" },
{ on = ["c", "x"], run = "cut", desc = "Cut File" },
{ on = ["c", "c"], run = "yank", desc = "Copy File" },
{ on = ["c", "v"], run = "paste", desc = "Paste File" },
]
# Add the 'Right = "open"' line OUTSIDE and AFTER the list block.
# Yazi reads simple key-value pairs like this separately from the list above.
Right = "open"

View file

@ -1,26 +0,0 @@
[manager] # <--- Use [manager], not [mgr]
# ... your other single-key bindings might go here ...
prepend_keymap = [
{ on = ["`", "`"], run = "cd /home/carrie", desc = "Home" },
{ on = ["`", "f"], run = "cd /home/carrie/Documents", desc = "Documents" },
{ on = ["`", "a"], run = "cd /home/carrie/Pictures", desc = "Pictures" },
{ on = ["`", "c"], run = "cd /home/carrie/.config", desc = "Config" },
{ on = ["`", "d"], run = "cd /home/carrie/Downloads", desc = "Downloads" },
{ on = ["`", "v"], run = "cd /home/carrie/Videos", desc = "Videos" },
{ on = ["`", "h"], run = "cd /drives", desc = "Drives" },
{ on = ["n", "f"], run = "create --dir", desc = "New Folder" },
{ on = ["n", "d"], run = "create", desc = "New File" },
{ on = ["c", "x"], run = "cut", desc = "Cut File" },
{ on = ["c", "c"], run = "yank", desc = "Copy File" },
{ on = ["c", "v"], run = "paste", desc = "Paste File" },
]
# Add the 'Right = "open"' line OUTSIDE and AFTER the list block.
# Yazi reads simple key-value pairs like this separately from the list above.
Right = "open"

View file

@ -1,44 +0,0 @@
[manager]
show_hidden = true
[opener]
edit = [
{ run = 'nvim "$@"', block = true },
]
image = [
{ run = 'feh "$@"', orphan = true },
]
video = [
{ run = 'mpv "$@"', orphan = true },
]
audio = [
{ run = 'strawberry "$@"', orphan = true },
]
[open]
rules = [
{ name = "*.png", use = "image" },
{ name = "*.jpg", use = "image" },
{ name = "*.jpeg", use = "image" },
{ name = "*.gif", use = "image" },
{ name = "*.webp", use = "image" },
{ name = "*.mp4", use = "video" },
{ name = "*.mkv", use = "video" },
{ name = "*.webm", use = "video" },
{ name = "*.mp3", use = "audio" },
{ name = "*.flac", use = "audio" },
{ name = "*.wav", use = "audio" },
{ name = "*.ogg", use = "audio" },
{ mime = "text/*", use = "edit" },
]

1
.xinitrc Normal file
View file

@ -0,0 +1 @@
exec bspwm

67
README.md Normal file
View file

@ -0,0 +1,67 @@
# dotfiles
Everything needed to rebuild my Arch + bspwm desktop on a bare machine:
**Sakura Line**, a bspwm rice with a GTK control panel and a particle wallpaper layer.
## Install
```sh
bash <(curl -fsSL https://git.srtk.in/sarthak/dotfiles/raw/branch/main/.config/rice/install.sh)
```
That one command installs the packages, clones this repo, checks it out over
`$HOME`, builds `st` and `particles`, and does the theming. It is safe to
re-run, and nothing in `$HOME` is overwritten without being backed up to
`~/.rice-backup-<timestamp>/` first.
Add `--dry-run` to see every step without changing anything.
**[→ Full rice documentation: keybindings, control panel, palette](.config/rice/README.md)**
## Why the repo looks like this
This is a [bare repo tracking `$HOME`](https://www.atlassian.com/git/tutorials/dotfiles),
so paths are relative to your home directory and the top level only shows the
dotfiles themselves — there is no `src/` or wrapper folder. The bootstrap lives
at `.config/rice/install.sh` because that is where it lands on disk.
Manage it with:
```sh
alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
dotfiles status
dotfiles add .config/polybar/config.ini
dotfiles commit -m "polybar: ..."
dotfiles push
```
That alias is in the tracked [`.bashrc`](.bashrc).
## What is in here
| path | what |
|---|---|
| [`.config/rice/`](.config/rice) | **the bootstrap**`install.sh`, `packages.txt`, `st/config.h`, `particles/` |
| [`.config/bspwm/`](.config/bspwm) | WM config, keybindings (`sxhkdrc`), picom, wallpaper |
| [`.config/polybar/`](.config/polybar) | the bar and its launcher |
| [`.config/scripts/`](.config/scripts) | control panel (GTK), volume, media, wallpaper, screenshots |
| [`.config/rofi/`](.config/rofi) | launcher, clipboard and emoji menus |
| [`.config/dunst/`](.config/dunst) | notifications |
| [`.config/fish/`](.config/fish) | shell — prompt, functions, plugins |
| [`.config/nvim/`](.config/nvim) | LazyVim setup |
| [`.config/yazi/`](.config/yazi) | file manager, plugins and scripts |
| [`.config/kitty/`](.config/kitty) | fallback terminal (`st` is the primary) |
| [`.config/gtk-*/`, `.themes/`, `.config/qt*ct/`](.themes) | GTK 2/3/4 and Qt theming |
| [`.config/btop/`, `.config/cava/`, `.config/fastfetch/`](.config/fastfetch) | the showcase toys |
| [`.xinitrc`](.xinitrc) | starts bspwm |
Programs unrelated to the rice are deliberately not tracked.
## Requirements
Arch is the first-class target — `packages.txt` is a pacman list, with
`aur:`-prefixed lines for the AUR extras. Debian/Ubuntu and Fedora are
best-effort: `install.sh` maps the package names it can and skips the AUR bits.
Licensed MIT where the vendored sources say so (`st`, `particles`, yazi plugins
keep their own upstream licenses).