1
0
forked from extern/nix-config

meta: Revert recent dotfile removals

Although removing these dotfiles gave the repository a clean feeling, it
made it significantly harder to resume using a certain window manager or
other tool at any time.

Instead of removing dotfiles entirely, it's enough to simply not install
the programs you don't want to use, or even install them but not open
them.
This commit is contained in:
Donovan Glover 2023-03-19 17:56:56 -04:00
parent 15f6d80a52
commit 6f75925146
No known key found for this signature in database
GPG Key ID: EA7408A77AE1BE65
46 changed files with 1469 additions and 0 deletions

8
dunst/.config/dunst/wal.sh Executable file
View File

@ -0,0 +1,8 @@
#!/bin/sh
# Symlink dunst config
ln -sf ~/.cache/wal/dunstrc ~/.config/dunst/dunstrc
# Restart dunst with the new color scheme
pkill dunst
dunst &

View File

@ -0,0 +1,62 @@
# New Start: A modern Arch workflow built with an emphasis on functionality.
# Copyright (C) 2018 Donovan Glover
# NOTE: This file is automatically generated by pywal. Do not edit it by hand.
[global]
# Make the width 3740 (3840 - 100), have 50 left margin and 95 above (for HiDPI, below this is normal DPI)
# geometry = "3740x5-50+95"
geometry = "1870x5-25+45"
# Increase width of dunst notifications
width = 350
# Show multiple notifications in the same box
separator_height = 0
# Add vertical padding to the inside of the notification
padding = 24
# Add horizontal padding for when the text gets long enough
horizontal_padding = 24
# The frame color and width of the notification
frame_color = "{color8}"
frame_width = 3
# How long a user needs to be idle for sticky notifications
idle_threshold = 120
# Font and typography settings
font = Fira Mono 12
alignment = center
word_wrap = yes
# Transparency
transparency = 5
# Format for how notifications will be displayed
# Usage: `notify-send 'Title' 'Summary'`
format = "<b>%s</b>: %b"
# Allow some HTML tags like <i> and <u> in notifications
markup = full
# Increase the size of cover notifications
min_icon_size = 128
max_icon_size = 128
# Set the background and foreground (text) color for all notifications
[urgency_low]
background = "{background}"
foreground = "{foreground}"
[urgency_normal]
background = "{background}"
foreground = "{foreground}"
[urgency_critical]
background = "{background}"
foreground = "{foreground}"
# vim:ft=cfg

16
dunst/README.md Normal file
View File

@ -0,0 +1,16 @@
# dunst
[dunst][dunst] is used to display notifications on your desktop.
## Use Cases
dunst can be used to:
- Display messages sent with `notify-send`
- Strategically add notifications to your rice screenshots
You should not use dunst if:
- Your desktop environment already includes a notification daemon
[dunst]: https://github.com/dunst-project/dunst

View File

@ -0,0 +1,25 @@
# Vertical Candidate List
Vertical Candidate List=False
# Use Per Screen DPI
PerScreenDPI=True
# Use mouse wheel to go to prev or next page
WheelForPaging=True
# Font
Font="Noto Sans CJK JP 11"
# Menu Font
MenuFont="Noto Sans CJK JP 11"
# Tray Font
TrayFont="Noto Sans CJK JP Medium 11"
# Tray Label Outline Color
TrayOutlineColor=#000000
# Tray Label Text Color
TrayTextColor=#ffffff
# Prefer Text Icon
PreferTextIcon=False
# Show Layout Name In Icon
ShowLayoutNameInIcon=True
# Use input method language to display text
UseInputMethodLangaugeToDisplayText=True
# Theme
Theme=default

View File

@ -0,0 +1,7 @@
# Trigger Key
TriggerKey=
# Paste Primary
PastePrimaryKey=
# Number of entries
Number of entries=5

View File

@ -0,0 +1,11 @@
# Initial Mode
InitialMode=Hiragana
# Vertical candidate list
Vertical=True
# Expand Usage (Requires vertical candidate list)
ExpandMode="On Focus"
# Fix embedded preedit cursor at the beginning of the preedit
PreeditCursorPositionAtBeginning=False
# Hotkey to expand usage
ExpandKey=Control+Alt+H

View File

@ -0,0 +1,3 @@
# Hidden Notifications
HiddenNotifications=

View File

@ -0,0 +1,3 @@
# Trigger Key
TriggerKey=

View File

@ -0,0 +1,66 @@
[Hotkey]
# Enumerate when press trigger key repeatedly
EnumerateWithTriggerKeys=True
# Temporally switch between first and current Input Method
AltTriggerKeys=
# Enumerate Input Method Forward
EnumerateForwardKeys=
# Enumerate Input Method Backward
EnumerateBackwardKeys=
# Skip first input method while enumerating
EnumerateSkipFirst=False
# Enumerate Input Method Group Forward
EnumerateGroupForwardKeys=
# Enumerate Input Method Group Backward
EnumerateGroupBackwardKeys=
# Activate Input Method
ActivateKeys=
# Deactivate Input Method
DeactivateKeys=
[Hotkey/TriggerKeys]
0=Super+bracketleft
[Hotkey/PrevPage]
0=Up
[Hotkey/NextPage]
0=Down
[Hotkey/PrevCandidate]
0=Shift+Tab
[Hotkey/NextCandidate]
0=Tab
[Hotkey/TogglePreedit]
0=Control+Alt+P
[Behavior]
# Active By Default
ActiveByDefault=False
# Share Input State
ShareInputState=No
# Show preedit in application
PreeditEnabledByDefault=True
# Show Input Method Information when switch input method
ShowInputMethodInformation=True
# Show Input Method Information when changing focus
showInputMethodInformationWhenFocusIn=False
# Show compact input method information
CompactInputMethodInformation=True
# Show first input method information
ShowFirstInputMethodInformation=True
# Default page size
DefaultPageSize=5
# Override Xkb Option
OverrideXkbOption=False
# Custom Xkb Option
CustomXkbOption=
# Force Enabled Addons
EnabledAddons=
# Force Disabled Addons
DisabledAddons=
# Preload input method to be used by default
PreloadInputMethod=True

