refactor: implement component-based architecture for enhanced maintainability
- Reorganize directory structure into core/, features/, and themes/ - Colocate application Nix logic, configs, scripts, and theme overrides - Implement 'Inversion of Control' for theming: apps now pull theme-specific layouts - Update flake.nix and shared library paths to match the new structure - Document the new Feature-Centric architecture in README.md
This commit is contained in:
11
core/home/config/nomarchy/default/alacritty/screensaver.toml
Normal file
11
core/home/config/nomarchy/default/alacritty/screensaver.toml
Normal file
@@ -0,0 +1,11 @@
|
||||
[colors.primary]
|
||||
background = "0x000000"
|
||||
|
||||
[colors.cursor]
|
||||
cursor = "0x000000"
|
||||
|
||||
[font]
|
||||
size = 18.0
|
||||
|
||||
[window]
|
||||
opacity = 1.0
|
||||
57
core/home/config/nomarchy/default/bash/aliases
Normal file
57
core/home/config/nomarchy/default/bash/aliases
Normal file
@@ -0,0 +1,57 @@
|
||||
# File system
|
||||
if command -v eza &> /dev/null; then
|
||||
alias ls='eza -lh --group-directories-first --icons=auto'
|
||||
alias lsa='ls -a'
|
||||
alias lt='eza --tree --level=2 --long --icons --git'
|
||||
alias lta='lt -a'
|
||||
fi
|
||||
|
||||
if [[ "$TERM" == "xterm-kitty" ]]; then
|
||||
alias ff="fzf --preview 'case \$(file --mime-type -b {}) in image/*) kitty icat --clear --transfer-mode=memory --stdin=no --place=\${FZF_PREVIEW_COLUMNS}x\${FZF_PREVIEW_LINES}@0x0 {} ;; *) bat --style=numbers --color=always {} ;; esac'"
|
||||
else
|
||||
alias ff="fzf --preview 'bat --style=numbers --color=always {}'"
|
||||
fi
|
||||
alias eff='$EDITOR "$(ff)"'
|
||||
sff() { if [ $# -eq 0 ]; then echo "Usage: sff <destination> (e.g. sff host:/tmp/)"; return 1; fi; local file; file=$(find . -type f -printf '%T@\t%p\n' | sort -rn | cut -f2- | ff) && [ -n "$file" ] && scp "$file" "$1"; }
|
||||
|
||||
if command -v zoxide &> /dev/null; then
|
||||
alias cd="zd"
|
||||
zd() {
|
||||
if (( $# == 0 )); then
|
||||
builtin cd ~ || return
|
||||
elif [[ -d $1 ]]; then
|
||||
builtin cd "$1" || return
|
||||
else
|
||||
if ! z "$@"; then
|
||||
echo "Error: Directory not found"
|
||||
return 1
|
||||
fi
|
||||
|
||||
printf "\U000F17A9 "
|
||||
pwd
|
||||
fi
|
||||
}
|
||||
fi
|
||||
|
||||
open() (
|
||||
xdg-open "$@" >/dev/null 2>&1 &
|
||||
)
|
||||
|
||||
# Directories
|
||||
alias ..='cd ..'
|
||||
alias ...='cd ../..'
|
||||
alias ....='cd ../../..'
|
||||
|
||||
# Tools
|
||||
alias c='opencode'
|
||||
alias cx='printf "\033[2J\033[3J\033[H" && claude --allow-dangerously-skip-permissions'
|
||||
alias d='docker'
|
||||
alias r='rails'
|
||||
alias t='tmux attach || tmux new -s Work'
|
||||
n() { if [ "$#" -eq 0 ]; then command nvim . ; else command nvim "$@"; fi; }
|
||||
|
||||
# Git
|
||||
alias g='git'
|
||||
alias gcm='git commit -m'
|
||||
alias gcam='git commit -a -m'
|
||||
alias gcad='git commit -a --amend'
|
||||
7
core/home/config/nomarchy/default/bash/envs
Normal file
7
core/home/config/nomarchy/default/bash/envs
Normal file
@@ -0,0 +1,7 @@
|
||||
# Editor used by CLI
|
||||
export SUDO_EDITOR="$EDITOR"
|
||||
export BAT_THEME=ansi
|
||||
|
||||
# Duplicated from .config/uwsm/env so SSH works too
|
||||
export NOMARCHY_PATH=$HOME/.local/share/nomarchy
|
||||
export PATH=$NOMARCHY_PATH/bin:$PATH:$HOME/.local/bin
|
||||
3
core/home/config/nomarchy/default/bash/fns/compression
Normal file
3
core/home/config/nomarchy/default/bash/fns/compression
Normal file
@@ -0,0 +1,3 @@
|
||||
# Compression
|
||||
compress() { tar -czf "${1%/}.tar.gz" "${1%/}"; }
|
||||
alias decompress="tar -xzf"
|
||||
59
core/home/config/nomarchy/default/bash/fns/drives
Normal file
59
core/home/config/nomarchy/default/bash/fns/drives
Normal file
@@ -0,0 +1,59 @@
|
||||
# Write iso file to sd card
|
||||
iso2sd() {
|
||||
if (( $# < 1 )); then
|
||||
echo "Usage: iso2sd <input_file> [output_device]"
|
||||
echo "Example: iso2sd ~/Downloads/ubuntu-25.04-desktop-amd64.iso /dev/sda"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local iso="$1"
|
||||
local drive="$2"
|
||||
|
||||
if [[ -z $drive ]]; then
|
||||
local available_sds=$(lsblk -dpno NAME | grep -E '/dev/sd')
|
||||
|
||||
if [[ -z $available_sds ]]; then
|
||||
echo "No SD drives found and no drive specified"
|
||||
return 1
|
||||
fi
|
||||
|
||||
drive=$(nomarchy-drive-select "$available_sds")
|
||||
|
||||
if [[ -z $drive ]]; then
|
||||
echo "No drive selected"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
sudo dd bs=4M status=progress oflag=sync if="$iso" of="$drive"
|
||||
sudo eject "$drive"
|
||||
}
|
||||
|
||||
# Format an entire drive for a single partition using exFAT
|
||||
format-drive() {
|
||||
if (( $# != 2 )); then
|
||||
echo "Usage: format-drive <device> <name>"
|
||||
echo "Example: format-drive /dev/sda 'My Stuff'"
|
||||
echo -e "\nAvailable drives:"
|
||||
lsblk -d -o NAME -n | awk '{print "/dev/"$1}'
|
||||
else
|
||||
echo "WARNING: This will completely erase all data on $1 and label it '$2'."
|
||||
read -rp "Are you sure you want to continue? (y/N): " confirm
|
||||
|
||||
if [[ $confirm =~ ^[Yy]$ ]]; then
|
||||
sudo wipefs -a "$1"
|
||||
sudo dd if=/dev/zero of="$1" bs=1M count=100 status=progress
|
||||
sudo parted -s "$1" mklabel gpt
|
||||
sudo parted -s "$1" mkpart primary 1MiB 100%
|
||||
sudo parted -s "$1" set 1 msftdata on
|
||||
|
||||
partition="$([[ $1 == *"nvme"* ]] && echo "${1}p1" || echo "${1}1")"
|
||||
sudo partprobe "$1" || true
|
||||
sudo udevadm settle || true
|
||||
|
||||
sudo mkfs.exfat -n "$2" "$partition"
|
||||
|
||||
echo "Drive $1 formatted as exFAT and labeled '$2'."
|
||||
fi
|
||||
fi
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
# SSH Port Forwarding Functions
|
||||
fip() {
|
||||
(( $# < 2 )) && echo "Usage: fip <host> <port1> [port2] ..." && return 1
|
||||
local host="$1"
|
||||
shift
|
||||
for port in "$@"; do
|
||||
ssh -f -N -L "$port:localhost:$port" "$host" && echo "Forwarding localhost:$port -> $host:$port"
|
||||
done
|
||||
}
|
||||
|
||||
dip() {
|
||||
(( $# == 0 )) && echo "Usage: dip <port1> [port2] ..." && return 1
|
||||
for port in "$@"; do
|
||||
pkill -f "ssh.*-L $port:localhost:$port" && echo "Stopped forwarding port $port" || echo "No forwarding on port $port"
|
||||
done
|
||||
}
|
||||
|
||||
lip() {
|
||||
pgrep -af "ssh.*-L [0-9]+:localhost:[0-9]+" || echo "No active forwards"
|
||||
}
|
||||
97
core/home/config/nomarchy/default/bash/fns/tmux
Normal file
97
core/home/config/nomarchy/default/bash/fns/tmux
Normal file
@@ -0,0 +1,97 @@
|
||||
# Create a Tmux Dev Layout with editor, ai, and terminal
|
||||
# Usage: tdl <c|cx|codex|other_ai> [<second_ai>]
|
||||
tdl() {
|
||||
[[ -z $1 ]] && { echo "Usage: tdl <c|cx|codex|other_ai> [<second_ai>]"; return 1; }
|
||||
[[ -z $TMUX ]] && { echo "You must start tmux to use tdl."; return 1; }
|
||||
|
||||
local current_dir="${PWD}"
|
||||
local editor_pane ai_pane ai2_pane
|
||||
local ai="$1"
|
||||
local ai2="$2"
|
||||
|
||||
# Use TMUX_PANE for the pane we're running in (stable even if active window changes)
|
||||
editor_pane="$TMUX_PANE"
|
||||
|
||||
# Name the current window after the base directory name
|
||||
tmux rename-window -t "$editor_pane" "$(basename "$current_dir")"
|
||||
|
||||
# Split window vertically - top 85%, bottom 15% (target editor pane explicitly)
|
||||
tmux split-window -v -p 15 -t "$editor_pane" -c "$current_dir"
|
||||
|
||||
# Split editor pane horizontally - AI on right 30% (capture new pane ID directly)
|
||||
ai_pane=$(tmux split-window -h -p 30 -t "$editor_pane" -c "$current_dir" -P -F '#{pane_id}')
|
||||
|
||||
# If second AI provided, split the AI pane vertically
|
||||
if [[ -n $ai2 ]]; then
|
||||
ai2_pane=$(tmux split-window -v -t "$ai_pane" -c "$current_dir" -P -F '#{pane_id}')
|
||||
tmux send-keys -t "$ai2_pane" "$ai2" C-m
|
||||
fi
|
||||
|
||||
# Run ai in the right pane
|
||||
tmux send-keys -t "$ai_pane" "$ai" C-m
|
||||
|
||||
# Run nvim in the left pane
|
||||
tmux send-keys -t "$editor_pane" "$EDITOR ." C-m
|
||||
|
||||
# Select the nvim pane for focus
|
||||
tmux select-pane -t "$editor_pane"
|
||||
}
|
||||
|
||||
# Create multiple tdl windows with one per subdirectory in the current directory
|
||||
# Usage: tdlm <c|cx|codex|other_ai> [<second_ai>]
|
||||
tdlm() {
|
||||
[[ -z $1 ]] && { echo "Usage: tdlm <c|cx|codex|other_ai> [<second_ai>]"; return 1; }
|
||||
[[ -z $TMUX ]] && { echo "You must start tmux to use tdlm."; return 1; }
|
||||
|
||||
local ai="$1"
|
||||
local ai2="$2"
|
||||
local base_dir="$PWD"
|
||||
local first=true
|
||||
|
||||
# Rename the session to the current directory name (replace dots/colons which tmux disallows)
|
||||
tmux rename-session "$(basename "$base_dir" | tr '.:' '--')"
|
||||
|
||||
for dir in "$base_dir"/*/; do
|
||||
[[ -d $dir ]] || continue
|
||||
local dirpath="${dir%/}"
|
||||
|
||||
if $first; then
|
||||
# Reuse the current window for the first project
|
||||
tmux send-keys -t "$TMUX_PANE" "cd '$dirpath' && tdl $ai $ai2" C-m
|
||||
first=false
|
||||
else
|
||||
local pane_id=$(tmux new-window -c "$dirpath" -P -F '#{pane_id}')
|
||||
tmux send-keys -t "$pane_id" "tdl $ai $ai2" C-m
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Create a multi-pane swarm layout with the same command started in each pane (great for AI)
|
||||
# Usage: tsl <pane_count> <command>
|
||||
tsl() {
|
||||
[[ -z $1 || -z $2 ]] && { echo "Usage: tsl <pane_count> <command>"; return 1; }
|
||||
[[ -z $TMUX ]] && { echo "You must start tmux to use tsl."; return 1; }
|
||||
|
||||
local count="$1"
|
||||
local cmd="$2"
|
||||
local current_dir="${PWD}"
|
||||
local -a panes
|
||||
|
||||
tmux rename-window -t "$TMUX_PANE" "$(basename "$current_dir")"
|
||||
|
||||
panes+=("$TMUX_PANE")
|
||||
|
||||
while (( ${#panes[@]} < count )); do
|
||||
local new_pane
|
||||
local split_target="${panes[-1]}"
|
||||
new_pane=$(tmux split-window -h -t "$split_target" -c "$current_dir" -P -F '#{pane_id}')
|
||||
panes+=("$new_pane")
|
||||
tmux select-layout -t "${panes[0]}" tiled
|
||||
done
|
||||
|
||||
for pane in "${panes[@]}"; do
|
||||
tmux send-keys -t "$pane" "$cmd" C-m
|
||||
done
|
||||
|
||||
tmux select-pane -t "${panes[0]}"
|
||||
}
|
||||
53
core/home/config/nomarchy/default/bash/fns/transcoding
Normal file
53
core/home/config/nomarchy/default/bash/fns/transcoding
Normal file
@@ -0,0 +1,53 @@
|
||||
# Transcode a video to a good-balance 1080p that's great for sharing online
|
||||
transcode-video-1080p() {
|
||||
ffmpeg -i "$1" -vf scale=1920:1080 -c:v libx264 -preset fast -crf 23 -c:a copy "${1%.*}-1080p.mp4"
|
||||
}
|
||||
|
||||
# Transcode a video to a good-balance 4K that's great for sharing online
|
||||
transcode-video-4K() {
|
||||
ffmpeg -i "$1" -c:v libx265 -preset slow -crf 24 -c:a aac -b:a 192k "${1%.*}-optimized.mp4"
|
||||
}
|
||||
|
||||
# Transcode any image to JPG image that's great for shrinking wallpapers
|
||||
img2jpg() {
|
||||
img="$1"
|
||||
shift
|
||||
|
||||
magick "$img" "$@" -quality 85 -strip "${img%.*}-converted.jpg"
|
||||
}
|
||||
|
||||
# Transcode any image to a small JPG (max 1080px wide)
|
||||
img2jpg-small() {
|
||||
img="$1"
|
||||
shift
|
||||
|
||||
magick "$img" "$@" -resize 1080x\> -quality 85 -strip "${img%.*}-small.jpg"
|
||||
}
|
||||
|
||||
# Transcode any image to a 4K JPG (max 2160px wide)
|
||||
img2jpg-medium() {
|
||||
img="$1"
|
||||
shift
|
||||
|
||||
magick "$img" "$@" -resize 2160x\> -quality 85 -strip "${img%.*}-medium.jpg"
|
||||
}
|
||||
|
||||
# Transcode any image to a 6K JPG (max 3160px wide)
|
||||
img2jpg-large() {
|
||||
img="$1"
|
||||
shift
|
||||
|
||||
magick "$img" "$@" -resize 3160x\> -quality 85 -strip "${img%.*}-large.jpg"
|
||||
}
|
||||
|
||||
# Transcode any image to compressed-but-lossless PNG
|
||||
img2png() {
|
||||
img="$1"
|
||||
shift
|
||||
|
||||
magick "$img" "$@" -strip -define png:compression-filter=5 \
|
||||
-define png:compression-level=9 \
|
||||
-define png:compression-strategy=1 \
|
||||
-define png:exclude-chunk=all \
|
||||
"${img%.*}-optimized.png"
|
||||
}
|
||||
36
core/home/config/nomarchy/default/bash/fns/worktrees
Normal file
36
core/home/config/nomarchy/default/bash/fns/worktrees
Normal file
@@ -0,0 +1,36 @@
|
||||
# Create a new worktree and branch from within current git directory.
|
||||
ga() {
|
||||
if [[ -z "$1" ]]; then
|
||||
echo "Usage: ga [branch name]"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local branch="$1"
|
||||
local base="$(basename "$PWD")"
|
||||
local wt_path="../${base}--${branch}"
|
||||
|
||||
git worktree add -b "$branch" "$wt_path"
|
||||
mise trust "$wt_path"
|
||||
cd "$wt_path"
|
||||
}
|
||||
|
||||
# Remove worktree and branch from within active worktree directory.
|
||||
gd() {
|
||||
if gum confirm "Remove worktree and branch?"; then
|
||||
local cwd base branch root worktree
|
||||
|
||||
cwd="$(pwd)"
|
||||
worktree="$(basename "$cwd")"
|
||||
|
||||
# split on first `--`
|
||||
root="${worktree%%--*}"
|
||||
branch="${worktree#*--}"
|
||||
|
||||
# Protect against accidentally nuking a non-worktree directory
|
||||
if [[ "$root" != "$worktree" ]]; then
|
||||
cd "../$root"
|
||||
git worktree remove "$cwd" --force || return 1
|
||||
git branch -D "$branch"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
1
core/home/config/nomarchy/default/bash/functions
Normal file
1
core/home/config/nomarchy/default/bash/functions
Normal file
@@ -0,0 +1 @@
|
||||
for f in $HOME/.config/nomarchy/default/bash/fns/*; do source "$f"; done
|
||||
24
core/home/config/nomarchy/default/bash/init
Normal file
24
core/home/config/nomarchy/default/bash/init
Normal file
@@ -0,0 +1,24 @@
|
||||
if command -v mise &> /dev/null; then
|
||||
eval "$(mise activate bash)"
|
||||
fi
|
||||
|
||||
if command -v starship &> /dev/null; then
|
||||
eval "$(starship init bash)"
|
||||
fi
|
||||
|
||||
if command -v zoxide &> /dev/null; then
|
||||
eval "$(zoxide init bash)"
|
||||
fi
|
||||
|
||||
if command -v try &> /dev/null; then
|
||||
eval "$(SHELL=/bin/bash command try init ~/Work/tries)"
|
||||
fi
|
||||
|
||||
if command -v fzf &> /dev/null; then
|
||||
if [[ -f /usr/share/fzf/completion.bash ]]; then
|
||||
source /usr/share/fzf/completion.bash
|
||||
fi
|
||||
if [[ -f /usr/share/fzf/key-bindings.bash ]]; then
|
||||
source /usr/share/fzf/key-bindings.bash
|
||||
fi
|
||||
fi
|
||||
47
core/home/config/nomarchy/default/bash/inputrc
Normal file
47
core/home/config/nomarchy/default/bash/inputrc
Normal file
@@ -0,0 +1,47 @@
|
||||
set meta-flag on
|
||||
set input-meta on
|
||||
set output-meta on
|
||||
set convert-meta off
|
||||
set completion-ignore-case on
|
||||
set completion-prefix-display-length 2
|
||||
set show-all-if-ambiguous on
|
||||
set show-all-if-unmodified on
|
||||
|
||||
# Arrow keys match what you've typed so far against your command history
|
||||
"\e[A": history-search-backward
|
||||
"\e[B": history-search-forward
|
||||
"\e[C": forward-char
|
||||
"\e[D": backward-char
|
||||
|
||||
# Immediately add a trailing slash when autocompleting symlinks to directories
|
||||
set mark-symlinked-directories on
|
||||
|
||||
# Do not autocomplete hidden files unless the pattern explicitly begins with a dot
|
||||
set match-hidden-files off
|
||||
|
||||
# Show all autocomplete results at once
|
||||
set page-completions off
|
||||
|
||||
# If there are more than 200 possible completions for a word, ask to show them all
|
||||
set completion-query-items 200
|
||||
|
||||
# Show extra file information when completing, like `ls -F` does
|
||||
set visible-stats on
|
||||
|
||||
# Be more intelligent when autocompleting by also looking at the text after
|
||||
# the cursor. For example, when the current line is "cd ~/src/mozil", and
|
||||
# the cursor is on the "z", pressing Tab will not autocomplete it to "cd
|
||||
# ~/src/mozillail", but to "cd ~/src/mozilla". (This is supported by the
|
||||
# Readline used by Bash 4.)
|
||||
set skip-completed-text on
|
||||
|
||||
# Coloring for Bash 4 tab completions.
|
||||
set colored-stats on
|
||||
|
||||
# Cycle forward and backward through completion candidates (tab/shift+tab)
|
||||
# (completion listing and display behavior configured above)
|
||||
TAB: menu-complete
|
||||
"\e[Z": menu-complete-backward
|
||||
|
||||
# On first Tab, complete the common prefix before cycling candidates
|
||||
set menu-complete-display-prefix on
|
||||
6
core/home/config/nomarchy/default/bash/rc
Normal file
6
core/home/config/nomarchy/default/bash/rc
Normal file
@@ -0,0 +1,6 @@
|
||||
source ~/.config/nomarchy/default/bash/envs
|
||||
source ~/.config/nomarchy/default/bash/shell
|
||||
source ~/.config/nomarchy/default/bash/aliases
|
||||
source ~/.config/nomarchy/default/bash/functions
|
||||
source ~/.config/nomarchy/default/bash/init
|
||||
[[ $- == *i* ]] && bind -f ~/.config/nomarchy/default/bash/inputrc
|
||||
13
core/home/config/nomarchy/default/bash/shell
Normal file
13
core/home/config/nomarchy/default/bash/shell
Normal file
@@ -0,0 +1,13 @@
|
||||
# History control
|
||||
shopt -s histappend
|
||||
HISTCONTROL=ignoreboth
|
||||
HISTSIZE=32768
|
||||
HISTFILESIZE="${HISTSIZE}"
|
||||
|
||||
# Autocompletion
|
||||
if [[ ! -v BASH_COMPLETION_VERSINFO && -f /usr/share/bash-completion/bash_completion ]]; then
|
||||
source /usr/share/bash-completion/bash_completion
|
||||
fi
|
||||
|
||||
# Ensure command hashing is off for mise
|
||||
set +h
|
||||
11
core/home/config/nomarchy/default/bashrc
Normal file
11
core/home/config/nomarchy/default/bashrc
Normal file
@@ -0,0 +1,11 @@
|
||||
# If not running interactively, don't do anything (leave this at the top of this file)
|
||||
[[ $- != *i* ]] && return
|
||||
|
||||
# All the default Nomarchy aliases and functions
|
||||
# (don't mess with these directly, just overwrite them here!)
|
||||
source ~/.config/nomarchy/default/bash/rc
|
||||
|
||||
# Add your own exports, aliases, and functions here.
|
||||
#
|
||||
# Make an alias for invoking commands you use constantly
|
||||
# alias p='python'
|
||||
@@ -0,0 +1,21 @@
|
||||
chrome.commands.onCommand.addListener((command) => {
|
||||
if (command === 'copy-url') {
|
||||
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
|
||||
const currentTab = tabs[0];
|
||||
|
||||
chrome.scripting.executeScript({
|
||||
target: { tabId: currentTab.id },
|
||||
func: () => {
|
||||
navigator.clipboard.writeText(window.location.href);
|
||||
}
|
||||
}).then(() => {
|
||||
chrome.notifications.create({
|
||||
type: 'basic',
|
||||
iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==',
|
||||
title: ' URL copied to clipboard',
|
||||
message: ''
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1 @@
|
||||
../../../../icon.png
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"manifest_version": 3,
|
||||
"name": "Copy URL",
|
||||
"version": "1.0",
|
||||
"description": "Copy current URL to clipboard, this extension is installed by Nomarchy",
|
||||
"permissions": ["activeTab", "scripting", "notifications"],
|
||||
"icons": {
|
||||
"16": "icon.png",
|
||||
"48": "icon.png",
|
||||
"128": "icon.png"
|
||||
},
|
||||
"commands": {
|
||||
"copy-url": {
|
||||
"suggested_key": {"default": "Alt+Shift+L"},
|
||||
"description": "Copy URL"
|
||||
}
|
||||
},
|
||||
"background": {"service_worker": "background.js"}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
Name = "nomarchyBackgroundSelector"
|
||||
NamePretty = "Nomarchy Background Selector"
|
||||
Cache = false
|
||||
HideFromProviderlist = true
|
||||
SearchName = true
|
||||
|
||||
local function ShellEscape(s)
|
||||
return "'" .. s:gsub("'", "'\\''") .. "'"
|
||||
end
|
||||
|
||||
function FormatName(filename)
|
||||
-- Remove leading number and dash
|
||||
local name = filename:gsub("^%d+", ""):gsub("^%-", "")
|
||||
-- Remove extension
|
||||
name = name:gsub("%.[^%.]+$", "")
|
||||
-- Replace dashes with spaces
|
||||
name = name:gsub("-", " ")
|
||||
-- Capitalize each word
|
||||
name = name:gsub("%S+", function(word)
|
||||
return word:sub(1, 1):upper() .. word:sub(2):lower()
|
||||
end)
|
||||
return name
|
||||
end
|
||||
|
||||
function GetEntries()
|
||||
local entries = {}
|
||||
local home = os.getenv("HOME")
|
||||
|
||||
-- Read current theme name
|
||||
local theme_name_file = io.open(home .. "/.config/nomarchy/current/theme.name", "r")
|
||||
local theme_name = theme_name_file and theme_name_file:read("*l") or nil
|
||||
if theme_name_file then
|
||||
theme_name_file:close()
|
||||
end
|
||||
|
||||
-- Directories to search
|
||||
local dirs = {
|
||||
home .. "/.config/nomarchy/current/theme/backgrounds",
|
||||
}
|
||||
if theme_name then
|
||||
table.insert(dirs, home .. "/.config/nomarchy/backgrounds/" .. theme_name)
|
||||
end
|
||||
|
||||
-- Track added files to avoid duplicates
|
||||
local seen = {}
|
||||
|
||||
for _, wallpaper_dir in ipairs(dirs) do
|
||||
local handle = io.popen(
|
||||
"find " .. ShellEscape(wallpaper_dir)
|
||||
.. " -maxdepth 1 -type f \\( -name '*.jpg' -o -name '*.jpeg' -o -name '*.png' -o -name '*.gif' -o -name '*.bmp' -o -name '*.webp' \\) 2>/dev/null | sort"
|
||||
)
|
||||
if handle then
|
||||
for background in handle:lines() do
|
||||
local filename = background:match("([^/]+)$")
|
||||
if filename and not seen[filename] then
|
||||
seen[filename] = true
|
||||
table.insert(entries, {
|
||||
Text = FormatName(filename),
|
||||
Value = background,
|
||||
Actions = {
|
||||
activate = "nomarchy-theme-bg-set " .. ShellEscape(background),
|
||||
},
|
||||
Preview = background,
|
||||
PreviewType = "file",
|
||||
})
|
||||
end
|
||||
end
|
||||
handle:close()
|
||||
end
|
||||
end
|
||||
|
||||
return entries
|
||||
end
|
||||
@@ -0,0 +1,96 @@
|
||||
--
|
||||
-- Dynamic Nomarchy Theme Menu for Elephant/Walker
|
||||
--
|
||||
Name = "nomarchythemes"
|
||||
NamePretty = "Nomarchy Themes"
|
||||
HideFromProviderlist = true
|
||||
|
||||
-- Check if file exists using Lua (no subprocess)
|
||||
local function file_exists(path)
|
||||
local f = io.open(path, "r")
|
||||
if f then
|
||||
f:close()
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- Get first matching file from directory using ls (single call for fallback)
|
||||
local function first_image_in_dir(dir)
|
||||
local handle = io.popen("ls -1 '" .. dir .. "' 2>/dev/null | head -n 1")
|
||||
if handle then
|
||||
local file = handle:read("*l")
|
||||
handle:close()
|
||||
if file and file ~= "" then
|
||||
return dir .. "/" .. file
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
-- The main function elephant will call
|
||||
function GetEntries()
|
||||
local entries = {}
|
||||
local user_theme_dir = os.getenv("HOME") .. "/.config/nomarchy/themes"
|
||||
local nomarchy_path = os.getenv("NOMARCHY_PATH") or ""
|
||||
local default_theme_dir = nomarchy_path .. "/themes"
|
||||
|
||||
local seen_themes = {}
|
||||
|
||||
-- Helper function to process themes from a directory
|
||||
local function process_themes_from_dir(theme_dir)
|
||||
-- Single find call to get all theme directories
|
||||
local handle = io.popen("find -L '" .. theme_dir .. "' -mindepth 1 -maxdepth 1 -type d 2>/dev/null")
|
||||
if not handle then
|
||||
return
|
||||
end
|
||||
|
||||
for theme_path in handle:lines() do
|
||||
local theme_name = theme_path:match(".*/(.+)$")
|
||||
|
||||
if theme_name and not seen_themes[theme_name] then
|
||||
seen_themes[theme_name] = true
|
||||
|
||||
-- Check for preview images directly (no subprocess)
|
||||
local preview_path = nil
|
||||
local preview_png = theme_path .. "/preview.png"
|
||||
local preview_jpg = theme_path .. "/preview.jpg"
|
||||
|
||||
if file_exists(preview_png) then
|
||||
preview_path = preview_png
|
||||
elseif file_exists(preview_jpg) then
|
||||
preview_path = preview_jpg
|
||||
else
|
||||
-- Fallback: get first image from backgrounds (one ls call)
|
||||
preview_path = first_image_in_dir(theme_path .. "/backgrounds")
|
||||
end
|
||||
|
||||
if preview_path and preview_path ~= "" then
|
||||
local display_name = theme_name:gsub("_", " "):gsub("%-", " ")
|
||||
display_name = display_name:gsub("(%a)([%w_']*)", function(first, rest)
|
||||
return first:upper() .. rest:lower()
|
||||
end)
|
||||
display_name = display_name .. " "
|
||||
|
||||
table.insert(entries, {
|
||||
Text = display_name,
|
||||
Preview = preview_path,
|
||||
PreviewType = "file",
|
||||
Actions = {
|
||||
activate = "nomarchy-theme-set " .. theme_name,
|
||||
},
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
handle:close()
|
||||
end
|
||||
|
||||
-- Process user themes first (they take precedence)
|
||||
process_themes_from_dir(user_theme_dir)
|
||||
-- Then process default themes (only if not already seen)
|
||||
process_themes_from_dir(default_theme_dir)
|
||||
|
||||
return entries
|
||||
end
|
||||
3
core/home/config/nomarchy/default/ghostty/screensaver
Normal file
3
core/home/config/nomarchy/default/ghostty/screensaver
Normal file
@@ -0,0 +1,3 @@
|
||||
window-padding-x = 0
|
||||
window-padding-y = 0
|
||||
window-padding-color = "extend-always"
|
||||
7
core/home/config/nomarchy/default/gpg/dirmngr.conf
Normal file
7
core/home/config/nomarchy/default/gpg/dirmngr.conf
Normal file
@@ -0,0 +1,7 @@
|
||||
keyserver hkps://keyserver.ubuntu.com
|
||||
keyserver hkps://pgp.surfnet.nl
|
||||
keyserver hkps://keys.mailvelope.com
|
||||
keyserver hkps://keyring.debian.org
|
||||
keyserver hkps://pgp.mit.edu
|
||||
|
||||
connect-quick-timeout 4
|
||||
9
core/home/config/nomarchy/default/hypr/apps.conf
Normal file
9
core/home/config/nomarchy/default/hypr/apps.conf
Normal file
@@ -0,0 +1,9 @@
|
||||
# App-specific tweaks
|
||||
source = ~/.config/nomarchy/default/hypr/apps/browser.conf
|
||||
source = ~/.config/nomarchy/default/hypr/apps/hyprshot.conf
|
||||
source = ~/.config/nomarchy/default/hypr/apps/localsend.conf
|
||||
source = ~/.config/nomarchy/default/hypr/apps/retroarch.conf
|
||||
source = ~/.config/nomarchy/default/hypr/apps/telegram.conf
|
||||
source = ~/.config/nomarchy/default/hypr/apps/terminals.conf
|
||||
source = ~/.config/nomarchy/default/hypr/apps/walker.conf
|
||||
source = ~/.config/nomarchy/default/hypr/apps/webcam-overlay.conf
|
||||
@@ -0,0 +1,2 @@
|
||||
windowrulev2 = noscreenshare, class:^(1[p|P]assword)$
|
||||
windowrulev2 = tag +floating-window, class:^(1[p|P]assword)$
|
||||
@@ -0,0 +1,6 @@
|
||||
windowrulev2 = noscreenshare, class:^(Bitwarden)$
|
||||
windowrulev2 = tag +floating-window, class:^(Bitwarden)$
|
||||
|
||||
# Bitwarden Chrome Extension
|
||||
windowrulev2 = noscreenshare, class:chrome-nngceckbapebfimnlniiiahkandclblb-Default
|
||||
windowrulev2 = tag +floating-window, class:chrome-nngceckbapebfimnlniiiahkandclblb-Default
|
||||
16
core/home/config/nomarchy/default/hypr/apps/browser.conf
Normal file
16
core/home/config/nomarchy/default/hypr/apps/browser.conf
Normal file
@@ -0,0 +1,16 @@
|
||||
# Browser types
|
||||
windowrulev2 = tag +chromium-based-browser, class:((google-)?[cC]hrom(e|ium)|[bB]rave-browser|[mM]icrosoft-edge|Vivaldi-stable|helium)
|
||||
windowrulev2 = tag +firefox-based-browser, class:([fF]irefox|zen|librewolf)
|
||||
windowrulev2 = tag -default-opacity, tag:chromium-based-browser
|
||||
windowrulev2 = tag -default-opacity, tag:firefox-based-browser
|
||||
|
||||
# Video apps: remove chromium browser tag so they don't get opacity applied
|
||||
windowrulev2 = tag -chromium-based-browser, class:(chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default)
|
||||
windowrulev2 = tag -default-opacity, class:(chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default)
|
||||
|
||||
# Force chromium-based browsers into a tile to deal with --app bug
|
||||
windowrulev2 = tile, tag:chromium-based-browser
|
||||
|
||||
# Only a subtle opacity change, but not for video sites
|
||||
windowrulev2 = opacity 1.0 0.97, tag:chromium-based-browser
|
||||
windowrulev2 = opacity 1.0 0.97, tag:firefox-based-browser
|
||||
@@ -0,0 +1,2 @@
|
||||
# Focus floating DaVinci Resolve dialog windows
|
||||
windowrulev2 = stayfocused, class:.*[Rr]esolve.*, float:1
|
||||
5
core/home/config/nomarchy/default/hypr/apps/geforce.conf
Normal file
5
core/home/config/nomarchy/default/hypr/apps/geforce.conf
Normal file
@@ -0,0 +1,5 @@
|
||||
windowrule {
|
||||
name = geforce
|
||||
class:= GeForceNOW
|
||||
idle_inhibit = fullscreen
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
# Remove 1px border around hyprshot screenshots
|
||||
layerrule = noanim, namespace:selection
|
||||
@@ -0,0 +1,4 @@
|
||||
# Float LocalSend and fzf file picker
|
||||
windowrulev2 = float, class:(Share|localsend)
|
||||
windowrulev2 = center, class:(Share|localsend)
|
||||
windowrulev2 = size 1100 700, class:localsend
|
||||
@@ -0,0 +1,6 @@
|
||||
windowrule {
|
||||
name = moonlight
|
||||
class:= com.moonlight_stream.Moonlight
|
||||
fullscreen = 1
|
||||
idle_inhibit = fullscreen
|
||||
}
|
||||
10
core/home/config/nomarchy/default/hypr/apps/pip.conf
Normal file
10
core/home/config/nomarchy/default/hypr/apps/pip.conf
Normal file
@@ -0,0 +1,10 @@
|
||||
# Picture-in-picture overlays
|
||||
windowrulev2 = tag +pip, title:(Picture.?in.?[Pp]icture)
|
||||
windowrulev2 = tag -default-opacity, tag:pip
|
||||
windowrulev2 = float, tag:pip
|
||||
windowrulev2 = pin, tag:pip
|
||||
windowrulev2 = size 600 338, tag:pip
|
||||
windowrulev2 = keep_aspect_ratio on, tag:pip
|
||||
windowrulev2 = border_size 0, tag:pip
|
||||
windowrulev2 = opacity 1 1, tag:pip
|
||||
windowrulev2 = move (monitor_w-window_w-40) (monitor_h*0.04), tag:pip
|
||||
2
core/home/config/nomarchy/default/hypr/apps/qemu.conf
Normal file
2
core/home/config/nomarchy/default/hypr/apps/qemu.conf
Normal file
@@ -0,0 +1,2 @@
|
||||
windowrulev2 = tag -default-opacity, class:qemu
|
||||
windowrulev2 = opacity 1 1, class:qemu
|
||||
@@ -0,0 +1,4 @@
|
||||
windowrulev2 = fullscreen, class:com.libretro.RetroArch
|
||||
windowrulev2 = tag -default-opacity, class:com.libretro.RetroArch
|
||||
windowrulev2 = opacity 1 1, class:com.libretro.RetroArch
|
||||
windowrulev2 = idleinhibit, fullscreen, class:com.libretro.RetroArch
|
||||
8
core/home/config/nomarchy/default/hypr/apps/steam.conf
Normal file
8
core/home/config/nomarchy/default/hypr/apps/steam.conf
Normal file
@@ -0,0 +1,8 @@
|
||||
# Float Steam
|
||||
windowrulev2 = float, class:steam
|
||||
windowrulev2 = center, class:steam, title:Steam
|
||||
windowrulev2 = tag -default-opacity, class:steam.*
|
||||
windowrulev2 = opacity 1 1, class:steam.*
|
||||
windowrulev2 = size 1100 700, class:steam, title:Steam
|
||||
windowrulev2 = size 460 800, class:steam, title:Friends List
|
||||
windowrulev2 = idleinhibit, fullscreen, class:steam
|
||||
23
core/home/config/nomarchy/default/hypr/apps/system.conf
Normal file
23
core/home/config/nomarchy/default/hypr/apps/system.conf
Normal file
@@ -0,0 +1,23 @@
|
||||
# Floating windows
|
||||
windowrulev2 = float, tag:floating-window
|
||||
windowrulev2 = center, tag:floating-window
|
||||
windowrulev2 = size 875 600, tag:floating-window
|
||||
|
||||
windowrulev2 = tag +floating-window, class:(org.nomarchy.bluetui|org.nomarchy.impala|org.nomarchy.wiremix|org.nomarchy.btop|org.nomarchy.terminal|org.nomarchy.bash|org.gnome.NautilusPreviewer|org.gnome.Evince|com.gabm.satty|Nomarchy|About|TUI.float|imv|mpv)
|
||||
windowrulev2 = tag +floating-window, class:(xdg-desktop-portal-gtk|sublime_text|DesktopEditors|org.gnome.Nautilus), title:^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*)
|
||||
windowrulev2 = float, class:org.gnome.Calculator
|
||||
|
||||
# Fullscreen screensaver
|
||||
windowrulev2 = fullscreen, class:org.nomarchy.screensaver
|
||||
windowrulev2 = float, class:org.nomarchy.screensaver
|
||||
windowrulev2 = animation slide, class:org.nomarchy.screensaver
|
||||
|
||||
# No transparency on media windows
|
||||
windowrulev2 = tag -default-opacity, class:^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$
|
||||
windowrulev2 = opacity 1 1, class:^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$
|
||||
|
||||
# Popped window rounding
|
||||
windowrulev2 = rounding 8, tag:pop
|
||||
|
||||
# Prevent idle while open
|
||||
windowrulev2 = idleinhibit, always, tag:noidle
|
||||
@@ -0,0 +1,2 @@
|
||||
# Prevent Telegram from stealing focus on new messages
|
||||
windowrulev2 = focusonactivate off, class:org.telegram.desktop
|
||||
@@ -0,0 +1,4 @@
|
||||
# Define terminal tag to style them uniformly
|
||||
windowrulev2 = tag +terminal, class:(Alacritty|kitty|com.mitchellh.ghostty)
|
||||
windowrulev2 = tag -default-opacity, tag:terminal
|
||||
windowrulev2 = opacity 0.97 0.9, tag:terminal
|
||||
2
core/home/config/nomarchy/default/hypr/apps/walker.conf
Normal file
2
core/home/config/nomarchy/default/hypr/apps/walker.conf
Normal file
@@ -0,0 +1,2 @@
|
||||
# Application-specific animation
|
||||
layerrule = noanim, namespace:walker
|
||||
@@ -0,0 +1,6 @@
|
||||
# Webcam overlay for screen recording
|
||||
windowrulev2 = float, title:WebcamOverlay
|
||||
windowrulev2 = pin, title:WebcamOverlay
|
||||
windowrulev2 = noinitialfocus, title:WebcamOverlay
|
||||
windowrulev2 = nodim, title:WebcamOverlay
|
||||
windowrulev2 = move (monitor_w-window_w-40) (monitor_h-window_h-40), title:WebcamOverlay
|
||||
11
core/home/config/nomarchy/default/hypr/autostart.conf
Normal file
11
core/home/config/nomarchy/default/hypr/autostart.conf
Normal file
@@ -0,0 +1,11 @@
|
||||
exec-once = uwsm-app -- hypridle
|
||||
exec-once = uwsm-app -- mako
|
||||
# exec-once = uwsm-app -- waybar
|
||||
exec-once = uwsm-app -- fcitx5 --disable notificationitem
|
||||
exec-once = uwsm-app -- swaybg -i ~/.config/nomarchy/current/background -m fill
|
||||
exec-once = uwsm-app -- swayosd-server
|
||||
exec-once = nomarchy-cmd-first-run
|
||||
|
||||
# Slow app launch fix -- set systemd vars
|
||||
exec-once = systemctl --user import-environment $(env | cut -d'=' -f 1)
|
||||
exec-once = dbus-update-activation-environment --systemd --all
|
||||
16
core/home/config/nomarchy/default/hypr/bindings.conf
Normal file
16
core/home/config/nomarchy/default/hypr/bindings.conf
Normal file
@@ -0,0 +1,16 @@
|
||||
# Deprecated bindings file. New installations include everything directly.
|
||||
|
||||
bindd = SUPER, RETURN, Terminal, exec, $terminal
|
||||
bindd = SUPER, F, File manager, exec, $fileManager
|
||||
bindd = SUPER, B, Web browser, exec, $browser
|
||||
bindd = SUPER, M, Music player, exec, $music
|
||||
bindd = SUPER, N, Neovim, exec, $terminal -e nvim
|
||||
bindd = SUPER, T, Top, exec, $terminal -e btop
|
||||
bindd = SUPER, D, Lazy Docker, exec, $terminal -e lazydocker
|
||||
bindd = SUPER, G, Messenger, exec, $messenger
|
||||
bindd = SUPER, O, Obsidian, exec, obsidian -disable-gpu
|
||||
bindd = SUPER, SLASH, Password manager, exec, $passwordManager
|
||||
|
||||
source = ~/.config/nomarchy/default/hypr/bindings/media.conf
|
||||
source = ~/.config/nomarchy/default/hypr/bindings/tiling.conf
|
||||
source = ~/.config/nomarchy/default/hypr/bindings/utilities.conf
|
||||
@@ -0,0 +1,5 @@
|
||||
# Copy / Paste
|
||||
bindd = SUPER, C, Universal copy, sendshortcut, CTRL, Insert,
|
||||
bindd = SUPER, V, Universal paste, sendshortcut, SHIFT, Insert,
|
||||
bindd = SUPER, X, Universal cut, sendshortcut, CTRL, X,
|
||||
bindd = SUPER CTRL, V, Clipboard manager, exec, nomarchy-launch-walker -m clipboard
|
||||
28
core/home/config/nomarchy/default/hypr/bindings/media.conf
Normal file
28
core/home/config/nomarchy/default/hypr/bindings/media.conf
Normal file
@@ -0,0 +1,28 @@
|
||||
# Only display the OSD on the currently focused monitor
|
||||
$osdclient = swayosd-client --monitor "$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')"
|
||||
|
||||
# Laptop multimedia keys for volume and LCD brightness (with OSD)
|
||||
bindeld = ,XF86AudioRaiseVolume, Volume up, exec, $osdclient --output-volume raise
|
||||
bindeld = ,XF86AudioLowerVolume, Volume down, exec, $osdclient --output-volume lower
|
||||
bindeld = ,XF86AudioMute, Mute, exec, $osdclient --output-volume mute-toggle
|
||||
bindeld = ,XF86AudioMicMute, Mute microphone, exec, $osdclient --input-volume mute-toggle
|
||||
bindeld = ,XF86MonBrightnessUp, Brightness up, exec, nomarchy-brightness-display +5%
|
||||
bindeld = ,XF86MonBrightnessDown, Brightness down, exec, nomarchy-brightness-display 5%-
|
||||
bindeld = ,XF86KbdBrightnessUp, Keyboard brightness up, exec, nomarchy-brightness-keyboard up
|
||||
bindeld = ,XF86KbdBrightnessDown, Keyboard brightness down, exec, nomarchy-brightness-keyboard down
|
||||
bindld = ,XF86KbdLightOnOff, Keyboard backlight cycle, exec, nomarchy-brightness-keyboard cycle
|
||||
|
||||
# Precise 1% multimedia adjustments with Alt modifier
|
||||
bindeld = ALT, XF86AudioRaiseVolume, Volume up precise, exec, $osdclient --output-volume +1
|
||||
bindeld = ALT, XF86AudioLowerVolume, Volume down precise, exec, $osdclient --output-volume -1
|
||||
bindeld = ALT, XF86MonBrightnessUp, Brightness up precise, exec, nomarchy-brightness-display +1%
|
||||
bindeld = ALT, XF86MonBrightnessDown, Brightness down precise, exec, nomarchy-brightness-display 1%-
|
||||
|
||||
# Requires playerctl
|
||||
bindld = , XF86AudioNext, Next track, exec, $osdclient --playerctl next
|
||||
bindld = , XF86AudioPause, Pause, exec, $osdclient --playerctl play-pause
|
||||
bindld = , XF86AudioPlay, Play, exec, $osdclient --playerctl play-pause
|
||||
bindld = , XF86AudioPrev, Previous track, exec, $osdclient --playerctl previous
|
||||
|
||||
# Switch audio output with Super + Mute
|
||||
bindld = SUPER, XF86AudioMute, Switch audio output, exec, nomarchy-cmd-audio-switch
|
||||
128
core/home/config/nomarchy/default/hypr/bindings/tiling-v2.conf
Normal file
128
core/home/config/nomarchy/default/hypr/bindings/tiling-v2.conf
Normal file
@@ -0,0 +1,128 @@
|
||||
# Close windows
|
||||
bindd = SUPER, W, Close window, killactive,
|
||||
bindd = CTRL ALT, DELETE, Close all windows, exec, nomarchy-hyprland-window-close-all
|
||||
|
||||
# Control tiling
|
||||
bindd = SUPER, J, Toggle window split, layoutmsg, togglesplit
|
||||
bindd = SUPER, P, Pseudo window, pseudo, # dwindle
|
||||
bindd = SUPER, T, Toggle window floating/tiling, togglefloating,
|
||||
bindd = SUPER, F, Full screen, fullscreen, 0
|
||||
bindd = SUPER CTRL, F, Tiled full screen, fullscreenstate, 0 2
|
||||
bindd = SUPER ALT, F, Full width, fullscreen, 1
|
||||
bindd = SUPER, O, Pop window out (float & pin), exec, nomarchy-hyprland-window-pop
|
||||
bindd = SUPER, L, Toggle workspace layout, exec, nomarchy-hyprland-workspace-layout-toggle
|
||||
|
||||
# Move focus with SUPER + arrow keys
|
||||
bindd = SUPER, LEFT, Move window focus left, movefocus, l
|
||||
bindd = SUPER, RIGHT, Move window focus right, movefocus, r
|
||||
bindd = SUPER, UP, Move window focus up, movefocus, u
|
||||
bindd = SUPER, DOWN, Move window focus down, movefocus, d
|
||||
|
||||
# Switch workspaces with SUPER + [1-9; 0]
|
||||
bindd = SUPER, code:10, Switch to workspace 1, workspace, 1
|
||||
bindd = SUPER, code:11, Switch to workspace 2, workspace, 2
|
||||
bindd = SUPER, code:12, Switch to workspace 3, workspace, 3
|
||||
bindd = SUPER, code:13, Switch to workspace 4, workspace, 4
|
||||
bindd = SUPER, code:14, Switch to workspace 5, workspace, 5
|
||||
bindd = SUPER, code:15, Switch to workspace 6, workspace, 6
|
||||
bindd = SUPER, code:16, Switch to workspace 7, workspace, 7
|
||||
bindd = SUPER, code:17, Switch to workspace 8, workspace, 8
|
||||
bindd = SUPER, code:18, Switch to workspace 9, workspace, 9
|
||||
bindd = SUPER, code:19, Switch to workspace 10, workspace, 10
|
||||
|
||||
# Move active window to a workspace with SUPER + SHIFT + [1-9; 0]
|
||||
bindd = SUPER SHIFT, code:10, Move window to workspace 1, movetoworkspace, 1
|
||||
bindd = SUPER SHIFT, code:11, Move window to workspace 2, movetoworkspace, 2
|
||||
bindd = SUPER SHIFT, code:12, Move window to workspace 3, movetoworkspace, 3
|
||||
bindd = SUPER SHIFT, code:13, Move window to workspace 4, movetoworkspace, 4
|
||||
bindd = SUPER SHIFT, code:14, Move window to workspace 5, movetoworkspace, 5
|
||||
bindd = SUPER SHIFT, code:15, Move window to workspace 6, movetoworkspace, 6
|
||||
bindd = SUPER SHIFT, code:16, Move window to workspace 7, movetoworkspace, 7
|
||||
bindd = SUPER SHIFT, code:17, Move window to workspace 8, movetoworkspace, 8
|
||||
bindd = SUPER SHIFT, code:18, Move window to workspace 9, movetoworkspace, 9
|
||||
bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10
|
||||
|
||||
# Move active window silently to a workspace with SUPER + SHIFT + ALT + [1-9; 0]
|
||||
bindd = SUPER SHIFT ALT, code:10, Move window silently to workspace 1, movetoworkspacesilent, 1
|
||||
bindd = SUPER SHIFT ALT, code:11, Move window silently to workspace 2, movetoworkspacesilent, 2
|
||||
bindd = SUPER SHIFT ALT, code:12, Move window silently to workspace 3, movetoworkspacesilent, 3
|
||||
bindd = SUPER SHIFT ALT, code:13, Move window silently to workspace 4, movetoworkspacesilent, 4
|
||||
bindd = SUPER SHIFT ALT, code:14, Move window silently to workspace 5, movetoworkspacesilent, 5
|
||||
bindd = SUPER SHIFT ALT, code:15, Move window silently to workspace 6, movetoworkspacesilent, 6
|
||||
bindd = SUPER SHIFT ALT, code:16, Move window silently to workspace 7, movetoworkspacesilent, 7
|
||||
bindd = SUPER SHIFT ALT, code:17, Move window silently to workspace 8, movetoworkspacesilent, 8
|
||||
bindd = SUPER SHIFT ALT, code:18, Move window silently to workspace 9, movetoworkspacesilent, 9
|
||||
bindd = SUPER SHIFT ALT, code:19, Move window silently to workspace 10, movetoworkspacesilent, 10
|
||||
|
||||
# Control scratchpad
|
||||
bindd = SUPER, S, Toggle scratchpad, togglespecialworkspace, scratchpad
|
||||
bindd = SUPER ALT, S, Move window to scratchpad, movetoworkspacesilent, special:scratchpad
|
||||
|
||||
# TAB between workspaces
|
||||
bindd = SUPER, TAB, Next workspace, workspace, e+1
|
||||
bindd = SUPER SHIFT, TAB, Previous workspace, workspace, e-1
|
||||
bindd = SUPER CTRL, TAB, Former workspace, workspace, previous
|
||||
|
||||
# Move workspaces to other monitors
|
||||
bindd = SUPER SHIFT ALT, LEFT, Move workspace to left monitor, movecurrentworkspacetomonitor, l
|
||||
bindd = SUPER SHIFT ALT, RIGHT, Move workspace to right monitor, movecurrentworkspacetomonitor, r
|
||||
bindd = SUPER SHIFT ALT, UP, Move workspace to up monitor, movecurrentworkspacetomonitor, u
|
||||
bindd = SUPER SHIFT ALT, DOWN, Move workspace to down monitor, movecurrentworkspacetomonitor, d
|
||||
|
||||
# Swap active window with the one next to it with SUPER + SHIFT + arrow keys
|
||||
bindd = SUPER SHIFT, LEFT, Swap window to the left, swapwindow, l
|
||||
bindd = SUPER SHIFT, RIGHT, Swap window to the right, swapwindow, r
|
||||
bindd = SUPER SHIFT, UP, Swap window up, swapwindow, u
|
||||
bindd = SUPER SHIFT, DOWN, Swap window down, swapwindow, d
|
||||
|
||||
# Cycle through applications on active workspace
|
||||
bindd = ALT, TAB, Cycle to next window, cyclenext
|
||||
bindd = ALT SHIFT, TAB, Cycle to prev window, cyclenext, prev
|
||||
bindd = ALT, TAB, Reveal active window on top, bringactivetotop
|
||||
bindd = ALT SHIFT, TAB, Reveal active window on top, bringactivetotop
|
||||
|
||||
# Resize active window
|
||||
bindd = SUPER, code:20, Expand window left, resizeactive, -100 0 # - key
|
||||
bindd = SUPER, code:21, Shrink window left, resizeactive, 100 0 # = key
|
||||
bindd = SUPER SHIFT, code:20, Shrink window up, resizeactive, 0 -100
|
||||
bindd = SUPER SHIFT, code:21, Expand window down, resizeactive, 0 100
|
||||
|
||||
# Scroll through existing workspaces with SUPER + scroll
|
||||
bindd = SUPER, mouse_down, Scroll active workspace forward, workspace, e+1
|
||||
bindd = SUPER, mouse_up, Scroll active workspace backward, workspace, e-1
|
||||
|
||||
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
bindmd = SUPER, mouse:272, Move window, movewindow
|
||||
bindmd = SUPER, mouse:273, Resize window, resizewindow
|
||||
|
||||
# Toggle groups
|
||||
bindd = SUPER, G, Toggle window grouping, togglegroup
|
||||
bindd = SUPER ALT, G, Move active window out of group, moveoutofgroup
|
||||
|
||||
# Join groups
|
||||
bindd = SUPER ALT, LEFT, Move window to group on left, moveintogroup, l
|
||||
bindd = SUPER ALT, RIGHT, Move window to group on right, moveintogroup, r
|
||||
bindd = SUPER ALT, UP, Move window to group on top, moveintogroup, u
|
||||
bindd = SUPER ALT, DOWN, Move window to group on bottom, moveintogroup, d
|
||||
|
||||
# Navigate a single set of grouped windows
|
||||
bindd = SUPER ALT, TAB, Next window in group, changegroupactive, f
|
||||
bindd = SUPER ALT SHIFT, TAB, Previous window in group, changegroupactive, b
|
||||
|
||||
# Window navigation for grouped windows
|
||||
bindd = SUPER CTRL, LEFT, Move grouped window focus left, changegroupactive, b
|
||||
bindd = SUPER CTRL, RIGHT, Move grouped window focus right, changegroupactive, f
|
||||
|
||||
# Scroll through a set of grouped windows with SUPER + ALT + scroll
|
||||
bindd = SUPER ALT, mouse_down, Next window in group, changegroupactive, f
|
||||
bindd = SUPER ALT, mouse_up, Previous window in group, changegroupactive, b
|
||||
|
||||
# Activate window in a group by number
|
||||
bindd = SUPER ALT, code:10, Switch to group window 1, changegroupactive, 1
|
||||
bindd = SUPER ALT, code:11, Switch to group window 2, changegroupactive, 2
|
||||
bindd = SUPER ALT, code:12, Switch to group window 3, changegroupactive, 3
|
||||
bindd = SUPER ALT, code:13, Switch to group window 4, changegroupactive, 4
|
||||
bindd = SUPER ALT, code:14, Switch to group window 5, changegroupactive, 5
|
||||
|
||||
# Cycle monitor scaling
|
||||
bindd = SUPER, Slash, Cycle monitor scaling, exec, nomarchy-hyprland-monitor-scaling-cycle
|
||||
74
core/home/config/nomarchy/default/hypr/bindings/tiling.conf
Normal file
74
core/home/config/nomarchy/default/hypr/bindings/tiling.conf
Normal file
@@ -0,0 +1,74 @@
|
||||
# This is now a deprecated file meant for those who did not wish to learn the latest Nomarchy hotkeys.
|
||||
# Do not make changes here, but bring them to tiling-v2.conf instead.
|
||||
|
||||
# Close windows
|
||||
bindd = SUPER, W, Close window, killactive,
|
||||
bindd = CTRL ALT, DELETE, Close all windows, exec, nomarchy-hyprland-window-close-all
|
||||
|
||||
# Control tiling
|
||||
bindd = SUPER, J, Toggle window split, togglesplit, # dwindle
|
||||
bindd = SUPER, P, Pseudo window, pseudo, # dwindle
|
||||
bindd = SUPER SHIFT, V, Toggle window floating/tiling, togglefloating,
|
||||
bindd = SHIFT, F11, Force full screen, fullscreen, 0
|
||||
bindd = ALT, F11, Full width, fullscreen, 1
|
||||
|
||||
# Move focus with SUPER + arrow keys
|
||||
bindd = SUPER, LEFT, Move focus left, movefocus, l
|
||||
bindd = SUPER, RIGHT, Move focus right, movefocus, r
|
||||
bindd = SUPER, UP, Move focus up, movefocus, u
|
||||
bindd = SUPER, DOWN, Move focus down, movefocus, d
|
||||
|
||||
# Switch workspaces with SUPER + [0-9]
|
||||
bindd = SUPER, code:10, Switch to workspace 1, workspace, 1
|
||||
bindd = SUPER, code:11, Switch to workspace 2, workspace, 2
|
||||
bindd = SUPER, code:12, Switch to workspace 3, workspace, 3
|
||||
bindd = SUPER, code:13, Switch to workspace 4, workspace, 4
|
||||
bindd = SUPER, code:14, Switch to workspace 5, workspace, 5
|
||||
bindd = SUPER, code:15, Switch to workspace 6, workspace, 6
|
||||
bindd = SUPER, code:16, Switch to workspace 7, workspace, 7
|
||||
bindd = SUPER, code:17, Switch to workspace 8, workspace, 8
|
||||
bindd = SUPER, code:18, Switch to workspace 9, workspace, 9
|
||||
bindd = SUPER, code:19, Switch to workspace 10, workspace, 10
|
||||
|
||||
# Move active window to a workspace with SUPER + SHIFT + [0-9]
|
||||
bindd = SUPER SHIFT, code:10, Move window to workspace 1, movetoworkspace, 1
|
||||
bindd = SUPER SHIFT, code:11, Move window to workspace 2, movetoworkspace, 2
|
||||
bindd = SUPER SHIFT, code:12, Move window to workspace 3, movetoworkspace, 3
|
||||
bindd = SUPER SHIFT, code:13, Move window to workspace 4, movetoworkspace, 4
|
||||
bindd = SUPER SHIFT, code:14, Move window to workspace 5, movetoworkspace, 5
|
||||
bindd = SUPER SHIFT, code:15, Move window to workspace 6, movetoworkspace, 6
|
||||
bindd = SUPER SHIFT, code:16, Move window to workspace 7, movetoworkspace, 7
|
||||
bindd = SUPER SHIFT, code:17, Move window to workspace 8, movetoworkspace, 8
|
||||
bindd = SUPER SHIFT, code:18, Move window to workspace 9, movetoworkspace, 9
|
||||
bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10
|
||||
|
||||
# TAB between workspaces
|
||||
bindd = SUPER, TAB, Next workspace, workspace, e+1
|
||||
bindd = SUPER SHIFT, TAB, Previous workspace, workspace, e-1
|
||||
bindd = SUPER CTRL, TAB, Former workspace, workspace, previous
|
||||
|
||||
# Swap active window with the one next to it with SUPER + SHIFT + arrow keys
|
||||
bindd = SUPER SHIFT, LEFT, Swap window to the left, swapwindow, l
|
||||
bindd = SUPER SHIFT, RIGHT, Swap window to the right, swapwindow, r
|
||||
bindd = SUPER SHIFT, UP, Swap window up, swapwindow, u
|
||||
bindd = SUPER SHIFT, DOWN, Swap window down, swapwindow, d
|
||||
|
||||
# Cycle through applications on active workspace
|
||||
bindd = ALT, TAB, Cycle to next window, cyclenext
|
||||
bindd = ALT SHIFT, TAB, Cycle to prev window, cyclenext, prev
|
||||
bindd = ALT, TAB, Reveal active window on top, bringactivetotop
|
||||
bindd = ALT SHIFT, TAB, Reveal active window on top, bringactivetotop
|
||||
|
||||
# Resize active window
|
||||
bindd = SUPER, code:20, Expand window left, resizeactive, -100 0 # - key
|
||||
bindd = SUPER, code:21, Shrink window left, resizeactive, 100 0 # = key
|
||||
bindd = SUPER SHIFT, code:20, Shrink window up, resizeactive, 0 -100
|
||||
bindd = SUPER SHIFT, code:21, Expand window down, resizeactive, 0 100
|
||||
|
||||
# Scroll through existing workspaces with SUPER + scroll
|
||||
bindd = SUPER, MOUSE_DOWN, Scroll active workspace forward, workspace, e+1
|
||||
bindd = SUPER, MOUSE_UP, Scroll active workspace backward, workspace, e-1
|
||||
|
||||
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
bindmd = SUPER, mouse:272, Move window, movewindow
|
||||
bindmd = SUPER, mouse:273, Resize window, resizewindow
|
||||
@@ -0,0 +1,62 @@
|
||||
# Menus
|
||||
bindd = SUPER, SPACE, Launch apps, exec, nomarchy-launch-walker
|
||||
bindd = SUPER CTRL, E, Emoji picker, exec, nomarchy-launch-walker -m symbols
|
||||
bindd = SUPER CTRL, C, Capture menu, exec, nomarchy-menu capture
|
||||
bindd = SUPER CTRL, O, Toggle menu, exec, nomarchy-menu toggle
|
||||
bindd = SUPER ALT, SPACE, Nomarchy menu, exec, nomarchy-menu
|
||||
bindd = SUPER, ESCAPE, System menu, exec, nomarchy-menu system
|
||||
bindld = , XF86PowerOff, Power menu, exec, nomarchy-menu system
|
||||
bindd = SUPER, K, Show key bindings, exec, nomarchy-menu-keybindings
|
||||
bindd = , XF86Calculator, Calculator, exec, gnome-calculator
|
||||
|
||||
# Aesthetics
|
||||
bindd = SUPER SHIFT, SPACE, Toggle top bar, exec, nomarchy-toggle-waybar
|
||||
bindd = SUPER CTRL, SPACE, Theme background menu, exec, nomarchy-menu background
|
||||
bindd = SUPER SHIFT CTRL, SPACE, Theme menu, exec, nomarchy-menu theme
|
||||
bindd = SUPER, BACKSPACE, Toggle window transparency, exec, nomarchy-hyprland-active-window-transparency-toggle
|
||||
bindd = SUPER SHIFT, BACKSPACE, Toggle window gaps, exec, nomarchy-hyprland-window-gaps-toggle
|
||||
bindd = SUPER CTRL, BACKSPACE, Toggle single-window square aspect, exec, nomarchy-hyprland-window-single-square-aspect-toggle
|
||||
|
||||
# Notifications
|
||||
bindd = SUPER, COMMA, Dismiss last notification, exec, makoctl dismiss
|
||||
bindd = SUPER SHIFT, COMMA, Dismiss all notifications, exec, makoctl dismiss --all
|
||||
bindd = SUPER CTRL, COMMA, Toggle silencing notifications, exec, nomarchy-toggle-notification-silencing
|
||||
bindd = SUPER ALT, COMMA, Invoke last notification, exec, makoctl invoke
|
||||
bindd = SUPER SHIFT ALT, COMMA, Restore last notification, exec, makoctl restore
|
||||
|
||||
# Toggles
|
||||
bindd = SUPER CTRL, I, Toggle locking on idle, exec, nomarchy-toggle-idle
|
||||
bindd = SUPER CTRL, N, Toggle nightlight, exec, nomarchy-toggle-nightlight
|
||||
|
||||
# Control Apple Display brightness
|
||||
bindd = CTRL, F1, Apple Display brightness down, exec, nomarchy-brightness-display-apple -5000
|
||||
bindd = CTRL, F2, Apple Display brightness up, exec, nomarchy-brightness-display-apple +5000
|
||||
bindd = SHIFT CTRL, F2, Apple Display full brightness, exec, nomarchy-brightness-display-apple +60000
|
||||
|
||||
# Captures
|
||||
bindd = , PRINT, Screenshot, exec, nomarchy-cmd-screenshot
|
||||
bindd = ALT, PRINT, Screenrecording, exec, nomarchy-menu screenrecord
|
||||
bindd = SUPER, PRINT, Color picker, exec, pkill hyprpicker || hyprpicker -a
|
||||
|
||||
# File sharing
|
||||
bindd = SUPER CTRL, S, Share, exec, nomarchy-menu share
|
||||
|
||||
# Waybar-less information
|
||||
bindd = SUPER CTRL ALT, T, Show time, exec, notify-send -u low " $(date +"%A %H:%M · %d %B %Y · Week %V")"
|
||||
bindd = SUPER CTRL ALT, B, Show battery remaining, exec, notify-send -u low "$(nomarchy-battery-status)"
|
||||
|
||||
# Control panels
|
||||
bindd = SUPER CTRL, A, Audio controls, exec, nomarchy-launch-audio
|
||||
bindd = SUPER CTRL, B, Bluetooth controls, exec, nomarchy-launch-bluetooth
|
||||
bindd = SUPER CTRL, W, Wifi controls, exec, nomarchy-launch-wifi
|
||||
bindd = SUPER CTRL, T, Activity, exec, nomarchy-launch-tui btop
|
||||
|
||||
# Dictation
|
||||
bindd = SUPER CTRL, X, Toggle dictation, exec, voxtype record toggle
|
||||
|
||||
# Zoom
|
||||
bindd = SUPER CTRL, Z, Zoom in, exec, hyprctl keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '.float + 1')
|
||||
bindd = SUPER CTRL ALT, Z, Reset zoom, exec, hyprctl keyword cursor:zoom_factor 1
|
||||
|
||||
# Lock system
|
||||
bindd = SUPER CTRL, L, Lock system, exec, nomarchy-lock-screen
|
||||
12
core/home/config/nomarchy/default/hypr/colors.conf
Normal file
12
core/home/config/nomarchy/default/hypr/colors.conf
Normal file
@@ -0,0 +1,12 @@
|
||||
# Hyprland Color Configuration (Visual)
|
||||
# This file contains only color-related settings.
|
||||
# It's sourced AFTER theme colors are applied, allowing theme-specific overrides.
|
||||
|
||||
# These are placeholder values - actual colors come from the active theme
|
||||
# via ~/.config/nomarchy/current/theme/hyprland.conf
|
||||
|
||||
# Border colors (set by theme-loader based on active theme)
|
||||
# The theme's hyprland.conf will define $activeBorderColor and $inactiveBorderColor
|
||||
|
||||
# Group bar colors (set by theme)
|
||||
# Themes can override group bar colors in their hyprland.conf
|
||||
29
core/home/config/nomarchy/default/hypr/envs.conf
Normal file
29
core/home/config/nomarchy/default/hypr/envs.conf
Normal file
@@ -0,0 +1,29 @@
|
||||
# Cursor size
|
||||
env = XCURSOR_SIZE,24
|
||||
env = HYPRCURSOR_SIZE,24
|
||||
|
||||
# Force all apps to use Wayland
|
||||
env = GDK_BACKEND,wayland,x11,*
|
||||
env = QT_QPA_PLATFORM,wayland;xcb
|
||||
env = QT_STYLE_OVERRIDE,kvantum
|
||||
env = SDL_VIDEODRIVER,wayland,x11
|
||||
env = MOZ_ENABLE_WAYLAND,1
|
||||
env = ELECTRON_OZONE_PLATFORM_HINT,wayland
|
||||
env = OZONE_PLATFORM,wayland
|
||||
env = XDG_SESSION_TYPE,wayland
|
||||
|
||||
# Allow better support for screen sharing (Google Meet, Discord, etc)
|
||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
||||
env = XDG_SESSION_DESKTOP,Hyprland
|
||||
|
||||
xwayland {
|
||||
force_zero_scaling = true
|
||||
}
|
||||
|
||||
# Use XCompose file
|
||||
env = XCOMPOSEFILE,~/.XCompose
|
||||
|
||||
# Don't show update on first launch
|
||||
ecosystem {
|
||||
no_update_news = true
|
||||
}
|
||||
21
core/home/config/nomarchy/default/hypr/input.conf
Normal file
21
core/home/config/nomarchy/default/hypr/input.conf
Normal file
@@ -0,0 +1,21 @@
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#input
|
||||
input {
|
||||
kb_layout = us
|
||||
kb_variant =
|
||||
kb_model =
|
||||
kb_options = compose:caps
|
||||
kb_rules =
|
||||
|
||||
follow_mouse = 1
|
||||
|
||||
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||
|
||||
touchpad {
|
||||
natural_scroll = false
|
||||
}
|
||||
}
|
||||
|
||||
misc {
|
||||
key_press_enables_dpms = true # key press will trigger wake
|
||||
mouse_move_enables_dpms = true # mouse move will trigger wake
|
||||
}
|
||||
146
core/home/config/nomarchy/default/hypr/looknfeel.conf
Normal file
146
core/home/config/nomarchy/default/hypr/looknfeel.conf
Normal file
@@ -0,0 +1,146 @@
|
||||
# Refer to https://wiki.hyprland.org/Configuring/Variables/
|
||||
|
||||
# Variables
|
||||
$activeBorderColor = rgba(33ccffee) rgba(00ff99ee) 45deg
|
||||
$inactiveBorderColor = rgba(595959aa)
|
||||
|
||||
# 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 = $activeBorderColor
|
||||
col.inactive_border = $inactiveBorderColor
|
||||
|
||||
# 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
|
||||
|
||||
shadow {
|
||||
enabled = true
|
||||
range = 2
|
||||
render_power = 3
|
||||
color = rgba(1a1a1aee)
|
||||
}
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#blur
|
||||
blur {
|
||||
enabled = true
|
||||
size = 2
|
||||
passes = 2
|
||||
special = true
|
||||
brightness = 0.60
|
||||
contrast = 0.75
|
||||
}
|
||||
}
|
||||
|
||||
# https://wiki.hypr.land/Configuring/Variables/#group
|
||||
group {
|
||||
col.border_active = $activeBorderColor
|
||||
col.border_inactive = $inactiveBorderColor
|
||||
col.border_locked_active = -1
|
||||
col.border_locked_inactive = -1
|
||||
|
||||
groupbar {
|
||||
font_size = 12
|
||||
font_family = monospace
|
||||
font_weight_active = ultraheavy
|
||||
font_weight_inactive = normal
|
||||
|
||||
indicator_height = 0
|
||||
indicator_gap = 5
|
||||
height = 22
|
||||
gaps_in = 5
|
||||
gaps_out = 0
|
||||
|
||||
text_color = rgb(ffffff)
|
||||
text_color_inactive = rgba(ffffff90)
|
||||
col.active = rgba(00000040)
|
||||
col.inactive = rgba(00000020)
|
||||
|
||||
gradients = true
|
||||
gradient_rounding = 0
|
||||
gradient_round_only_edges = false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#animations
|
||||
animations {
|
||||
enabled = yes, please :)
|
||||
|
||||
# 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, 0, 0, ease
|
||||
animation = specialWorkspace, 1, 4, easeOutQuint, slidevert
|
||||
}
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||
dwindle {
|
||||
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||
preserve_split = true # You probably want this
|
||||
force_split = 2 # Always split on the right
|
||||
}
|
||||
|
||||
# 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
|
||||
disable_splash_rendering = true
|
||||
disable_scale_notification = true
|
||||
focus_on_activate = true
|
||||
}
|
||||
|
||||
# https://wiki.hypr.land/Configuring/Variables/#cursor
|
||||
cursor {
|
||||
hide_on_key_press = true
|
||||
warp_on_change_workspace = 1
|
||||
}
|
||||
|
||||
# Auto toggle scratchpad on switching workspace from scratchpad
|
||||
binds {
|
||||
hide_special_on_workspace_change = true
|
||||
}
|
||||
|
||||
# Style Gum confirm to match terminal theme
|
||||
env = GUM_CONFIRM_PROMPT_FOREGROUND,6 # Cyan
|
||||
env = GUM_CONFIRM_SELECTED_FOREGROUND,0 # Black
|
||||
env = GUM_CONFIRM_SELECTED_BACKGROUND,2 # Green
|
||||
env = GUM_CONFIRM_UNSELECTED_FOREGROUND,7 # White
|
||||
env = GUM_CONFIRM_UNSELECTED_BACKGROUND,8 # Dark grey
|
||||
# Dark grey
|
||||
16
core/home/config/nomarchy/default/hypr/plain-bindings.conf
Normal file
16
core/home/config/nomarchy/default/hypr/plain-bindings.conf
Normal file
@@ -0,0 +1,16 @@
|
||||
# Application bindings
|
||||
bindd = SUPER, RETURN, Terminal, exec, uwsm-app -- xdg-terminal-exec --dir="$(nomarchy-cmd-terminal-cwd)"
|
||||
bindd = SUPER SHIFT, RETURN, Browser, exec, nomarchy-launch-browser
|
||||
bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window
|
||||
bindd = SUPER ALT SHIFT, F, File manager (cwd), exec, uwsm-app -- nautilus --new-window "$(nomarchy-cmd-terminal-cwd)"
|
||||
bindd = SUPER SHIFT, B, Browser, exec, nomarchy-launch-browser
|
||||
bindd = SUPER SHIFT ALT, B, Browser (private), exec, nomarchy-launch-browser --private
|
||||
bindd = SUPER SHIFT, N, Editor, exec, nomarchy-launch-editor
|
||||
|
||||
# Add extra bindings
|
||||
# bindd = SUPER SHIFT, A, ChatGPT, exec, nomarchy-launch-webapp "https://chatgpt.com"
|
||||
# bindd = SUPER SHIFT, R, exec, alacritty -e ssh your-server
|
||||
|
||||
# Overwrite existing bindings, like putting Nomarchy Menu on Super + Space
|
||||
# unbind = SUPER, SPACE
|
||||
# bindd = SUPER, SPACE, Nomarchy menu, exec, nomarchy-menu
|
||||
15
core/home/config/nomarchy/default/hypr/windows.conf
Normal file
15
core/home/config/nomarchy/default/hypr/windows.conf
Normal file
@@ -0,0 +1,15 @@
|
||||
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||
# Hyprland 0.53+ syntax
|
||||
#windowrulev2 = suppressevent maximize, class:.*
|
||||
|
||||
# Tag all windows for default opacity (apps can override with -default-opacity tag)
|
||||
#windowrulev2 = tag +default-opacity, class:.*
|
||||
|
||||
# Fix some dragging issues with XWayland
|
||||
#windowrulev2 = nofocus, class:^$, title:^$, xwayland:1, float:1, fullscreen:0, pin:0
|
||||
|
||||
# App-specific tweaks (may remove default-opacity tag)
|
||||
source = ~/.config/nomarchy/default/hypr/apps.conf
|
||||
|
||||
# Apply default opacity after apps have had a chance to opt out
|
||||
#windowrulev2 = opacity 0.97 0.9, tag:default-opacity
|
||||
34
core/home/config/nomarchy/default/mako/core.ini
Normal file
34
core/home/config/nomarchy/default/mako/core.ini
Normal file
@@ -0,0 +1,34 @@
|
||||
anchor=top-right
|
||||
default-timeout=5000
|
||||
width=420
|
||||
outer-margin=20
|
||||
padding=10,15
|
||||
border-size=2
|
||||
max-icon-size=32
|
||||
font=sans-serif 14px
|
||||
|
||||
[app-name=Spotify]
|
||||
invisible=1
|
||||
|
||||
[mode=do-not-disturb]
|
||||
invisible=true
|
||||
|
||||
[mode=do-not-disturb app-name=notify-send]
|
||||
invisible=false
|
||||
|
||||
[urgency=critical]
|
||||
default-timeout=0
|
||||
layer=overlay
|
||||
|
||||
[summary~="Setup Wi-Fi"]
|
||||
on-button-left=exec sh -c 'nomarchy-notification-dismiss "Setup Wi-Fi"; nomarchy-launch-wifi'
|
||||
|
||||
[summary~="Update System"]
|
||||
on-button-left=exec sh -c 'nomarchy-notification-dismiss "Update System"; nomarchy-launch-floating-terminal-with-presentation nomarchy-update'
|
||||
|
||||
[summary~="Learn Keybindings"]
|
||||
on-button-left=exec sh -c 'nomarchy-notification-dismiss "Learn Keybindings"; nomarchy-menu-keybindings'
|
||||
|
||||
[summary~="Screenshot copied & saved"]
|
||||
max-icon-size=80
|
||||
format=<b>%s</b>\n%b
|
||||
97
core/home/config/nomarchy/default/voxtype/config.toml
Normal file
97
core/home/config/nomarchy/default/voxtype/config.toml
Normal file
@@ -0,0 +1,97 @@
|
||||
# Voxtype Configuration
|
||||
#
|
||||
# Location: ~/.config/voxtype/config.toml
|
||||
# All settings can be overridden via CLI flags
|
||||
#
|
||||
# State file for external integrations (Waybar, polybar, etc.)
|
||||
# Use "auto" for default location ($XDG_RUNTIME_DIR/voxtype/state),
|
||||
# a custom path, or "disabled" to turn off. The daemon writes state
|
||||
# ("idle", "recording", "transcribing") to this file whenever it changes.
|
||||
# Required for `voxtype record toggle` and `voxtype status` commands.
|
||||
state_file = "auto"
|
||||
|
||||
[hotkey]
|
||||
# Hotkey is configured in Hyprland. Default is Super + Ctrl + X
|
||||
enabled = false
|
||||
|
||||
[audio]
|
||||
# Audio input device ("default" uses system default)
|
||||
# List devices with: pactl list sources short
|
||||
device = "default"
|
||||
|
||||
# Sample rate in Hz (whisper expects 16000)
|
||||
sample_rate = 16000
|
||||
|
||||
# Maximum recording duration in seconds (safety limit)
|
||||
max_duration_secs = 60
|
||||
|
||||
# [audio.feedback]
|
||||
# Enable audio feedback sounds (beeps when recording starts/stops)
|
||||
# enabled = true
|
||||
#
|
||||
# Sound theme: "default", "subtle", "mechanical", or path to custom theme directory
|
||||
# theme = "default"
|
||||
#
|
||||
# Volume level (0.0 to 1.0)
|
||||
# volume = 0.7
|
||||
|
||||
[whisper]
|
||||
# Model to use for transcription
|
||||
# Options: tiny, tiny.en, base, base.en, small, small.en, medium, medium.en, large-v3, large-v3-turbo
|
||||
# .en models are English-only but faster and more accurate for English
|
||||
# large-v3-turbo is faster than large-v3 with minimal accuracy loss (recommended for GPU)
|
||||
# Or provide absolute path to a custom .bin model file
|
||||
model = "base.en"
|
||||
|
||||
# Language for transcription
|
||||
# Use "en" for English, "auto" for auto-detection
|
||||
# See: https://github.com/openai/whisper#available-models-and-languages
|
||||
language = "en"
|
||||
|
||||
# Translate non-English speech to English
|
||||
translate = false
|
||||
|
||||
# Number of CPU threads for inference (omit for auto-detection)
|
||||
# threads = 4
|
||||
|
||||
[output]
|
||||
# Primary output mode: "type" or "clipboard"
|
||||
# - type: Simulates keyboard input at cursor position (requires ydotool)
|
||||
# - clipboard: Copies text to clipboard (requires wl-copy)
|
||||
mode = "type"
|
||||
|
||||
# Fall back to clipboard if typing fails
|
||||
fallback_to_clipboard = true
|
||||
|
||||
# Delay between typed characters in milliseconds
|
||||
# 0 = fastest possible, increase if characters are dropped
|
||||
type_delay_ms = 1
|
||||
|
||||
# Post-processing command (optional)
|
||||
# Pipe transcribed text through an external command for cleanup before output.
|
||||
# The command receives text on stdin and outputs processed text on stdout.
|
||||
# Useful for LLM-based text cleanup, grammar correction, filler word removal.
|
||||
# On any failure (timeout, error), falls back to original transcription.
|
||||
#
|
||||
# [output.post_process]
|
||||
# command = "ollama run llama3.2:1b 'Clean up this dictation. Fix grammar, remove filler words. Output only the cleaned text:'"
|
||||
# timeout_ms = 30000 # 30 second timeout (generous for LLM)
|
||||
|
||||
[output.notification]
|
||||
# Show notification when recording starts (hotkey pressed)
|
||||
on_recording_start = false
|
||||
|
||||
# Show notification when recording stops (transcription beginning)
|
||||
on_recording_stop = false
|
||||
|
||||
# Show notification with transcribed text after transcription completes
|
||||
on_transcription = false
|
||||
|
||||
# [text]
|
||||
# Text processing options (word replacements, spoken punctuation)
|
||||
#
|
||||
# Enable spoken punctuation conversion (e.g., say "period" to get ".")
|
||||
# spoken_punctuation = false
|
||||
#
|
||||
# Custom word replacements (case-insensitive)
|
||||
# replacements = { "hyperwhisper" = "hyprwhspr" }
|
||||
3
core/home/config/nomarchy/default/walker/restart.conf
Normal file
3
core/home/config/nomarchy/default/walker/restart.conf
Normal file
@@ -0,0 +1,3 @@
|
||||
[Service]
|
||||
Restart=always
|
||||
RestartSec=2
|
||||
@@ -0,0 +1,156 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk" version="4.0"></requires>
|
||||
<object class="GtkWindow" id="Window">
|
||||
<style>
|
||||
<class name="window"></class>
|
||||
</style>
|
||||
<property name="resizable">true</property>
|
||||
<property name="title">Walker</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="BoxWrapper">
|
||||
<style>
|
||||
<class name="box-wrapper"></class>
|
||||
</style>
|
||||
<property name="width-request">644</property>
|
||||
<property name="overflow">hidden</property>
|
||||
<property name="orientation">horizontal</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="halign">center</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="Box">
|
||||
<style>
|
||||
<class name="box"></class>
|
||||
</style>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="hexpand-set">true</property>
|
||||
<property name="hexpand">true</property>
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="SearchContainer">
|
||||
<style>
|
||||
<class name="search-container"></class>
|
||||
</style>
|
||||
<property name="overflow">hidden</property>
|
||||
<property name="orientation">horizontal</property>
|
||||
<property name="halign">fill</property>
|
||||
<property name="hexpand-set">true</property>
|
||||
<property name="hexpand">true</property>
|
||||
<child>
|
||||
<object class="GtkEntry" id="Input">
|
||||
<style>
|
||||
<class name="input"></class>
|
||||
</style>
|
||||
<property name="halign">fill</property>
|
||||
<property name="hexpand-set">true</property>
|
||||
<property name="hexpand">true</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="ContentContainer">
|
||||
<style>
|
||||
<class name="content-container"></class>
|
||||
</style>
|
||||
<property name="orientation">horizontal</property>
|
||||
<property name="spacing">10</property>
|
||||
<property name="vexpand">true</property>
|
||||
<property name="vexpand-set">true</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="ElephantHint">
|
||||
<style>
|
||||
<class name="elephant-hint"></class>
|
||||
</style>
|
||||
<property name="hexpand">true</property>
|
||||
<property name="height-request">100</property>
|
||||
<property name="label">Waiting for elephant...</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="Placeholder">
|
||||
<style>
|
||||
<class name="placeholder"></class>
|
||||
</style>
|
||||
<property name="label">No Results</property>
|
||||
<property name="yalign">0.0</property>
|
||||
<property name="hexpand">true</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="Scroll">
|
||||
<style>
|
||||
<class name="scroll"></class>
|
||||
</style>
|
||||
<property name="hexpand">true</property>
|
||||
<property name="can_focus">false</property>
|
||||
<property name="overlay-scrolling">true</property>
|
||||
<property name="max-content-width">600</property>
|
||||
<property name="max-content-height">300</property>
|
||||
<property name="min-content-height">0</property>
|
||||
<property name="propagate-natural-height">true</property>
|
||||
<property name="propagate-natural-width">true</property>
|
||||
<property name="hscrollbar-policy">automatic</property>
|
||||
<property name="vscrollbar-policy">automatic</property>
|
||||
<child>
|
||||
<object class="GtkGridView" id="List">
|
||||
<style>
|
||||
<class name="list"></class>
|
||||
</style>
|
||||
<property name="max_columns">1</property>
|
||||
<property name="can_focus">false</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="Preview">
|
||||
<style>
|
||||
<class name="preview"></class>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="Keybinds">
|
||||
<property name="hexpand">true</property>
|
||||
<property name="margin-top">10</property>
|
||||
<style>
|
||||
<class name="keybinds"></class>
|
||||
</style>
|
||||
<child>
|
||||
<object class="GtkBox" id="GlobalKeybinds">
|
||||
<property name="spacing">10</property>
|
||||
<style>
|
||||
<class name="global-keybinds"></class>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="ItemKeybinds">
|
||||
<property name="hexpand">true</property>
|
||||
<property name="halign">end</property>
|
||||
<property name="spacing">10</property>
|
||||
<style>
|
||||
<class name="item-keybinds"></class>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="Error">
|
||||
<style>
|
||||
<class name="error"></class>
|
||||
</style>
|
||||
<property name="xalign">0</property>
|
||||
<property name="visible">false</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
@@ -0,0 +1,117 @@
|
||||
@import "../../../../../../../.config/nomarchy/current/theme/walker.css";
|
||||
|
||||
* {
|
||||
all: unset;
|
||||
}
|
||||
|
||||
* {
|
||||
font-family: monospace;
|
||||
font-size: 18px;
|
||||
color: @text;
|
||||
}
|
||||
|
||||
scrollbar {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.normal-icons {
|
||||
-gtk-icon-size: 16px;
|
||||
}
|
||||
|
||||
.large-icons {
|
||||
-gtk-icon-size: 32px;
|
||||
}
|
||||
|
||||
.box-wrapper {
|
||||
background: alpha(@base, 0.95);
|
||||
padding: 20px;
|
||||
border: 2px solid @border;
|
||||
}
|
||||
|
||||
.preview-box {
|
||||
}
|
||||
|
||||
.box {
|
||||
}
|
||||
|
||||
.search-container {
|
||||
background: @base;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.input placeholder {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.input {
|
||||
}
|
||||
|
||||
.input:focus,
|
||||
.input:active {
|
||||
box-shadow: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.content-container {
|
||||
}
|
||||
|
||||
.placeholder {
|
||||
}
|
||||
|
||||
.scroll {
|
||||
}
|
||||
|
||||
.list {
|
||||
}
|
||||
|
||||
child,
|
||||
child > * {
|
||||
}
|
||||
|
||||
child:hover .item-box {
|
||||
}
|
||||
|
||||
child:selected .item-box {
|
||||
background-color: @selected-background;
|
||||
}
|
||||
|
||||
child:selected .item-box * {
|
||||
color: @selected-text;
|
||||
}
|
||||
|
||||
.item-box {
|
||||
padding-left: 14px;
|
||||
}
|
||||
|
||||
.item-text-box {
|
||||
all: unset;
|
||||
padding: 14px 0;
|
||||
}
|
||||
|
||||
.item-text {
|
||||
}
|
||||
|
||||
.item-subtext {
|
||||
font-size: 0px;
|
||||
min-height: 0px;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.item-image {
|
||||
margin-right: 14px;
|
||||
-gtk-icon-transform: scale(0.9);
|
||||
}
|
||||
|
||||
.current {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.keybind-hints {
|
||||
background: @background;
|
||||
padding: 10px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.preview {
|
||||
}
|
||||
7
core/home/config/nomarchy/default/walker/walker.desktop
Normal file
7
core/home/config/nomarchy/default/walker/walker.desktop
Normal file
@@ -0,0 +1,7 @@
|
||||
[Desktop Entry]
|
||||
Name=Walker
|
||||
Comment=Walker Service
|
||||
Exec=walker --gapplication-service
|
||||
StartupNotify=false
|
||||
Terminal=false
|
||||
Type=Application
|
||||
7
core/home/config/nomarchy/default/waybar/indicators/idle.sh
Executable file
7
core/home/config/nomarchy/default/waybar/indicators/idle.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if pgrep -x hypridle >/dev/null; then
|
||||
echo '{"text": ""}'
|
||||
else
|
||||
echo '{"text": "", "tooltip": "Idle lock disabled", "class": "active"}'
|
||||
fi
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if makoctl mode | grep -q 'do-not-disturb'; then
|
||||
echo '{"text": "", "tooltip": "Notifications silenced", "class": "active"}'
|
||||
else
|
||||
echo '{"text": ""}'
|
||||
fi
|
||||
7
core/home/config/nomarchy/default/waybar/indicators/screen-recording.sh
Executable file
7
core/home/config/nomarchy/default/waybar/indicators/screen-recording.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if pgrep -f "^gpu-screen-recorder" >/dev/null; then
|
||||
echo '{"text": "", "tooltip": "Stop recording", "class": "active"}'
|
||||
else
|
||||
echo '{"text": ""}'
|
||||
fi
|
||||
@@ -0,0 +1,18 @@
|
||||
## Use software volume control for all ALSA devices.
|
||||
## This prevents hardware mixer quirks (like muffled audio on Realtek codecs)
|
||||
## and provides consistent volume behavior across all hardware.
|
||||
|
||||
monitor.alsa.rules = [
|
||||
{
|
||||
matches = [
|
||||
{
|
||||
device.name = "~alsa_card.*"
|
||||
}
|
||||
]
|
||||
actions = {
|
||||
update-props = {
|
||||
api.alsa.soft-mixer = true
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
29
core/home/config/nomarchy/default/xcompose
Normal file
29
core/home/config/nomarchy/default/xcompose
Normal file
@@ -0,0 +1,29 @@
|
||||
include "%L"
|
||||
|
||||
# Emoji
|
||||
<Multi_key> <m> <s> : "😄" # smile
|
||||
<Multi_key> <m> <c> : "😂" # cry
|
||||
<Multi_key> <m> <l> : "😍" # love
|
||||
<Multi_key> <m> <v> : "✌️" # victory
|
||||
<Multi_key> <m> <h> : "❤️" # heart
|
||||
<Multi_key> <m> <y> : "👍" # yes
|
||||
<Multi_key> <m> <n> : "👎" # no
|
||||
<Multi_key> <m> <f> : "🖕" # fuck
|
||||
<Multi_key> <m> <w> : "🤞" # wish
|
||||
<Multi_key> <m> <r> : "🤘" # rock
|
||||
<Multi_key> <m> <k> : "😘" # kiss
|
||||
<Multi_key> <m> <e> : "🙄" # eyeroll
|
||||
<Multi_key> <m> <d> : "🤤" # droll
|
||||
<Multi_key> <m> <m> : "💰" # money
|
||||
<Multi_key> <m> <x> : "🎉" # xellebrate
|
||||
<Multi_key> <m> <1> : "💯" # 100%
|
||||
<Multi_key> <m> <t> : "🥂" # toast
|
||||
<Multi_key> <m> <p> : "🙏" # pray
|
||||
<Multi_key> <m> <i> : "😉" # wink
|
||||
<Multi_key> <m> <o> : "👌" # OK
|
||||
<Multi_key> <m> <g> : "👋" # greeting
|
||||
<Multi_key> <m> <a> : "💪" # arm
|
||||
<Multi_key> <m> <b> : "🤯" # blowing
|
||||
|
||||
# Typography
|
||||
<Multi_key> <space> <space> : "—"
|
||||
Reference in New Issue
Block a user