View File

@ -0,0 +1,23 @@
[Groups/0]
# Group Name
Name="Group 1"
# Layout
Default Layout=us
# Default Input Method
DefaultIM=mozc
[Groups/0/Items/0]
# Name
Name=keyboard-us
# Layout
Layout=
[Groups/0/Items/1]
# Name
Name=mozc
# Layout
Layout=
[GroupOrder]
0="Group 1"

20
fcitx/README.md Normal file
View File

@ -0,0 +1,20 @@
# Fcitx
[Fcitx(5)][fcitx] is an input method framework.
## Use Cases
Fcitx can be used to:
- Type Japanese with [mozc][mozc] on both Xorg and Wayland
- Have a working [IME][ime] in the kitty terminal
- Have a working IME for Anki and similar applications
You should not use Fcitx if:
- You don't need to type in another language like Japanese
- You're only using GNOME (ibus + anthy works well there)
[fcitx]: https://github.com/fcitx/fcitx5
[mozc]: https://wiki.archlinux.org/title/Mozc
[ime]: https://wiki.archlinux.org/title/Input_method

99
feh/.config/feh/keys Normal file
View File

@ -0,0 +1,99 @@
# New Start: A modern Arch workflow built with an emphasis on functionality.
# Copyright (C) 2017-2018 Donovan Glover
# Remove the default keybindings
toggle_actions
toggle_aliasing
toggle_caption
toggle_filenames
toggle_exif
save_filelist
toggle_fixed_geometry
toggle_pause
toggle_info
toggle_keep_vp
toggle_menu
next_img
toggle_pointer
prev_img
quit
reload_image
save_image
toggle_fullscreen
size_to_image
close
jump_random
prev_dir
next_dir
orient_3
orient_1
# Remove the default editing functionality
flip
mirror
action_0
action_1
action_2
action_3
action_4
action_5
action_6
action_7
action_8
action_9
jump_first
jump_last
jump_fwd
jump_back
reload_plus
reload_minus
remove
delete
scroll_left
scroll_right
scroll_up
scroll_down
scroll_left_page
scroll_right_page
scroll_up_page
scroll_down_page
render
zoom_in
zoom_out
zoom_default
zoom_fit
zoom_fill
# Remove the menu stuff
menu_close
menu_up
menu_down
menu_parent
menu_child
menu_select
# Add our custom keybindings
# Note that k goes right (next) and j goes left (prev)
toggle_fullscreen f
next_img k Right
prev_img j Left
toggle_filenames d
toggle_fixed_geometry g
toggle_pause h
quit q
size_to_image w
jump_random z
scroll_left b
scroll_right n
scroll_up u Up
scroll_down d Down
zoom_in h
zoom_out l
zoom_default o
zoom_fill p
toggle_pointer a
jump_first J
jump_last K
jump_fwd H
jump_back L
toggle_auto_zoom m

43
feh/.config/feh/tile.sh Executable file
View File

@ -0,0 +1,43 @@
#!/bin/sh
# End the script if an error occurs.
set -e
# Change the working directory to a cache directory.
mkdir -p "$HOME/.cache/feh"
cd "$HOME/.cache/feh"
# If $1 is not defined, raise an error.
if [ -z "$1" ]; then
echo 'error: No color specified.'
echo 'usage: ./path/to/tile.sh <color> where color is hexadecimal'
exit 1
fi
# If $1 contains something other than 0-9 and A-F, raise an error.
if [[ -n "${1//[0-9A-F]/}" ]]; then
echo 'error: Invalid color specified. Colors must use 0-9 and A-F only.'
echo ' Colors should not use a-f since file names are case sensitive.'
exit 1
fi
# If $1 is not exactly six characters long, raise an error.
if ! [ "${#1}" -eq 6 ]; then
echo 'error: Invalid color specified. Colors must be of length 6.'
echo ' This is for the convert function, and is used to help'
echo ' prevent duplicate colors.'
exit 1
fi
# If the color doesn't exist yet, make it.
if ! test -e "$1.png"; then
echo 'status: Color file does not exist yet. Making it...'
convert -size 1x1 "xc:#$1" "$1.png"
fi
# Finally, set the specified color as the background.
echo 'status: Setting the desktop background as the specified color...'
feh --no-fehbg --bg-tile "$1.png"
# We're done here.
echo 'status: Successfully changed the background to the color specified!'

17
feh/README.md Normal file
View File

@ -0,0 +1,17 @@
# feh
[feh][feh] is an image viewer with no GUI. It can also change the desktop background.
## Use Cases
feh can be used to:
- Quickly view and browse through images without loading a GUI
- Change your desktop background if not using a desktop environment
- Strategically place GUI-less images in your rice screenshots
You should not use feh if:
- You are using a desktop environment with an image viewer
[feh]: https://github.com/derf/feh

View File

@ -0,0 +1,11 @@
[Settings]
gtk-cursor-theme-name=phinger-cursors
gtk-decoration-layout=menu:
gtk-font-name=Noto Sans CJK JP 11
gtk-icon-theme-name=flattrcolor-dark
gtk-theme-name=FlatColor
gtk-xft-antialias=1
gtk-xft-hinting=1
gtk-xft-hintstyle=hintfull
gtk-xft-rgba=rgb
gtk-recent-files-enabled=false

18
gtk/README.md Normal file
View File

@ -0,0 +1,18 @@
# gtk-settings
[GTK][gtk] is the widget toolkit used by Firefox, Electron, and many (if not all) GNOME applications.
GTK's `settings.ini` only affects window managers and not the GNOME desktop environment. This is because GNOME manages user preferences with [`dconf` through `gsettings`][gnome].
## Use Cases
gtk-settings can be used to:
- Control the appearance of GTK applications under non-GNOME environments
You do not need to use gtk-settings if:
- You are using the GNOME desktop environment
[gtk]: https://wiki.archlinux.org/index.php/GTK+
[gnome]: https://wiki.archlinux.org/index.php/GNOME#Configuration

View File

@ -0,0 +1,26 @@
// Enable WebGL
defaultPref("webgl.disabled", false);
// Can be safely disabled unless on Linux
defaultPref("media.peerconnection.ice.no_host", false);
// Disable middle click paste
defaultPref("middlemouse.paste", false);
// Use real timezone
defaultPref("privacy.resistFingerprinting", false);
// Soft-fail OCSP
defaultPref("security.OCSP.require", false);
// Save to downloads by default
defaultPref("browser.download.useDownloadDir", true);
// Enable autoplay for muted media (default)
defaultPref("media.autoplay.default", 1);
// Autoplay when interacting with the website (default)
defaultPref("media.autoplay.blocking_policy", 0);
// Fix bspwm and other window managers automatically pressing back on right click
defaultPref("ui.context_menus.after_mouseup", true);

15
librewolf/README.md Normal file
View File

@ -0,0 +1,15 @@
# librewolf
[librewolf][librewolf] is a firefox fork focused on privacy, security, and freedom.
## Use Cases
librewolf can be used to:
- Use Firefox without worrying about changing the defaults.
You should not use librewolf if:
- You don't mind changing settings in Firefox.
[librewolf]: https://librewolf.net/

View File

@ -0,0 +1,6 @@
gtk2="off"
image_backend="kitty"
speed_shorthand="on"
cpu_brand="off"
# vim:ft=conf

15
neofetch/README.md Normal file
View File

@ -0,0 +1,15 @@
# neofetch
[neofetch][neofetch] is the standard information tool.
## Use Cases
neofetch can be used to:
- Display system information in an elegant way, even through a tty
You should not use neofetch if:
- You should use neofetch.
[neofetch]: https://github.com/dylanaraps/neofetch

70
picom/.config/picom.conf Normal file
View File

@ -0,0 +1,70 @@
# New Start: A modern Arch workflow built with an emphasis on functionality.
# Copyright (C) 2017-2018 Donovan Glover
# Fix screen tearing
backend = "glx"
vsync = true
# Enable shadows (very important, as this makes everything look really nice)
shadow = true
# Disable shadow on docks like polybar
no-dock-shadow = true
# Disable shadow on hacksaw
shadow-exclude = [
"name = 'hacksaw'"
]
# Make some applications translucent.
# An easy way to get the class name of a window is with the following:
# sleep 5; xdotool getwindowclassname (xdotool getactivewindow)
opacity-rule = [
"90:class_g = 'Polybar'",
"90:class_g = 'Tint2'",
"90:class_g = 'Thunar'",
"90:class_g = 'code-oss'",
"99:class_g = 'Org.gnome.Nautilus'"
]
# Don't fade in polybar when showing it
fade-exclude = [
"class_g = 'Polybar'"
]
# Disable shadow for drag-and-drop functionality
wintypes: {
dnd = {
shadow = false
}
}
# Fade windows when you open and close them, as well as change workspaces
fading = true
# Shadow settings
shadow-radius = 8
shadow-opacity = 0.25
# Shadow offset (-10 for HiDPI, -5 otherwise)
shadow-offset-x = -5
shadow-offset-y = -5
# Fade settings
fade-in-step = 0.08
fade-out-step = 0.09
fade-delta = 10
# Add transparency to bspwm borders
#frame-opacity = 0.5
# Fix flickering issue by drawing whole screen every time
# See: https://github.com/yshui/picom/issues/578
use-damage = false
blur: {
method = "dual_kawase";
strength = 7;
}
# vim:ft=dosini

18
picom/README.md Normal file
View File

@ -0,0 +1,18 @@
# picom
[picom][picom] is a desktop compositor for X11.
## Use Cases
picom can be used to:
- Reduce screen tear in certain environments
- Add elementary animations such as fading to your desktop
- Add shadows to your desktop
You should not use picom if:
- Your window manager or desktop environment already has a compositor
- You are not using X11
[picom]: https://github.com/yshui/picom

View File

@ -0,0 +1,176 @@
import pywalQute.draw
import time
# Don't use auto-saved settings
config.load_autoconfig(False)
# Mute tabs by default
from qutebrowser.mainwindow import tabwidget
tabwidget.TabWidget.MUTE_STRING = ""
tabwidget.TabWidget.AUDIBLE_STRING = "[A]"
# Make color scheme match pywal
pywalQute.draw.color(c, {
'spacing': {
'vertical': 0,
'horizontal': 0
}
})
# Don't close while browsing / downloading
c.confirm_quit = ['multiple-tabs', 'downloads']
# Restore previous tabs
c.session.lazy_restore = True
# Use ranger as the file selector
c.fileselect.handler = 'external'
c.fileselect.folder.command = ['kitty', '-e', 'ranger', '--choosedir={}']
c.fileselect.multiple_files.command = ['kitty', '-e', 'ranger', '--choosefiles={}']
c.fileselect.single_file.command = ['kitty', '-e', 'ranger', '--choosefile={}']
# Better context menu colors
c.colors.contextmenu.disabled.fg = '#808080'
c.colors.contextmenu.menu.bg = '#353535'
c.colors.contextmenu.menu.fg = '#ffffff'
c.colors.contextmenu.selected.bg = '#909090'
# Use spellcheck
c.spellcheck.languages = ["en-US"]
# Chromium flags
c.qt.args = ["disable-backing-store-limit", "enable-accelerated-video-decode", "disable-gpu-driver-bug-workarounds"]
c.qt.chromium.low_end_device_mode = 'never'
# Make new tab position more sane
c.tabs.new_position.unrelated = 'next'
# Download settings
c.downloads.location.directory = "$HOME/Downloads"
c.downloads.location.prompt = False
c.downloads.position = "bottom"
c.downloads.remove_finished = 5000
# Only show tabs when multiple are open
c.tabs.show = "multiple"
# Don't switch tabs with mouse
c.tabs.mousewheel_switching = False
# Edit text with neovim
c.editor.command = ['kitty', '-e', 'nvim', '{}']
# Use J/K for prev/next
config.bind('J', 'tab-prev')
config.bind('K', 'tab-next')
# Use F12 for devtools
config.bind('<F12>', 'devtools')
# Use zb to delete bookmarks
config.bind('zb', 'bookmark-del')
# Increase the default scroll offset of j/k
# NOTE: Unfortunately this breaks websites that use their own keybinds for j/k/etc
# config.bind('j', 'run-with-count 5 scroll down')
# config.bind('k', 'run-with-count 5 scroll up')
# NOTE: Use with smooth smooth scrolling enabled to scroll smoothly
# config.bind('d', 'run-with-count 12 scroll down')
# config.bind('u', 'run-with-count 12 scroll up')
# Use d/u to scroll down/up
config.bind('d', 'scroll-page 0 0.5')
config.bind('u', 'scroll-page 0 -0.5')
config.bind('D', 'scroll-page 0 0.5')
config.bind('U', 'scroll-page 0 -0.5')
# Use alt+left/right to go back/forward
config.bind('<Alt+Left>', 'back')
config.bind('<Alt+Right>', 'forward')
# Use x to close tabs and X to undo
config.bind('x', 'tab-close')
config.bind('X', 'undo')
# Toggle tab visibility for more screen space
config.bind('st', 'config-cycle tabs.show multiple switching')
# Easily change the position of tabs
config.bind('sTh', 'set tabs.position left')
config.bind('sTj', 'set tabs.position bottom')
config.bind('sTk', 'set tabs.position top')
config.bind('sTl', 'set tabs.position right')
# Don't paste something by accident
config.unbind('pp', mode='normal')
config.unbind('pP', mode='normal')
config.unbind('Pp', mode='normal')
config.unbind('PP', mode='normal')
config.unbind('wp', mode='normal')
config.unbind('wP', mode='normal')
# Easily enter account information
# NOTE: I re-evaluated pass when I was focusing on a terminal-centric workflow.
config.bind('zl', 'spawn --userscript qute-pass')
config.bind('zpl', 'spawn --userscript qute-pass --password-only')
config.bind('zol', 'spawn --userscript qute-pass --otp-only')
# Support previous/next tab with traditional keybinds
config.bind('<Ctrl+Shift+Tab>', 'tab-prev')
config.bind('<Ctrl+Tab>', 'tab-next')
# Hide the status bar except under exceptional circumstances
# NOTE: This broke more things than not, which is why I ultimately decided
# to always use the status bar. More information can be found in the
# following discussion: https://github.com/qutebrowser/qutebrowser/issues/2236
# config.bind('o', 'set statusbar.show always;; set-cmd-text -s :open')
# config.bind('O', 'set statusbar.show always;; set-cmd-text -s :open -t')
# config.bind('T', 'set statusbar.show always;; set-cmd-text -sr :tab-focus')
# config.bind(':', 'set statusbar.show always;; set-cmd-text :')
# config.bind('/', 'set statusbar.show always;; set-cmd-text /')
# config.bind('<Escape>', 'mode-enter normal;; set statusbar.show in-mode', mode='command')
# config.bind('<Return>', 'command-accept;; set statusbar.show in-mode', mode='command')
# Easily start a new temporary container
config.bind(';s', 'hint links spawn ~/.local/bin/tmp {hint-url}')
# Open the current tab / selected link in mpv
config.bind('zM', 'spawn mpv --force-window=immediate {url}')
config.bind('zm', 'hint links spawn mpv --force-window=immediate {hint-url}')
# Automatically mute tabs
c.content.mute = True
# Use proxy websites for popular services
config.bind('zu', 'hint links spawn -u untrack-url -O {hint-url}')
# Enable expected permissions to avoid websites asking every time
c.content.persistent_storage = True
c.content.notifications.enabled = True
c.content.register_protocol_handler = True
# Hide the window title bar on GNOME
# NOTE: This is no longer necessary since GNOME has an extension called
# pixel-saver that # automatically handles this for us, and without
# the downsides of not having a window bar.
# c.window.hide_decoration = True
# Close qutebrowser when there are no tabs left
c.tabs.last_close = "close"
# Don't automatically enter/leave insert mode
# NOTE: This was originally done to prevent insert mode from prematurely exiting
# in certain # cases (such as mouse usage), although keeping auto functionality
# seems to be more useful # long-term.
c.input.insert_mode.auto_enter = False
c.input.insert_mode.auto_leave = False
# Prioritize Japanese content (en-US is necessary to avoid breaking things)
c.content.headers.accept_language = 'ja-JP,en-US'
# NOTE: Yomichan is still the most efficient pop-up dictionary; I only include
# this Yomichad implementation for historical purposes.
for mode in ["normal", "caret"]:
config.bind('gs', 'spawn --userscript yomichad', mode=mode)
config.bind('gS', 'spawn --userscript yomichad --prefix-search', mode=mode)

15
qutebrowser/README.md Normal file
View File

@ -0,0 +1,15 @@
# qutebrowser
[qutebrowser][qutebrowser] is a vim-like web browser based on chromium.
## Use Cases
qutebrowser can be used to:
- Browse the web with familiar vim-like keybindings
You should not use qutebrowser if:
- You want to take advantage of existing browser extensions
[qutebrowser]: https://qutebrowser.org/

View File

@ -0,0 +1,25 @@
configuration {
modi: ["drun", "filebrowser"];
font: "Noto Sans CJK JP 12";
show-icons: true;
bw: 0;
display-drun: "";
display-window: "";
display-combi: "";
drun-icon-theme: "Papirus-Dark";
terminal: "kitty";
scroll-method: 1;
run-shell-command: "{terminal} -e fish -ic '{cmd} && read'";
}
@theme "~/.cache/wal/rofi.rasi"
listview {
columns: 3;
}
window {
width: 1200px;
}
// vim:syn=java

70
rofi/.config/rofi/launch.sh Executable file
View File

@ -0,0 +1,70 @@
#!/bin/sh
# New Start: A modern Arch workflow built with an emphasis on functionality.
# Copyright (C) 2018 Donovan Glover
# This script will find the X server DPI and apply the necessary
# settings to make Rofi, X, GNOME, and KDE applications have the
# proper scaling, with no intervention from the user necessary.
# Note that XDG_CURRENT_DESKTOP is required for KDE/Qt applications to
# have the proper theming in non-Plasma environments. In contrast, GNOME
# respects its theming even when XDG_CURRENT_DESKTOP is not set to it
# (through settings.ini).
# Note that the xcursor size is specified with:
#
# 1. The X server resource database (xrdb), of which cursor size is
# only applied BEFORE your window manager starts
# 2. The xsetroot command, which affects the cursor shown on the root
# window (your desktop)
# 3. The XCURSOR_SIZE environment variable, which affects the current
# program
#
# There are a few things to take away from this:
#
# 1. The root window (desktop) cursor size MUST be changed with xsetroot
# 2. KDE applications will honor XCURSOR_SIZE but NOT xsetroot
# 3. GTK applications will honor xsetroot but NOT XCURSOR_SIZE
#
# Additionally,
#
# 4. SOME X applications require XCURSOR_SIZE to be set and will NOT
# honor xsetroot
# 5. SOME X applications require xsetroot to be set and will NOT
# honor XCURSOR_SIZE
#
# So for a consistent variable cursor DPI environment, one has to set BOTH
# xsetroot and XCURSOR_SIZE
#
# Note that existing windows will NOT have their X cursor size changed
# if they don't depend on xsetroot. Because of this, and because of the
# fact that active windows will not handle DPI changes anyway, you should
# probably have no GUIs running when switching DPI.
# Kill rofi if it's already running to make this a simple toggle script.
if pgrep -x rofi; then
killall rofi
exit
fi
ROFI_DPI=$(xrdb -query | grep Xft.dpi | cut -f 2)
ROFI_SCALE=$(expr $ROFI_DPI / 96)
ROFI_DPI_SCALE=$(awk "BEGIN { print "1/$ROFI_SCALE" }")
CURSOR_THEME=${XCURSOR_THEME:-phinger-cursors}
CURSOR_SIZE=$((16 * $ROFI_SCALE))
xsetroot -xcf "/usr/share/icons/$CURSOR_THEME/cursors/left_ptr" "$CURSOR_SIZE"
env \
QT_AUTO_SCREEN_SCALE_FACTOR="0" \
QT_FONT_DPI="$ROFI_DPI" \
QT_SCREEN_SCALE_FACTORS="VGA-1=$ROFI_SCALE;" \
GDK_SCALE="$ROFI_SCALE" \
GDK_DPI_SCALE="$ROFI_DPI_SCALE" \
XCURSOR_SIZE="$CURSOR_SIZE" \
rofi \
-show drun \
-dpi "$ROFI_DPI" \
-normal-window \
-m -1

View File

@ -0,0 +1,169 @@
* {{
active-background: @background;
active-foreground: @foreground;
normal-background: @background;
normal-foreground: @foreground;
urgent-background: @background;
urgent-foreground: @foreground;
alternate-active-background: @background;
alternate-active-foreground: @foreground;
alternate-normal-background: @background;
alternate-normal-foreground: @foreground;
alternate-urgent-background: @background;
alternate-urgent-foreground: @foreground;
selected-active-background: {color8};
selected-active-foreground: @foreground;
selected-normal-background: {color8};
selected-normal-foreground: @foreground;
selected-urgent-background: {color8};
selected-urgent-foreground: @foreground;
background-color: transparent;
background: rgba({background.rgb}, 0.9);
foreground: {foreground};
border-color: @background;
spacing: 2;
}}
#window {{
background-color: @background;
border: 1px;
border-color: {color7};
padding: 2.5ch;
}}
#mainbox {{
border: 0;
padding: 0;
}}
#message {{
border: 2px 0px 0px;
border-color: @border-color;
padding: 1px;
}}
#textbox {{
text-color: @foreground;
}}
#inputbar {{
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
}}
#textbox-prompt-colon {{
expand: false;
str: ":";
margin: 0px 0.3em 0em 0em;
text-color: @normal-foreground;
}}
#listview {{
fixed-height: 0;
border: 2px 0px 0px;
border-color: @border-color;
spacing: 2px;
scrollbar: true;
padding: 2px 0px 0px;
}}
#element {{
border: 0;
padding: 1px;
}}
#element-text, element-icon {{
background-color: inherit;
text-color: inherit;
}}
#element.normal.normal {{
background-color: transparent;
text-color: @normal-foreground;
}}
#element.normal.urgent {{
background-color: transparent;
text-color: @urgent-foreground;
}}
#element.normal.active {{
background-color: transparent;
text-color: @active-foreground;
}}
#element.selected.normal {{
background-color: transparent;
text-color: @selected-normal-foreground;
}}
#element.selected.urgent {{
background-color: transparent;
text-color: @selected-urgent-foreground;
}}
#element.selected.active {{
background-color: transparent;
text-color: @selected-active-foreground;
}}
#element.alternate.normal {{
background-color: transparent;
text-color: @alternate-normal-foreground;
}}
#element.alternate.urgent {{
background-color: transparent;
text-color: @alternate-urgent-foreground;
}}
#element.alternate.active {{
background-color: transparent;
text-color: @alternate-active-foreground;
}}
#scrollbar {{
width: 4px;
border: 0;
handle-width: 8px;
padding: 0;
}}
#sidebar {{
border: 2px 0px 0px;
border-color: @border-color;
}}
#button {{
text-color: @normal-foreground;
}}
#button.selected {{
background-color: transparent;
text-color: @selected-normal-foreground;
}}
#inputbar {{
spacing: 0;
text-color: @normal-foreground;
padding: 1px;
}}
#case-indicator {{
spacing: 0;
text-color: @normal-foreground;
}}
#entry {{
spacing: 0;
text-color: @normal-foreground;
}}
#prompt {{
spacing: 0;
text-color: @normal-foreground;
}}
// vim:syn=css

17
rofi/README.md Normal file
View File

@ -0,0 +1,17 @@
# rofi
[rofi][rofi] is an application launcher, window switcher, and dmenu replacement.
## Use Cases
rofi can be used to:
- Launch applications based on `.desktop` files
- Show all open windows and switch between them
- Parse dmenu-like input
You should not use rofi if:
- Your desktop environment already has an application launcher and window switcher
[rofi]: https://github.com/DaveDavenport/rofi

30
sxhkd/.config/sxhkd/dropdown.sh Executable file
View File

@ -0,0 +1,30 @@
#!/bin/sh
# New Start: A modern Arch workflow built with an emphasis on functionality.
# Copyright (C) 2018 Donovan Glover
# TODO: Run this script when launching stuff, so we can use super+\ to launch anything + hide it again, and have terminal access
DROPDOWN_DPI=$(xrdb -query | grep Xft.dpi | cut -f 2)
DROPDOWN_SCALE=$(($DROPDOWN_DPI / 96))
c='kitty' # Class
i='dropdown' # Instance
x='kitty --name' # Executable
# Note: This solution will not work with termite since it registers two ids.
# See https://github.com/thestinger/termite/issues/634 for more information.
id=$(xdo id -n $i)
rectangle=$((1700 * $DROPDOWN_SCALE))x$((600 * $DROPDOWN_SCALE))
offset=+$((110 * $DROPDOWN_SCALE))+$((100 * $DROPDOWN_SCALE))
# TODO: Use small window when holding shift
# TODO: Just use fullscreen from native bspwm/xorg instead of manually setting size
# rectangle=$((1920 * $DROPDOWN_SCALE))x$((1080 * $DROPDOWN_SCALE))
# offset=+$((0 * $DROPDOWN_SCALE))+$((0 * $DROPDOWN_SCALE))
bspc rule -r $c:$i
bspc rule -a $c:$i sticky=on state=floating rectangle=$rectangle$offset
([ -z "$id" ]) && ($x $i) ||
([[ $(xprop -id "$id" | awk '/window state: / {print $3}') == 'Withdrawn' ]] &&
xdo show -n $i || xdo hide -n $i)

View File

@ -0,0 +1,23 @@
#!/bin/sh
SOCK=$(fd kitty --base-directory /tmp -d 1)
KITTY=$(xdotool search --class kitty)
[ -e "/tmp/opacity-of-terminal" ] || echo 0.9 > /tmp/opacity-of-terminal
[ "$1" == "up" ] && \
NEXT=$(fish -N -c "math (cat /tmp/opacity-of-terminal) + 0.02") ||
NEXT=$(fish -N -c "math (cat /tmp/opacity-of-terminal) - 0.02")
[ "$1" == "up" ] && [ "$(cat /tmp/opacity-of-terminal)" == "1" ] && NEXT=1
[ "$1" == "down" ] && [ "$(cat /tmp/opacity-of-terminal)" == "0" ] && NEXT=0
echo "$NEXT" > /tmp/opacity-of-terminal
[ "$1" == "up" ] && \
notify-send -t 1000 "kitty" "Increased opacity to $NEXT" ||
notify-send -t 1000 "kitty" "Decreased opacity to $NEXT"
[ -n "$KITTY" ] && \
([ -e "/tmp/$SOCK" ] && \
(kitty @ --to "unix:/tmp/$SOCK" set-background-opacity "$NEXT"))

10
sxhkd/.config/sxhkd/kitty.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/sh
SOCK=$(fd kitty --base-directory /tmp -d 1)
KITTY=$(xdotool search --class kitty)
[ -n "$KITTY" ] && \
([ -e "/tmp/$SOCK" ] && \
(kitty @ --to "unix:/tmp/$SOCK" launch --type=tab && \
bspc node $KITTY -f)) \
|| kitty --single-instance --start-as maximized

View File

@ -0,0 +1,10 @@
#!/bin/sh
# New Start: A modern Arch workflow built with an emphasis on functionality.
# Copyright (C) 2017-2018 Donovan Glover
SCREENSHOT_DPI=$(xrdb -query | grep Xft.dpi | cut -f 2)
SCREENSHOT_SCALE=$(($SCREENSHOT_DPI / 96))
DATETIME=`date +%F_%H%M%S`
shotgun ~/$DATETIME.png
notify-send -t 2000 "Screenshot saved as" "$DATETIME.png"

View File

@ -0,0 +1,9 @@
#!/bin/sh -e
DATETIME=`date +%F_%H%M%S`
if [[ "$1" == "clipboard" ]]; then
shotgun $(hacksaw -f "-i %i -g %g") - | xclip -t 'image/png' -selection clipboard
else
shotgun $(hacksaw -f "-i %i -g %g") ~/$DATETIME.png
fi

151
sxhkd/.config/sxhkd/sxhkdrc Normal file
View File

@ -0,0 +1,151 @@
# New Start: A modern Arch workflow built with an emphasis on functionality.
# Copyright (C) 2017-2018 Donovan Glover
# Reload sxhkd / Quit bspwm
super + {_, alt} + Escape
{pkill -USR1 -x sxhkd && notify-send -t 2000 "sxhkd" "Reloaded config",bspc quit}
super + d
libinput-gestures-setup restart && notify-send -t 2000 "libinput-gestures" "Reloaded config"
# Dynamically adjust gaps of current desktop
super + {_, shift +} g
{ bspc config -d focused window_gap $(( $(bspc config -d focused window_gap) + 10 )), \
[ $(bspc config -d focused window_gap) -ge 20 ] && \
bspc config -d focused window_gap $(( $(bspc config -d focused window_gap) - 10 )) }
# Dynamically adjust borders of nodes on current desktop
super + {_, shift +} i
{ bspc config -d focused border_width $(( $(bspc config -d focused border_width) + 1 )), \
[ $(bspc config -d focused border_width) -ge 1 ] && \
bspc config -d focused border_width $(( $(bspc config -d focused border_width) - 1 )) }
# Take a screenshot
super + p
~/.config/sxhkd/screenshot.sh
# Screenshot a selection
super + {shift,alt} + p
~/.config/sxhkd/selection.sh {_,clipboard}
# Open a new terminal window
super + {_,shift} + Return
~/.config/sxhkd/kitty.sh
# Toggle a dropdown terminal
super + backslash
~/.config/sxhkd/dropdown.sh
# TODO: Replace old polybar keybind with status notification
# toggle tint2: bottom_padding depends on the panel_size you set in tint2rc
super + o
(xdotool search --class --onlyvisible "tint2" && \
(xdo hide -n "tint2" && bspc config bottom_padding 0)) || \
(xdo show -n "tint2" && bspc config bottom_padding 30)
# Change the wal color scheme
super + m
wal -o ~/.config/wal/done.sh --theme random_dark -e
super + z
wal -o ~/.config/wal/done.sh -i ~/bgs -e
super + r
wal -o ~/.config/wal/done.sh -R -e
alt + F1
~/.config/rofi/launch.sh
super + {equal,minus}
~/.config/sxhkd/kitty-next.sh {up,down}
# ====================
# ======= Node =======
# ====================
# Close the focused window
super + {_,shift} + q
bspc node -{c,k}
# Switch to / Swap with the node in the specified direction
super + {_,shift} + {h,j,k,l}
bspc node -{f,s} {west,south,north,east}
# FLAGS: Toggle between node flags
super + {x,y}
bspc node -g {sticky,private}
# FLAGS: Push and pop windows from the hidden stack
super + {_,shift} + b
bspc node {-g hidden,$(bspc query -N -n .hidden | tail -n 1) -g hidden=off}
# STATES: Toggle between node states
super + {t,w,f,space}
bspc node focused -t ~{tiled,pseudo_tiled,fullscreen,floating}
# PRESELECT: The direction to create a new node
super + ctrl + {h,j,k,l,space}
bspc node -p {west,south,north,east,cancel}
# RATIO: The size of a new node
super + ctrl + {1-9}
bspc node -o 0.{1-9}
# =======================
# ======= Desktop =======
# =======================
# Focus a certain desktop / Send a node to a certain desktop
super + {_,shift} + {1-9,0}
bspc {desktop -f,node -d} '^{1-9,10}'
# Move to the next desktop on the current monitor
super + {_, shift} + Tab
bspc desktop -f {next,prev}.local.occupied
# Easily go back and forth between the last desktop used
super + a
bspc desktop -f last
# Switch between tiled and monocle desktop layouts
super + c
bspc desktop -l next
# =======================
# ======= fn keys =======
# =======================
super + F1
pactl set-sink-mute @DEFAULT_SINK@ toggle && notify-send -t 2000 "Changed muted to" "$(pamixer --get-mute)"
super + F2
pamixer -d 5 && notify-send -t 2000 "Lowered volume to" "$(pamixer --get-volume)%"
super + F3
pamixer -i 5 && notify-send -t 2000 "Raised volume to" "$(pamixer --get-volume)%"
super + F4
pactl set-source-mute @DEFAULT_SOURCE@ toggle
super + F5
brightnessctl set 5%- && notify-send -t 2000 "Decreased brightness to" "$(brightnessctl get)"
super + F6
brightnessctl set +5% && notify-send -t 2000 "Increased brightness to" "$(brightnessctl get)"
super + F7
playerctl -p mpv previous && notify-send -t 2000 "Previous track" "$(playerctl -p mpv metadata xesam:title)"
super + F8
playerctl -p mpv next && notify-send -t 2000 "Next track" "$(playerctl -p mpv metadata xesam:title)"
super + F9
playerctl -p mpv play-pause && notify-send -t 2000 "mpv" "$(playerctl -p mpv status)"
super + F10
playerctl -p mpv position "5-" && notify-send -t 2000 "Minus 5 seconds" "$(playerctl -p mpv position)"
super + F11
playerctl -p mpv position "5+" && notify-send -t 2000 "Plus 5 seconds" "$(playerctl -p mpv position)"
# vim:ft=sxhkdrc

16
sxhkd/README.md Normal file
View File

@ -0,0 +1,16 @@
# sxhkd
[sxhkd][sxhkd] is a hotkey daemon for X11.
## Use Cases
sxhkd can be used to:
- Bind any key combination to whatever shell command you want
- Control windows in [bspwm](/bspwm) through `bspc`
You should not use sxhkd if:
- You use a desktop environment that sets keybinds for you
[sxhkd]: https://github.com/baskerville/sxhkd

View File

@ -0,0 +1,2 @@
TerminalEmulator=kitty
TerminalEmulatorDismissed=true

17
thunar/README.md Normal file
View File

@ -0,0 +1,17 @@
# thunar
[thunar][thunar] is a GTK file manager.
## Use Cases
thunar can be used to:
- Have a graphical interface for browsing files on a computer
- Not worry about the cascading effect of nautilus
- Have thumbnails update instantly, no refresh needed most of the time
You should not use thunar if:
- You want to search in your file browser (nautilus is better for this)
[thunar]: https://gitlab.xfce.org/xfce/thunar

View File

@ -0,0 +1,2 @@
[icon theme]
Inherits=phinger-cursors

16
xcursor/README.md Normal file
View File

@ -0,0 +1,16 @@
# xcursor
[xcursor][xcursor] is used to choose the X11 cursor theme.
## Use Cases
xcursor can be used to:
- Set the X cursor independent of the GUI toolkit being used
- Set the X cursor for programs that don't use a GUI toolkit
You should not use xcursor if:
- You are using a desktop environment that manages cursor settings for you
[xcursor]: https://wiki.archlinux.org/index.php/Cursor_themes

18
xinit/.xinitrc Normal file
View File

@ -0,0 +1,18 @@
# New Start: A modern Arch workflow built with an emphasis on functionality.
# Copyright (C) 2017-2018 Donovan Glover
# Source the .Xresources file
xrdb -merge ~/.Xresources
# Source the files in the xinitrc.d directory
if [ -d /etc/X11/xinit/xinitrc.d ] ; then
for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do
[ -x "$f" ] && . "$f"
done
unset f
fi
# Start the window manager
exec bspwm
# vim:ft=sh

15
xinit/README.md Normal file
View File

@ -0,0 +1,15 @@
# xinit
[xinit][xinit] is used to run the X display server with `startx`.
## Use Cases
xinit can be used to:
- Start X from a tty
You should not use xinit if:
- You use a display manager that bypasses the tty
[xinit]: https://wiki.archlinux.org/index.php/Xinit

22
xresources/.Xresources Normal file
View File

@ -0,0 +1,22 @@
! New Start: A modern Arch workflow built with an emphasis on functionality.
! Copyright (C) 2017-2018 Donovan Glover
! Make it easier to distinguish between letters (Required for dpi < 300)
Xft.hinting: true
! Make high resolution output look cleaner
Xft.antialias: true
! Only use hinting if the font provides it; do not attempt to autohint
Xft.autohint: false
! Reduce blur and other unwanted artifacts
Xft.lcdfilter: lcddefault
! Align the font fully to the grid (increases clarity)
Xft.hintstyle: hintfull
! Set the type of subpixel antialiasing to rgb
Xft.rgba: rgb
! vim:ft=xdefaults

17
xresources/README.md Normal file
View File

@ -0,0 +1,17 @@
# xresources
[xresources][xresources] is used to configure X settings outside of desktop environments.
## Use Cases
xresources can be used to:
- Set the font settings for low-level X applications
- Change the DPI of the X instance
You do not need xresources if:
- You are using a desktop environment that handles X or higher-level settings for you
- You are not using X
[xresources]: https://wiki.archlinux.org/index.php/X_resources

View File

@ -0,0 +1,23 @@
# [colors]
set default-bg "{background}"
set default-fg "{foreground}"
set statusbar-bg "{background}"
set statusbar-fg "{foreground}"
set inputbar-bg "{background}"
set inputbar-fg "{foreground}"
set notification-bg "{background}"
set notification-fg "{foreground}"
set notification-error-bg "{background}"
set notification-error-fg "{foreground}"
set notification-warning-bg "{background}"
set notification-warning-fg "{foreground}"
set highlight-color "{color3}"
set highlight-active-color "{color4}"
set completion-bg "{color3}"
set completion-fg "{color4}"
set completion-highlight-bg "{color3}"
set completion-highlight-fg "{color4}"
set recolor-lightcolor "{background}"
set recolor-darkcolor "{foreground}"
# vim:ft=conf

View File

@ -0,0 +1,15 @@
# New Start: A modern Arch workflow built with an emphasis on functionality.
# Copyright (C) 2017-2022 Donovan Glover
# Use the color scheme generated by wal (Use <C-r> to colorize the current document)
include "../../.cache/wal/zathura"
set font "Hack 12" # Use Hack as our font of choice
set guioptions "v" # Show a "progress bar" when scrolling up/down
set adjust-open "width" # Make documents take up all the available space by default
set statusbar-basename "true" # When using the status bar, show the basename only
set render-loading "false" # Do not show the "loading" text
set scroll-step "120" # Increase the scroll distance when using j/k
# vim:ft=conf

19
zathura/README.md Normal file
View File

@ -0,0 +1,19 @@
# zathura
[zathura][zathura] is a document viewer that displays PDFs and other files with no GUI.
## Use Cases
zathura can be used to:
- View .pdf and .djvu files
- View documents with the same color scheme as the rest of your setup
- Recolor a PDF file with a dark background and light text
- Strategically add documents to your rice screenshots
You should not use zathura if:
- You want to see page thumbnails
- You want to see and click on GUI components
[zathura]: https://github.com/pwmt/zathura