mirror of
https://github.com/basecamp/omarchy.git
synced 2026-02-17 15:25:37 +00:00
Compare commits
200 Commits
v3.1.1
...
refactor-p
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
34dbfc0d7c | ||
|
|
c7203b6714 | ||
|
|
5552be964b | ||
|
|
78bc4d34c5 | ||
|
|
27dfc23139 | ||
|
|
234f670310 | ||
|
|
080d287d74 | ||
|
|
286e6378e7 | ||
|
|
ffb080d80d | ||
|
|
6eb6c79831 | ||
|
|
98db372bce | ||
|
|
a1ed2cf37f | ||
|
|
06ee173aca | ||
|
|
a966fbbc33 | ||
|
|
b3755d423a | ||
|
|
723ea545b5 | ||
|
|
4078102b80 | ||
|
|
507062f077 | ||
|
|
49e65067d5 | ||
|
|
81687e4f34 | ||
|
|
75c0e965a0 | ||
|
|
378497c8a2 | ||
|
|
fe19eee32b | ||
|
|
14696c315e | ||
|
|
4178547bbf | ||
|
|
8984affcbe | ||
|
|
4e15165155 | ||
|
|
6fd95b3e37 | ||
|
|
42fed06d9f | ||
|
|
8963c0dd2d | ||
|
|
dc17299a69 | ||
|
|
132e42a45f | ||
|
|
36b7bc7342 | ||
|
|
b9654a9372 | ||
|
|
e4e7fae5ef | ||
|
|
46db57acc5 | ||
|
|
89c5cc2d74 | ||
|
|
7c2402ff5b | ||
|
|
b609519c83 | ||
|
|
6d583028d5 | ||
|
|
0a8bcbe40a | ||
|
|
448cf86ff3 | ||
|
|
2ac65b5273 | ||
|
|
d0af0f998b | ||
|
|
76894b9c74 | ||
|
|
b7ccb64082 | ||
|
|
de4819bd17 | ||
|
|
6f73a52510 | ||
|
|
b64046fd5e | ||
|
|
433346353e | ||
|
|
11bb11814b | ||
|
|
df3310a453 | ||
|
|
087545e17e | ||
|
|
442cd5917a | ||
|
|
21ac298e88 | ||
|
|
5ae7bad9b5 | ||
|
|
35c21d7bea | ||
|
|
29041f7a56 | ||
|
|
42bfa3582b | ||
|
|
7f9ee95e1a | ||
|
|
e369d68fe1 | ||
|
|
661abc89a6 | ||
|
|
28ba448020 | ||
|
|
4b15fe9a52 | ||
|
|
886a9f6f2c | ||
|
|
54795a2f55 | ||
|
|
d528393df6 | ||
|
|
4c97a31c98 | ||
|
|
66b5f7eab8 | ||
|
|
9e971e3e56 | ||
|
|
ae10133b5e | ||
|
|
0f64a11f4e | ||
|
|
b738c77acf | ||
|
|
f76ba69f70 | ||
|
|
bfeb3a1e65 | ||
|
|
3c89acadc1 | ||
|
|
58ecda3b80 | ||
|
|
dd3b64ef7f | ||
|
|
fc0983624e | ||
|
|
fb3271f3af | ||
|
|
3344f33104 | ||
|
|
407d283cb7 | ||
|
|
ac8073fc81 | ||
|
|
7770f49c1a | ||
|
|
9490e714c3 | ||
|
|
d3a54dc32e | ||
|
|
d7cd1950ce | ||
|
|
e58569b947 | ||
|
|
6243c82251 | ||
|
|
928910773c | ||
|
|
a48001b8cc | ||
|
|
c17e4f57ff | ||
|
|
62cdece33a | ||
|
|
45d4b41749 | ||
|
|
d64a178635 | ||
|
|
d493e0536a | ||
|
|
0e5c22ac38 | ||
|
|
d5a8f1b06b | ||
|
|
f3c816fe85 | ||
|
|
ba348a6a15 | ||
|
|
ef0a9464a2 | ||
|
|
d9a077d5b6 | ||
|
|
b75e70fb9b | ||
|
|
4bb626bc4e | ||
|
|
b3e7ff2b60 | ||
|
|
4bd29207c6 | ||
|
|
a39ecf41bc | ||
|
|
048fdea87a | ||
|
|
d8f97b8d02 | ||
|
|
556e474942 | ||
|
|
9d9f362c7a | ||
|
|
1060a54c1a | ||
|
|
06389d0422 | ||
|
|
e0e71a34fe | ||
|
|
d128833e7b | ||
|
|
bba2ade78f | ||
|
|
e4f2cc2175 | ||
|
|
e0f9beda7a | ||
|
|
79267da5f2 | ||
|
|
cc5c842f9f | ||
|
|
9b37d8549f | ||
|
|
75eb059779 | ||
|
|
7a7881b176 | ||
|
|
2586cec7a0 | ||
|
|
fc30a25842 | ||
|
|
1d29406910 | ||
|
|
249318b398 | ||
|
|
9b798c3c0f | ||
|
|
14f803857c | ||
|
|
b92beef294 | ||
|
|
6fce5e28c9 | ||
|
|
7b02895962 | ||
|
|
9a90afb6e8 | ||
|
|
37518c222c | ||
|
|
6f0958aa67 | ||
|
|
475e831391 | ||
|
|
69c2195c10 | ||
|
|
795bfdd969 | ||
|
|
eac7ea8a49 | ||
|
|
de2b32d77f | ||
|
|
63d4482e8c | ||
|
|
efdea50053 | ||
|
|
15c22d5e75 | ||
|
|
1776981ebf | ||
|
|
cff15363c9 | ||
|
|
d2efdcede4 | ||
|
|
be24e38ea2 | ||
|
|
717a015537 | ||
|
|
a37495e3d1 | ||
|
|
7882893a23 | ||
|
|
7437c73113 | ||
|
|
413d292f2a | ||
|
|
50e68f466e | ||
|
|
d106cd9284 | ||
|
|
62b6802641 | ||
|
|
4f2f7b41e7 | ||
|
|
74473f5650 | ||
|
|
b6eb76d3ea | ||
|
|
ba2018087c | ||
|
|
9f00d5a3a0 | ||
|
|
260d586343 | ||
|
|
027825cbad | ||
|
|
d29e5777e0 | ||
|
|
5d756de561 | ||
|
|
6529472cad | ||
|
|
2310569eae | ||
|
|
70f69c7fc6 | ||
|
|
c7f851cc57 | ||
|
|
56f1c82b7d | ||
|
|
83beedabab | ||
|
|
76209ee33e | ||
|
|
7c7d472e39 | ||
|
|
9b4a42cc03 | ||
|
|
385020cbb0 | ||
|
|
6fbb3d4464 | ||
|
|
5171475836 | ||
|
|
9ddcfbe466 | ||
|
|
9d7c9e7344 | ||
|
|
101c29f3b1 | ||
|
|
c84d98a80b | ||
|
|
88011f5d11 | ||
|
|
832ca69ba2 | ||
|
|
786ae66154 | ||
|
|
7dca096807 | ||
|
|
2fa7d64d77 | ||
|
|
83d4349ea1 | ||
|
|
bddccf30cb | ||
|
|
910c23f539 | ||
|
|
33baf59cef | ||
|
|
e9c40445dd | ||
|
|
e2b56720ac | ||
|
|
54bcc68490 | ||
|
|
c3b86c602e | ||
|
|
61e0fa27e2 | ||
|
|
ea985fd471 | ||
|
|
dfa689f4ea | ||
|
|
530577e8fe | ||
|
|
42a5b3bf22 | ||
|
|
f0f319ed92 | ||
|
|
8b896b60a9 |
3
.github/ISSUE_TEMPLATE/bug.yml
vendored
3
.github/ISSUE_TEMPLATE/bug.yml
vendored
@@ -1,5 +1,5 @@
|
|||||||
name: Bug
|
name: Bug
|
||||||
description: Report a problem
|
description: Report a validated bug -- NOT FOR SUPPORT REQUESTS
|
||||||
labels: [bug]
|
labels: [bug]
|
||||||
body:
|
body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
@@ -19,5 +19,6 @@ body:
|
|||||||
id: steps
|
id: steps
|
||||||
attributes:
|
attributes:
|
||||||
label: What's wrong?
|
label: What's wrong?
|
||||||
|
description: Describe the issue, include steps to recreate it if possible, and attach the output of `omarchy-debug` if possible
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|||||||
7
.github/ISSUE_TEMPLATE/config.yml
vendored
7
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1 +1,8 @@
|
|||||||
blank_issues_enabled: false
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: Suggestion
|
||||||
|
url: https://github.com/basecamp/omarchy/discussions/categories/suggestions
|
||||||
|
about: Suggest a new feature, change to existing feature, or other ideas in Discussions.
|
||||||
|
- name: Support
|
||||||
|
url: https://omarchy.org/discord
|
||||||
|
about: Need help? Join our Discord community for support with any issues. GitHub issues should be used for verified bugs only.
|
||||||
|
|||||||
15
.github/ISSUE_TEMPLATE/documentation.yml
vendored
15
.github/ISSUE_TEMPLATE/documentation.yml
vendored
@@ -1,15 +0,0 @@
|
|||||||
name: Documentation
|
|
||||||
description: New pages or changes to existing
|
|
||||||
labels: [documentation]
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Remember: Omarchy is an open source gift, not a product you bought from a vendor
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: steps
|
|
||||||
attributes:
|
|
||||||
label: What correction or addition do we need?
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
15
.github/ISSUE_TEMPLATE/enhancement.yml
vendored
15
.github/ISSUE_TEMPLATE/enhancement.yml
vendored
@@ -1,15 +0,0 @@
|
|||||||
name: Enhancement
|
|
||||||
description: Feature or change
|
|
||||||
labels: [enhancement]
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Remember: Omarchy is an open source gift, not a product you bought from a vendor
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: steps
|
|
||||||
attributes:
|
|
||||||
label: What do you need?
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
# Omarchy
|
# Omarchy
|
||||||
|
|
||||||
Turn a fresh Arch installation into a fully-configured, beautiful, and modern web development system based on Hyprland by running a single command. That's the one-line pitch for Omarchy (like it was for Omakub). No need to write bespoke configs for every essential tool just to get started or to be up on all the latest command-line tools. Omarchy is an opinionated take on what Linux can be at its best.
|
Omarchy is a beautiful, modern & opinionated Linux distribution by DHH.
|
||||||
|
|
||||||
Read more at [omarchy.org](https://omarchy.org).
|
Read more at [omarchy.org](https://omarchy.org).
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Omarchy is released under the [MIT License](https://opensource.org/licenses/MIT).
|
Omarchy is released under the [MIT License](https://opensource.org/licenses/MIT).
|
||||||
|
|
||||||
|
|||||||
21
applications/Alacritty.desktop
Normal file
21
applications/Alacritty.desktop
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
TryExec=alacritty
|
||||||
|
Exec=alacritty
|
||||||
|
Icon=Alacritty
|
||||||
|
Terminal=false
|
||||||
|
Categories=System;TerminalEmulator;
|
||||||
|
Name=Alacritty
|
||||||
|
GenericName=Terminal
|
||||||
|
Comment=A fast, cross-platform, OpenGL terminal emulator
|
||||||
|
StartupNotify=true
|
||||||
|
StartupWMClass=Alacritty
|
||||||
|
Actions=New;
|
||||||
|
X-TerminalArgExec=-e
|
||||||
|
X-TerminalArgAppId=--class=
|
||||||
|
X-TerminalArgTitle=--title=
|
||||||
|
X-TerminalArgDir=--working-directory=
|
||||||
|
|
||||||
|
[Desktop Action New]
|
||||||
|
Name=New Terminal
|
||||||
|
Exec=alacritty
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Name=Neovim
|
|
||||||
GenericName=Text Editor
|
|
||||||
Comment=Edit text files
|
|
||||||
Exec=omarchy-launch-editor %F
|
|
||||||
Terminal=false
|
|
||||||
Type=Application
|
|
||||||
Keywords=Text;editor;
|
|
||||||
Icon=nvim
|
|
||||||
Categories=Utility;TextEditor;
|
|
||||||
StartupNotify=false
|
|
||||||
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
|
|
||||||
@@ -4,33 +4,20 @@
|
|||||||
|
|
||||||
BATTERY_THRESHOLD=10
|
BATTERY_THRESHOLD=10
|
||||||
NOTIFICATION_FLAG="/run/user/$UID/omarchy_battery_notified"
|
NOTIFICATION_FLAG="/run/user/$UID/omarchy_battery_notified"
|
||||||
|
BATTERY_LEVEL=$(omarchy-battery-remaining)
|
||||||
get_battery_percentage() {
|
BATTERY_STATE=$(upower -i $(upower -e | grep 'BAT') | grep -E "state" | awk '{print $2}')
|
||||||
upower -i "$(upower -e | grep 'BAT')" \
|
|
||||||
| awk -F: '/percentage/ {
|
|
||||||
gsub(/[%[:space:]]/, "", $2);
|
|
||||||
val=$2;
|
|
||||||
printf("%d\n", (val+0.5))
|
|
||||||
exit
|
|
||||||
}'
|
|
||||||
}
|
|
||||||
|
|
||||||
get_battery_state() {
|
|
||||||
upower -i $(upower -e | grep 'BAT') | grep -E "state" | awk '{print $2}'
|
|
||||||
}
|
|
||||||
|
|
||||||
send_notification() {
|
send_notification() {
|
||||||
notify-send -u critical " Time to recharge!" "Battery is down to ${1}%" -i battery-caution -t 30000
|
notify-send -u critical " Time to recharge!" "Battery is down to ${1}%" -i battery-caution -t 30000
|
||||||
}
|
}
|
||||||
|
|
||||||
BATTERY_LEVEL=$(get_battery_percentage)
|
if [[ -n "$BATTERY_LEVEL" && "$BATTERY_LEVEL" =~ ^[0-9]+$ ]]; then
|
||||||
BATTERY_STATE=$(get_battery_state)
|
if [[ $BATTERY_STATE == "discharging" && $BATTERY_LEVEL -le $BATTERY_THRESHOLD ]]; then
|
||||||
|
if [[ ! -f $NOTIFICATION_FLAG ]]; then
|
||||||
if [[ "$BATTERY_STATE" == "discharging" && "$BATTERY_LEVEL" -le "$BATTERY_THRESHOLD" ]]; then
|
send_notification $BATTERY_LEVEL
|
||||||
if [[ ! -f "$NOTIFICATION_FLAG" ]]; then
|
touch $NOTIFICATION_FLAG
|
||||||
send_notification "$BATTERY_LEVEL"
|
|
||||||
touch "$NOTIFICATION_FLAG"
|
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
rm -f "$NOTIFICATION_FLAG"
|
rm -f $NOTIFICATION_FLAG
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
11
bin/omarchy-battery-remaining
Executable file
11
bin/omarchy-battery-remaining
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Returns the battery percentage remaining as an integer.
|
||||||
|
|
||||||
|
upower -i $(upower -e | grep BAT) \
|
||||||
|
| awk -F: '/percentage/ {
|
||||||
|
gsub(/[%[:space:]]/, "", $2);
|
||||||
|
val=$2;
|
||||||
|
printf("%d\n", (val+0.5))
|
||||||
|
exit
|
||||||
|
}'
|
||||||
@@ -14,6 +14,6 @@ if [[ -f "$FIRST_RUN_MODE" ]]; then
|
|||||||
bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh"
|
bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh"
|
||||||
sudo rm -f /etc/sudoers.d/first-run
|
sudo rm -f /etc/sudoers.d/first-run
|
||||||
|
|
||||||
bash "$OMARCHY_PATH/install/first-run/wifi.sh"
|
|
||||||
bash "$OMARCHY_PATH/install/first-run/welcome.sh"
|
bash "$OMARCHY_PATH/install/first-run/welcome.sh"
|
||||||
|
bash "$OMARCHY_PATH/install/first-run/wifi.sh"
|
||||||
fi
|
fi
|
||||||
|
|||||||
61
bin/omarchy-debug
Executable file
61
bin/omarchy-debug
Executable file
@@ -0,0 +1,61 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
LOG_FILE="/tmp/omarchy-debug.log"
|
||||||
|
|
||||||
|
cat > "$LOG_FILE" <<EOF
|
||||||
|
Date: $(date)
|
||||||
|
Hostname: $(hostname)
|
||||||
|
Omarchy Branch: $(git -C "$OMARCHY_PATH" branch --show-current 2>/dev/null || echo "unknown")
|
||||||
|
|
||||||
|
=========================================
|
||||||
|
SYSTEM INFORMATION
|
||||||
|
=========================================
|
||||||
|
$(inxi -Farz)
|
||||||
|
|
||||||
|
=========================================
|
||||||
|
DMESG
|
||||||
|
=========================================
|
||||||
|
$(sudo dmesg)
|
||||||
|
|
||||||
|
=========================================
|
||||||
|
JOURNALCTL (CURRENT BOOT, ERRORS ONLY)
|
||||||
|
=========================================
|
||||||
|
$(journalctl -b -p 4..1)
|
||||||
|
|
||||||
|
=========================================
|
||||||
|
INSTALLED PACKAGES
|
||||||
|
=========================================
|
||||||
|
$({ expac -S '%n %v (%r)' $(pacman -Qqe) 2>/dev/null; comm -13 <(pacman -Sql | sort) <(pacman -Qqe | sort) | xargs -r expac -Q '%n %v (AUR)'; } | sort)
|
||||||
|
EOF
|
||||||
|
|
||||||
|
OPTIONS=("View log" "Save in current directory")
|
||||||
|
if ping -c 1 8.8.8.8 >/dev/null 2>&1; then
|
||||||
|
OPTIONS=("Upload log" "${OPTIONS[@]}")
|
||||||
|
fi
|
||||||
|
|
||||||
|
ACTION=$(gum choose "${OPTIONS[@]}")
|
||||||
|
|
||||||
|
case "$ACTION" in
|
||||||
|
"Upload log")
|
||||||
|
echo "Uploading debug log to 0x0.st..."
|
||||||
|
URL=$(curl -sF "file=@$LOG_FILE" -Fexpires=24 https://0x0.st)
|
||||||
|
if [ $? -eq 0 ] && [ -n "$URL" ]; then
|
||||||
|
echo "✓ Log uploaded successfully!"
|
||||||
|
echo "Share this URL:"
|
||||||
|
echo ""
|
||||||
|
echo " $URL"
|
||||||
|
echo ""
|
||||||
|
echo "This link will expire in 24 hours."
|
||||||
|
else
|
||||||
|
echo "Error: Failed to upload log file"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
"View log")
|
||||||
|
less "$LOG_FILE"
|
||||||
|
;;
|
||||||
|
"Save in current directory")
|
||||||
|
cp "$LOG_FILE" "./omarchy-debug.log"
|
||||||
|
echo "✓ Log saved to $(pwd)/omarchy-debug.log"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# FIXME: Update behavior
|
||||||
cd ~/.local/share/omarchy
|
cd ~/.local/share/omarchy
|
||||||
migration_file="$HOME/.local/share/omarchy/migrations/$(git log -1 --format=%cd --date=unix).sh"
|
migration_file="$HOME/.local/share/omarchy/migrations/$(git log -1 --format=%cd --date=unix).sh"
|
||||||
touch $migration_file
|
touch $migration_file
|
||||||
|
|||||||
344
bin/omarchy-disk-config
Executable file
344
bin/omarchy-disk-config
Executable file
@@ -0,0 +1,344 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Omarchy Disk Configuration Tool
|
||||||
|
|
||||||
|
Interactive partition editor and validator for Omarchy installations.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
def _find_root_partition(disk_config):
|
||||||
|
for dev_mod in disk_config.device_modifications:
|
||||||
|
for part in dev_mod.partitions:
|
||||||
|
if part.mountpoint == Path('/'):
|
||||||
|
return part
|
||||||
|
|
||||||
|
if part.btrfs_subvols:
|
||||||
|
for subvol in part.btrfs_subvols:
|
||||||
|
if subvol.mountpoint == Path('/'):
|
||||||
|
return part
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def validate_disk_config(config, interactive=True):
|
||||||
|
from archinstall.lib.models.device import FilesystemType, Size, Unit, EncryptionType
|
||||||
|
from archinstall.lib.output import info, warn
|
||||||
|
|
||||||
|
if not config.disk_config:
|
||||||
|
return 'CONTINUE'
|
||||||
|
|
||||||
|
validation_warnings = []
|
||||||
|
|
||||||
|
boot_partition = None
|
||||||
|
for dev_mod in config.disk_config.device_modifications:
|
||||||
|
for part in dev_mod.partitions:
|
||||||
|
if part.mountpoint == Path('/boot') or part.mountpoint == Path('/efi'):
|
||||||
|
boot_partition = part
|
||||||
|
break
|
||||||
|
|
||||||
|
if boot_partition:
|
||||||
|
min_boot_size = Size(2, Unit.GiB, boot_partition.length.sector_size)
|
||||||
|
if boot_partition.length >= min_boot_size:
|
||||||
|
size_gb = boot_partition.length.convert(Unit.GiB).value
|
||||||
|
info(f'✓ Boot partition size: {size_gb:.1f} GiB')
|
||||||
|
else:
|
||||||
|
size_mb = boot_partition.length.convert(Unit.MiB).value
|
||||||
|
warn(f'⚠ Boot partition is only {size_mb:.0f} MiB')
|
||||||
|
warn(' Omarchy recommends at least 2 GiB for boot partition')
|
||||||
|
warn(' Multiple kernels may not fit')
|
||||||
|
validation_warnings.append('boot_size')
|
||||||
|
else:
|
||||||
|
warn('⚠ Could not find boot partition (/boot or /efi)')
|
||||||
|
warn(' System may not boot correctly')
|
||||||
|
validation_warnings.append('no_boot')
|
||||||
|
|
||||||
|
root_partition = _find_root_partition(config.disk_config)
|
||||||
|
|
||||||
|
if root_partition:
|
||||||
|
if root_partition.fs_type == FilesystemType.Btrfs:
|
||||||
|
info('✓ Root filesystem is btrfs')
|
||||||
|
|
||||||
|
if root_partition.btrfs_subvols:
|
||||||
|
subvol_names = [str(sv.name) for sv in root_partition.btrfs_subvols]
|
||||||
|
subvol_mounts = {str(sv.mountpoint): str(sv.name) for sv in root_partition.btrfs_subvols}
|
||||||
|
|
||||||
|
required_subvols = {
|
||||||
|
'/': '@',
|
||||||
|
'/home': '@home',
|
||||||
|
'/var/log': '@log',
|
||||||
|
'/var/cache/pacman/pkg': '@pkg',
|
||||||
|
}
|
||||||
|
|
||||||
|
missing_subvols = []
|
||||||
|
for mount, expected_name in required_subvols.items():
|
||||||
|
if mount not in subvol_mounts:
|
||||||
|
missing_subvols.append(f'{expected_name} → {mount}')
|
||||||
|
elif subvol_mounts[mount] != expected_name:
|
||||||
|
warn(f'⚠ Subvolume at {mount} is named "{subvol_mounts[mount]}" not "{expected_name}"')
|
||||||
|
|
||||||
|
if missing_subvols:
|
||||||
|
warn(f'⚠ Missing recommended subvolumes: {", ".join(missing_subvols)}')
|
||||||
|
warn(' Omarchy recommends: @, @home, @log, @pkg')
|
||||||
|
warn(' Some features (like Snapper) may not work optimally')
|
||||||
|
info(f' Current subvolumes: {", ".join(subvol_names)}')
|
||||||
|
validation_warnings.append('missing_subvols')
|
||||||
|
else:
|
||||||
|
info(f'✓ Btrfs subvolumes: {", ".join(subvol_names)}')
|
||||||
|
else:
|
||||||
|
warn('⚠ Btrfs partition has no subvolumes defined')
|
||||||
|
warn(' Omarchy recommends subvolumes for snapshots')
|
||||||
|
warn(' Required: @ (root), @home, @log, @pkg')
|
||||||
|
validation_warnings.append('no_subvols')
|
||||||
|
else:
|
||||||
|
fs_name = root_partition.fs_type.value if root_partition.fs_type else 'unknown'
|
||||||
|
warn(f'⚠ Root filesystem is {fs_name}, not btrfs')
|
||||||
|
warn(' Omarchy is designed for btrfs with snapshots')
|
||||||
|
warn(' Some features may not work correctly')
|
||||||
|
validation_warnings.append('not_btrfs')
|
||||||
|
|
||||||
|
is_encrypted = False
|
||||||
|
if config.disk_config.disk_encryption:
|
||||||
|
enc = config.disk_config.disk_encryption
|
||||||
|
if enc.encryption_type != EncryptionType.NoEncryption:
|
||||||
|
is_encrypted = root_partition in enc.partitions
|
||||||
|
|
||||||
|
if is_encrypted:
|
||||||
|
info('✓ Root partition is encrypted with LUKS')
|
||||||
|
|
||||||
|
if config.disk_config.disk_encryption.iter_time != 2000:
|
||||||
|
old_time = config.disk_config.disk_encryption.iter_time
|
||||||
|
config.disk_config.disk_encryption.iter_time = 2000
|
||||||
|
info(f'✓ Adjusted iteration time: {old_time}ms → 2000ms')
|
||||||
|
else:
|
||||||
|
info('✓ Iteration time: 2000ms (optimal)')
|
||||||
|
else:
|
||||||
|
warn('⚠ Root partition is NOT encrypted')
|
||||||
|
warn(' Omarchy recommends LUKS encryption for security')
|
||||||
|
validation_warnings.append('no_encryption')
|
||||||
|
else:
|
||||||
|
warn('⚠ Could not identify root partition')
|
||||||
|
validation_warnings.append('no_root')
|
||||||
|
|
||||||
|
if validation_warnings and interactive:
|
||||||
|
import subprocess
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
gum_path = shutil.which('gum')
|
||||||
|
if gum_path:
|
||||||
|
warn('')
|
||||||
|
|
||||||
|
try:
|
||||||
|
result = subprocess.run(
|
||||||
|
['gum', 'choose', '--header', 'Validation warnings detected. What would you like to do?',
|
||||||
|
'Re-edit partitions', 'Continue anyway', 'Abort'],
|
||||||
|
capture_output=True,
|
||||||
|
text=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
choice = result.stdout.strip() if result.stdout else ''
|
||||||
|
|
||||||
|
if choice == 'Re-edit partitions':
|
||||||
|
return 'RE_EDIT'
|
||||||
|
elif choice == 'Abort':
|
||||||
|
return 'ABORT'
|
||||||
|
else:
|
||||||
|
info('Continuing despite warnings')
|
||||||
|
return 'CONTINUE'
|
||||||
|
|
||||||
|
except (subprocess.CalledProcessError, KeyboardInterrupt):
|
||||||
|
return 'ABORT'
|
||||||
|
|
||||||
|
return 'CONTINUE'
|
||||||
|
|
||||||
|
|
||||||
|
def apply_omarchy_partition_defaults():
|
||||||
|
import archinstall.lib.interactions.disk_conf as disk_conf_module
|
||||||
|
from archinstall.lib.models.device import (
|
||||||
|
PartitionModification, ModificationStatus, PartitionType,
|
||||||
|
Size, Unit, SectorSize, FilesystemType, PartitionFlag,
|
||||||
|
DeviceModification, BDevice
|
||||||
|
)
|
||||||
|
from archinstall.lib.interactions.disk_conf import get_default_btrfs_subvols
|
||||||
|
from archinstall.lib.disk.device_handler import device_handler
|
||||||
|
|
||||||
|
def _boot_partition_2gib(sector_size: SectorSize, using_gpt: bool) -> PartitionModification:
|
||||||
|
flags = [PartitionFlag.BOOT]
|
||||||
|
size = Size(2, Unit.GiB, sector_size)
|
||||||
|
start = Size(1, Unit.MiB, sector_size)
|
||||||
|
if using_gpt:
|
||||||
|
flags.append(PartitionFlag.ESP)
|
||||||
|
|
||||||
|
return PartitionModification(
|
||||||
|
status=ModificationStatus.Create,
|
||||||
|
type=PartitionType.Primary,
|
||||||
|
start=start,
|
||||||
|
length=size,
|
||||||
|
mountpoint=Path('/boot'),
|
||||||
|
fs_type=FilesystemType.Fat32,
|
||||||
|
flags=flags,
|
||||||
|
)
|
||||||
|
|
||||||
|
def _select_main_filesystem_btrfs() -> FilesystemType:
|
||||||
|
return FilesystemType.Btrfs
|
||||||
|
|
||||||
|
def _select_mount_options_compressed() -> list[str]:
|
||||||
|
return ['compress=zstd']
|
||||||
|
|
||||||
|
def _suggest_single_disk_auto_subvolumes(
|
||||||
|
device: BDevice,
|
||||||
|
filesystem_type: FilesystemType | None = None,
|
||||||
|
separate_home: bool | None = None,
|
||||||
|
):
|
||||||
|
if not filesystem_type:
|
||||||
|
filesystem_type = FilesystemType.Btrfs
|
||||||
|
|
||||||
|
if filesystem_type == FilesystemType.Btrfs:
|
||||||
|
using_subvolumes = True
|
||||||
|
mount_options = ['compress=zstd']
|
||||||
|
else:
|
||||||
|
using_subvolumes = False
|
||||||
|
mount_options = []
|
||||||
|
|
||||||
|
sector_size = device.device_info.sector_size
|
||||||
|
device_modification = DeviceModification(device, wipe=True)
|
||||||
|
using_gpt = device_handler.partition_table.is_gpt()
|
||||||
|
|
||||||
|
boot_partition = _boot_partition_2gib(sector_size, using_gpt)
|
||||||
|
device_modification.add_partition(boot_partition)
|
||||||
|
|
||||||
|
total_size = device.device_info.total_size
|
||||||
|
available_space = total_size - boot_partition.length - Size(1, Unit.MiB, sector_size)
|
||||||
|
|
||||||
|
root_partition = PartitionModification(
|
||||||
|
status=ModificationStatus.Create,
|
||||||
|
type=PartitionType.Primary,
|
||||||
|
start=boot_partition.start + boot_partition.length,
|
||||||
|
length=available_space,
|
||||||
|
mountpoint=None if using_subvolumes else Path('/'),
|
||||||
|
fs_type=filesystem_type,
|
||||||
|
mount_options=mount_options,
|
||||||
|
)
|
||||||
|
|
||||||
|
if using_subvolumes:
|
||||||
|
root_partition.btrfs_subvols = get_default_btrfs_subvols()
|
||||||
|
|
||||||
|
device_modification.add_partition(root_partition)
|
||||||
|
return device_modification
|
||||||
|
|
||||||
|
disk_conf_module._boot_partition = _boot_partition_2gib
|
||||||
|
disk_conf_module.select_main_filesystem_format = _select_main_filesystem_btrfs
|
||||||
|
disk_conf_module.select_mount_options = _select_mount_options_compressed
|
||||||
|
disk_conf_module.suggest_single_disk_layout = _suggest_single_disk_auto_subvolumes
|
||||||
|
|
||||||
|
|
||||||
|
def load_config(config_file: Path, creds_file: Path | None = None):
|
||||||
|
from archinstall.lib.args import ArchConfig, Arguments
|
||||||
|
|
||||||
|
with open(config_file) as f:
|
||||||
|
config_data = json.load(f)
|
||||||
|
|
||||||
|
if creds_file and creds_file.exists():
|
||||||
|
with open(creds_file) as f:
|
||||||
|
creds_data = json.load(f)
|
||||||
|
config_data.update(creds_data)
|
||||||
|
|
||||||
|
args = Arguments(
|
||||||
|
config=config_file,
|
||||||
|
creds=creds_file,
|
||||||
|
mountpoint=Path('/mnt'),
|
||||||
|
silent=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
return ArchConfig.from_config(config_data, args)
|
||||||
|
|
||||||
|
|
||||||
|
def save_config(config, output_file: Path):
|
||||||
|
from archinstall.lib.output import info
|
||||||
|
|
||||||
|
try:
|
||||||
|
config_dict = config.safe_json()
|
||||||
|
with open(output_file, 'w') as f:
|
||||||
|
json.dump(config_dict, f, indent=2, default=str)
|
||||||
|
info(f'✓ Configuration saved to: {output_file}')
|
||||||
|
except Exception as e:
|
||||||
|
from archinstall.lib.output import error
|
||||||
|
error(f'Failed to save config: {e}')
|
||||||
|
raise
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='Omarchy Disk Configuration Tool')
|
||||||
|
parser.add_argument('--config', type=Path, required=True, help='Path to config file')
|
||||||
|
parser.add_argument('--creds', type=Path, help='Path to credentials file')
|
||||||
|
parser.add_argument('--output', type=Path, help='Output path (default: overwrites input)')
|
||||||
|
parser.add_argument('--non-interactive', action='store_true', help='Skip interactive prompts')
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
output_file = args.output or args.config
|
||||||
|
|
||||||
|
if not args.config.exists():
|
||||||
|
print(f'ERROR: Config file not found: {args.config}', file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if args.creds and not args.creds.exists():
|
||||||
|
print(f'ERROR: Credentials file not found: {args.creds}', file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
try:
|
||||||
|
from archinstall.lib.output import info, error
|
||||||
|
from archinstall.lib.disk.disk_menu import DiskLayoutConfigurationMenu
|
||||||
|
from archinstall.tui.curses_menu import Tui
|
||||||
|
|
||||||
|
apply_omarchy_partition_defaults()
|
||||||
|
|
||||||
|
info('Loading configuration...')
|
||||||
|
config = load_config(args.config, args.creds)
|
||||||
|
|
||||||
|
if not config.disk_config:
|
||||||
|
error('No disk configuration found in config file')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
info('Launching partition editor...')
|
||||||
|
|
||||||
|
with Tui():
|
||||||
|
edited_disk_config = DiskLayoutConfigurationMenu(config.disk_config).run()
|
||||||
|
if edited_disk_config:
|
||||||
|
config.disk_config = edited_disk_config
|
||||||
|
info('✓ Partition configuration updated')
|
||||||
|
else:
|
||||||
|
info('No changes made in partition editor')
|
||||||
|
|
||||||
|
interactive = not args.non_interactive
|
||||||
|
validation_result = validate_disk_config(config, interactive=interactive)
|
||||||
|
|
||||||
|
if validation_result == 'RE_EDIT':
|
||||||
|
continue
|
||||||
|
elif validation_result == 'ABORT':
|
||||||
|
info('Disk configuration cancelled by user')
|
||||||
|
sys.exit(1)
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
|
||||||
|
save_config(config, output_file)
|
||||||
|
info('✓ Disk configuration complete!')
|
||||||
|
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
print('\nCancelled by user', file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
except Exception as e:
|
||||||
|
print(f'ERROR: {e}', file=sys.stderr)
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
if [[ $# -lt 1 ]]; then
|
if [[ $# -lt 1 ]]; then
|
||||||
echo "Usage: omarchy-hook [name] [args...]"
|
echo "Usage: omarchy-hook [name] [args...]"
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
22
bin/omarchy-hyprland-window-pop
Executable file
22
bin/omarchy-hyprland-window-pop
Executable file
@@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Toggle to pop-out a tile to stay fixed on a display basis.
|
||||||
|
|
||||||
|
active=$(hyprctl activewindow -j)
|
||||||
|
pinned=$(echo "$active" | jq .pinned)
|
||||||
|
addr=$(echo "$active" | jq -r ".address")
|
||||||
|
[ -z "$addr" ] && { echo "No active window"; exit 0; }
|
||||||
|
|
||||||
|
if [ "$pinned" = "true" ]; then
|
||||||
|
hyprctl -q --batch \
|
||||||
|
"dispatch pin address:$addr;" \
|
||||||
|
"dispatch togglefloating address:$addr;" \
|
||||||
|
"dispatch tagwindow -pop address:$addr;"
|
||||||
|
else
|
||||||
|
hyprctl -q --batch \
|
||||||
|
"dispatch togglefloating address:$addr;" \
|
||||||
|
"dispatch centerwindow address:$addr;" \
|
||||||
|
"dispatch pin address:$addr;" \
|
||||||
|
"dispatch alterzorder top address:$addr;" \
|
||||||
|
"dispatch tagwindow +pop address:$addr;"
|
||||||
|
fi
|
||||||
10
bin/omarchy-hyprland-workspace-toggle-gaps
Executable file
10
bin/omarchy-hyprland-workspace-toggle-gaps
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
workspace_id=$(hyprctl activeworkspace -j | jq -r .id)
|
||||||
|
gaps=$(hyprctl workspacerules -j | jq -r ".[] | select(.workspaceString==\"$workspace_id\") | .gapsOut[0] // 0")
|
||||||
|
|
||||||
|
if [[ $gaps == "0" ]]; then
|
||||||
|
hyprctl keyword "workspace $workspace_id, gapsout:10, gapsin:5, bordersize:2"
|
||||||
|
else \
|
||||||
|
hyprctl keyword "workspace $workspace_id, gapsout:0, gapsin:0, bordersize:0"
|
||||||
|
fi
|
||||||
258
bin/omarchy-install
Executable file
258
bin/omarchy-install
Executable file
@@ -0,0 +1,258 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Omarchy Install
|
||||||
|
|
||||||
|
Installs Arch Linux with Omarchy customizations using archinstall as a library.
|
||||||
|
For disk configuration, use omarchy-disk-config.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
def load_config(config_file: Path, creds_file: Path | None = None):
|
||||||
|
from archinstall.lib.args import ArchConfig, Arguments
|
||||||
|
|
||||||
|
with open(config_file) as f:
|
||||||
|
config_data = json.load(f)
|
||||||
|
|
||||||
|
if creds_file and creds_file.exists():
|
||||||
|
with open(creds_file) as f:
|
||||||
|
creds_data = json.load(f)
|
||||||
|
config_data.update(creds_data)
|
||||||
|
|
||||||
|
args = Arguments(
|
||||||
|
config=config_file,
|
||||||
|
creds=creds_file,
|
||||||
|
mountpoint=Path('/mnt'),
|
||||||
|
silent=True,
|
||||||
|
skip_ntp=True,
|
||||||
|
skip_wkd=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
return ArchConfig.from_config(config_data, args)
|
||||||
|
|
||||||
|
|
||||||
|
def load_omarchy_packages() -> list[str]:
|
||||||
|
omarchy_path = Path('/usr/share/omarchy/install')
|
||||||
|
packages = []
|
||||||
|
|
||||||
|
base_packages_file = omarchy_path / 'omarchy-base.packages'
|
||||||
|
if base_packages_file.exists():
|
||||||
|
with open(base_packages_file) as f:
|
||||||
|
packages.extend([line.strip() for line in f if line.strip() and not line.startswith('#')])
|
||||||
|
|
||||||
|
return packages
|
||||||
|
|
||||||
|
|
||||||
|
def perform_installation(config_file: Path, creds_file: Path | None = None) -> None:
|
||||||
|
from archinstall.lib.disk.filesystem import FilesystemHandler
|
||||||
|
from archinstall.lib.installer import Installer
|
||||||
|
from archinstall.lib.models.device import DiskLayoutType, EncryptionType
|
||||||
|
from archinstall.lib.output import error, info
|
||||||
|
from archinstall.lib.profile.profiles_handler import profile_handler
|
||||||
|
from archinstall.lib.authentication.authentication_handler import auth_handler
|
||||||
|
|
||||||
|
start_time = time.time()
|
||||||
|
|
||||||
|
info('Loading configuration...')
|
||||||
|
config = load_config(config_file, creds_file)
|
||||||
|
|
||||||
|
if not config.disk_config:
|
||||||
|
error('No disk configuration found in config file')
|
||||||
|
error('Use omarchy-disk-config to configure disk layout first')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
disk_config = config.disk_config
|
||||||
|
|
||||||
|
if disk_config.config_type != DiskLayoutType.Pre_mount:
|
||||||
|
info('Performing filesystem operations...')
|
||||||
|
fs_handler = FilesystemHandler(disk_config)
|
||||||
|
fs_handler.perform_filesystem_operations()
|
||||||
|
|
||||||
|
mountpoint = Path('/mnt')
|
||||||
|
|
||||||
|
info('Loading Omarchy base packages...')
|
||||||
|
omarchy_packages = load_omarchy_packages()
|
||||||
|
|
||||||
|
info('Starting Omarchy installation...')
|
||||||
|
|
||||||
|
with Installer(
|
||||||
|
mountpoint,
|
||||||
|
disk_config,
|
||||||
|
kernels=config.kernels or ['linux'],
|
||||||
|
) as installation:
|
||||||
|
|
||||||
|
info('Mounting filesystems...')
|
||||||
|
if disk_config.config_type != DiskLayoutType.Pre_mount:
|
||||||
|
installation.mount_ordered_layout()
|
||||||
|
|
||||||
|
installation.sanity_check()
|
||||||
|
|
||||||
|
if disk_config.disk_encryption and disk_config.disk_encryption.encryption_type != EncryptionType.NoEncryption:
|
||||||
|
info('Generating encryption keys...')
|
||||||
|
installation.generate_key_files()
|
||||||
|
|
||||||
|
if config.mirror_config:
|
||||||
|
info('Configuring mirrors...')
|
||||||
|
installation.set_mirrors(config.mirror_config, on_target=False)
|
||||||
|
|
||||||
|
info('Installing base system...')
|
||||||
|
installation.minimal_installation(
|
||||||
|
optional_repositories=config.mirror_config.optional_repositories if config.mirror_config else [],
|
||||||
|
mkinitcpio=not config.uki,
|
||||||
|
hostname=config.hostname,
|
||||||
|
locale_config=config.locale_config,
|
||||||
|
)
|
||||||
|
|
||||||
|
if config.mirror_config:
|
||||||
|
installation.set_mirrors(config.mirror_config, on_target=True)
|
||||||
|
|
||||||
|
if config.swap:
|
||||||
|
info('Setting up swap...')
|
||||||
|
installation.setup_swap('zram')
|
||||||
|
|
||||||
|
all_packages = omarchy_packages + (config.packages or [])
|
||||||
|
if all_packages:
|
||||||
|
info(f'Installing {len(all_packages)} packages...')
|
||||||
|
installation.add_additional_packages(all_packages)
|
||||||
|
|
||||||
|
if config.bootloader:
|
||||||
|
info(f'Installing bootloader: {config.bootloader.value}...')
|
||||||
|
installation.add_bootloader(config.bootloader, config.uki)
|
||||||
|
|
||||||
|
if config.network_config:
|
||||||
|
info('Configuring network...')
|
||||||
|
config.network_config.install_network_config(installation, config.profile_config)
|
||||||
|
|
||||||
|
if config.auth_config and config.auth_config.users:
|
||||||
|
info('Creating users...')
|
||||||
|
installation.create_users(config.auth_config.users)
|
||||||
|
auth_handler.setup_auth(installation, config.auth_config, config.hostname)
|
||||||
|
|
||||||
|
if config.app_config:
|
||||||
|
info('Installing applications...')
|
||||||
|
from archinstall.lib.applications.application_handler import application_handler
|
||||||
|
application_handler.install_applications(installation, config.app_config)
|
||||||
|
|
||||||
|
if config.profile_config:
|
||||||
|
info('Installing profile...')
|
||||||
|
profile_handler.install_profile_config(installation, config.profile_config)
|
||||||
|
|
||||||
|
if config.timezone:
|
||||||
|
installation.set_timezone(config.timezone)
|
||||||
|
|
||||||
|
if config.ntp:
|
||||||
|
installation.activate_time_synchronization()
|
||||||
|
|
||||||
|
from archinstall.lib.installer import accessibility_tools_in_use
|
||||||
|
if accessibility_tools_in_use():
|
||||||
|
installation.enable_espeakup()
|
||||||
|
|
||||||
|
if config.auth_config and config.auth_config.root_enc_password:
|
||||||
|
from archinstall.lib.models.users import User
|
||||||
|
root_user = User('root', config.auth_config.root_enc_password, False)
|
||||||
|
installation.set_user_password(root_user)
|
||||||
|
|
||||||
|
if config.profile_config and config.profile_config.profile:
|
||||||
|
config.profile_config.profile.post_install(installation)
|
||||||
|
|
||||||
|
if config.services:
|
||||||
|
info('Enabling services...')
|
||||||
|
installation.enable_service(config.services)
|
||||||
|
|
||||||
|
if disk_config.has_default_btrfs_vols():
|
||||||
|
btrfs_options = disk_config.btrfs_options
|
||||||
|
snapshot_config = btrfs_options.snapshot_config if btrfs_options else None
|
||||||
|
snapshot_type = snapshot_config.snapshot_type if snapshot_config else None
|
||||||
|
if snapshot_type:
|
||||||
|
installation.setup_btrfs_snapshot(snapshot_type, config.bootloader)
|
||||||
|
|
||||||
|
info('Mounting offline resources for chroot access...')
|
||||||
|
from archinstall.lib.general import SysCommand
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
offline_mirror_src = Path('/var/cache/omarchy/mirror/offline')
|
||||||
|
offline_mirror_dst = mountpoint / 'var/cache/omarchy/mirror/offline'
|
||||||
|
packages_src = Path('/opt/packages')
|
||||||
|
packages_dst = mountpoint / 'opt/packages'
|
||||||
|
|
||||||
|
os.makedirs(offline_mirror_dst, exist_ok=True)
|
||||||
|
os.makedirs(packages_dst, exist_ok=True)
|
||||||
|
|
||||||
|
if offline_mirror_src.exists():
|
||||||
|
SysCommand(f'mount --bind {offline_mirror_src} {offline_mirror_dst}')
|
||||||
|
|
||||||
|
if packages_src.exists():
|
||||||
|
SysCommand(f'mount --bind {packages_src} {packages_dst}')
|
||||||
|
|
||||||
|
pacman_conf_src = Path('/etc/pacman.conf')
|
||||||
|
pacman_conf_dst = mountpoint / 'etc/pacman.conf'
|
||||||
|
if pacman_conf_src.exists():
|
||||||
|
shutil.copy(pacman_conf_src, pacman_conf_dst)
|
||||||
|
|
||||||
|
info('Copying user info to chroot...')
|
||||||
|
os.makedirs(mountpoint / 'tmp', exist_ok=True)
|
||||||
|
|
||||||
|
if os.path.exists('/tmp/omarchy-user-name.txt'):
|
||||||
|
shutil.copy('/tmp/omarchy-user-name.txt', mountpoint / 'tmp/omarchy-user-name.txt')
|
||||||
|
if os.path.exists('/tmp/omarchy-user-email.txt'):
|
||||||
|
shutil.copy('/tmp/omarchy-user-email.txt', mountpoint / 'tmp/omarchy-user-email.txt')
|
||||||
|
|
||||||
|
if config.custom_commands:
|
||||||
|
info('Running Omarchy custom commands...')
|
||||||
|
from archinstall.lib.installer import run_custom_user_commands
|
||||||
|
run_custom_user_commands(config.custom_commands, installation)
|
||||||
|
|
||||||
|
info('Generating fstab...')
|
||||||
|
installation.genfstab()
|
||||||
|
|
||||||
|
end_time = time.time()
|
||||||
|
duration_seconds = int(end_time - start_time)
|
||||||
|
duration_mins = duration_seconds // 60
|
||||||
|
duration_secs = duration_seconds % 60
|
||||||
|
|
||||||
|
timing_file = mountpoint / 'tmp/omarchy-install-time.txt'
|
||||||
|
with open(timing_file, 'w') as f:
|
||||||
|
f.write(f"{duration_mins}m {duration_secs}s\n")
|
||||||
|
|
||||||
|
info(f'Installation complete! Total time: {duration_mins}m {duration_secs}s')
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='Omarchy Install')
|
||||||
|
parser.add_argument('--config', type=Path, required=True, help='Path to config file')
|
||||||
|
parser.add_argument('--creds', type=Path, help='Path to credentials file')
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if not args.config.exists():
|
||||||
|
print(f'ERROR: Config file not found: {args.config}', file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if args.creds and not args.creds.exists():
|
||||||
|
print(f'ERROR: Credentials file not found: {args.creds}', file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
try:
|
||||||
|
perform_installation(
|
||||||
|
config_file=args.config,
|
||||||
|
creds_file=args.creds,
|
||||||
|
)
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
print('\nInstallation cancelled by user', file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
except Exception as e:
|
||||||
|
print(f'ERROR: Installation failed: {e}', file=sys.stderr)
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
110
bin/omarchy-install-final-configurations.sh
Executable file
110
bin/omarchy-install-final-configurations.sh
Executable file
@@ -0,0 +1,110 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Omarchy Final Configurations Installer
|
||||||
|
#
|
||||||
|
# This script runs from archinstall's custom_commands after base packages
|
||||||
|
# and user creation. It switches to the created user and runs install.sh
|
||||||
|
# to complete package installation and system configuration.
|
||||||
|
#
|
||||||
|
# archinstall runs custom_commands as root via:
|
||||||
|
# arch-chroot -S /mnt bash /var/tmp/user-command.0.sh
|
||||||
|
#
|
||||||
|
|
||||||
|
set -eEo pipefail
|
||||||
|
|
||||||
|
# Setup comprehensive logging for chroot execution
|
||||||
|
# This ensures all output is captured even though we're running inside chroot
|
||||||
|
CHROOT_LOG_FILE="/var/log/omarchy-install-chroot.log"
|
||||||
|
mkdir -p "$(dirname "$CHROOT_LOG_FILE")"
|
||||||
|
touch "$CHROOT_LOG_FILE"
|
||||||
|
|
||||||
|
# Redirect all output to both the log file and stdout
|
||||||
|
# This way:
|
||||||
|
# 1. Output is saved to /var/log/omarchy-install-chroot.log (inside chroot = /mnt/var/log on ISO)
|
||||||
|
# 2. Output still goes to stdout so arch-chroot can potentially capture it
|
||||||
|
# 3. We use exec to redirect the entire script's output from this point forward
|
||||||
|
exec > >(tee -a "$CHROOT_LOG_FILE") 2>&1
|
||||||
|
|
||||||
|
# Log script start with timestamp
|
||||||
|
echo "========================================"
|
||||||
|
echo "Omarchy Chroot Install Starting"
|
||||||
|
echo "Started at: $(date '+%Y-%m-%d %H:%M:%S')"
|
||||||
|
echo "Log file: $CHROOT_LOG_FILE"
|
||||||
|
echo "========================================"
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Find the first non-root user (UID >= 1000, < 60000)
|
||||||
|
OMARCHY_USER=$(getent passwd | awk -F: '$3 >= 1000 && $3 < 60000 {print $1; exit}')
|
||||||
|
|
||||||
|
if [[ -z "$OMARCHY_USER" ]]; then
|
||||||
|
echo "ERROR: No non-root user found!"
|
||||||
|
echo "Users created:"
|
||||||
|
getent passwd | awk -F: '$3 >= 1000 {print $1, $3}'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Setting up Omarchy for user: $OMARCHY_USER"
|
||||||
|
|
||||||
|
# Setup passwordless sudo (will be removed by post-install)
|
||||||
|
echo "Setting up passwordless sudo..."
|
||||||
|
mkdir -p /etc/sudoers.d
|
||||||
|
cat >/etc/sudoers.d/99-omarchy-installer <<EOF
|
||||||
|
root ALL=(ALL:ALL) NOPASSWD: ALL
|
||||||
|
%wheel ALL=(ALL:ALL) NOPASSWD: ALL
|
||||||
|
$OMARCHY_USER ALL=(ALL:ALL) NOPASSWD: ALL
|
||||||
|
EOF
|
||||||
|
chmod 440 /etc/sudoers.d/99-omarchy-installer
|
||||||
|
|
||||||
|
# Get user info from /tmp (written by configurator)
|
||||||
|
if [[ -f /tmp/omarchy-user-name.txt ]]; then
|
||||||
|
OMARCHY_USER_NAME=$(cat /tmp/omarchy-user-name.txt)
|
||||||
|
else
|
||||||
|
OMARCHY_USER_NAME=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -f /tmp/omarchy-user-email.txt ]]; then
|
||||||
|
OMARCHY_USER_EMAIL=$(cat /tmp/omarchy-user-email.txt)
|
||||||
|
else
|
||||||
|
OMARCHY_USER_EMAIL=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Run install.sh as the user
|
||||||
|
echo "========================================"
|
||||||
|
echo "Running Omarchy installation as user: $OMARCHY_USER"
|
||||||
|
echo "========================================"
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Use runuser instead of su for better output handling
|
||||||
|
# runuser doesn't go through PAM and preserves stdout/stderr better
|
||||||
|
runuser -u "$OMARCHY_USER" -- bash -c "
|
||||||
|
set -eEo pipefail
|
||||||
|
export PYTHONUNBUFFERED=1
|
||||||
|
export OMARCHY_CHROOT_INSTALL=1
|
||||||
|
export OMARCHY_ARCHINSTALL_WRAPPER=1
|
||||||
|
export OMARCHY_USER='$OMARCHY_USER'
|
||||||
|
export OMARCHY_USER_NAME='$OMARCHY_USER_NAME'
|
||||||
|
export OMARCHY_USER_EMAIL='$OMARCHY_USER_EMAIL'
|
||||||
|
cd ~
|
||||||
|
source /usr/share/omarchy/install.sh
|
||||||
|
"
|
||||||
|
|
||||||
|
exit_code=$?
|
||||||
|
|
||||||
|
if [[ $exit_code -eq 0 ]]; then
|
||||||
|
echo
|
||||||
|
echo "========================================"
|
||||||
|
echo "Omarchy install.sh completed successfully!"
|
||||||
|
echo "========================================"
|
||||||
|
echo
|
||||||
|
echo "========================================"
|
||||||
|
echo "Omarchy Chroot Install Completed"
|
||||||
|
echo "Finished at: $(date '+%Y-%m-%d %H:%M:%S')"
|
||||||
|
echo "Log file: $CHROOT_LOG_FILE"
|
||||||
|
echo "========================================"
|
||||||
|
else
|
||||||
|
echo
|
||||||
|
echo "========================================"
|
||||||
|
echo "ERROR: Omarchy install.sh exited with code $exit_code"
|
||||||
|
echo "========================================"
|
||||||
|
exit $exit_code
|
||||||
|
fi
|
||||||
@@ -7,15 +7,41 @@ fi
|
|||||||
|
|
||||||
package="$1"
|
package="$1"
|
||||||
|
|
||||||
|
# Map package name to desktop entry ID
|
||||||
|
case "$package" in
|
||||||
|
alacritty)
|
||||||
|
desktop_id="Alacritty.desktop"
|
||||||
|
;;
|
||||||
|
ghostty)
|
||||||
|
desktop_id="com.mitchellh.ghostty.desktop"
|
||||||
|
;;
|
||||||
|
kitty)
|
||||||
|
desktop_id="kitty.desktop"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown terminal: $package"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
# Install package
|
# Install package
|
||||||
if omarchy-pkg-add $package; then
|
if omarchy-pkg-add $package; then
|
||||||
# Set as default terminal
|
# Set as default terminal
|
||||||
echo "Setting $package as new default terminal..."
|
echo "Setting $package as new default terminal..."
|
||||||
sed -i "/export TERMINAL=/ c\export TERMINAL=$package" ~/.config/uwsm/default
|
sed -i "/export TERMINAL=/ c\export TERMINAL=$package" ~/.config/uwsm/default
|
||||||
|
|
||||||
# Restart is needed for new default to take effect
|
# Copy custom desktop entry for alacritty with X-TerminalArg* keys
|
||||||
echo
|
if [ "$package" = "alacritty" ]; then
|
||||||
gum confirm "Restart to use new terminal?" && systemctl reboot --no-wall
|
mkdir -p ~/.local/share/applications
|
||||||
|
cp "$OMARCHY_PATH/applications/Alacritty.desktop" ~/.local/share/applications/
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Update xdg-terminals.list to prioritize the proper terminal
|
||||||
|
cat > ~/.config/xdg-terminals.list << EOF
|
||||||
|
# Terminal emulator preference order for xdg-terminal-exec
|
||||||
|
# The first found and valid terminal will be used
|
||||||
|
$desktop_id
|
||||||
|
EOF
|
||||||
else
|
else
|
||||||
echo "Failed to install $package"
|
echo "Failed to install $package"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
echo "Installing VSCode..."
|
echo "Installing VSCode..."
|
||||||
omarchy-pkg-add visual-studio-code-bin
|
omarchy-pkg-add visual-studio-code-bin
|
||||||
|
|
||||||
mkdir -p ~/.vscode
|
mkdir -p ~/.vscode ~/.config/Code/User
|
||||||
|
|
||||||
cat > ~/.vscode/argv.json << 'EOF'
|
cat > ~/.vscode/argv.json << 'EOF'
|
||||||
// This configuration file allows you to pass permanent command line arguments to VS Code.
|
// This configuration file allows you to pass permanent command line arguments to VS Code.
|
||||||
@@ -21,4 +21,7 @@ EOF
|
|||||||
# Ensure VSC's own auto-update feature is turned off
|
# Ensure VSC's own auto-update feature is turned off
|
||||||
printf '{\n "update.mode": "none"\n}\n' > ~/.config/Code/User/settings.json
|
printf '{\n "update.mode": "none"\n}\n' > ~/.config/Code/User/settings.json
|
||||||
|
|
||||||
|
# Apply Omarchy theme to VSCode
|
||||||
|
omarchy-theme-set-vscode
|
||||||
|
|
||||||
setsid gtk-launch code
|
setsid gtk-launch code
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
exec setsid uwsm-app -- alacritty --class=Omarchy -o font.size=9 -e bash -c 'fastfetch; read -n 1 -s'
|
exec setsid uwsm-app -- xdg-terminal-exec --app-id=com.omarchy.Omarchy -e bash -c 'fastfetch; read -n 1 -s'
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
case "${EDITOR:-nvim}" in
|
omarchy-cmd-present "$EDITOR" || EDITOR=nvim
|
||||||
|
|
||||||
|
case "$EDITOR" in
|
||||||
nvim | vim | nano | micro | hx | helix)
|
nvim | vim | nano | micro | hx | helix)
|
||||||
exec setsid uwsm-app -- "$TERMINAL" -e "$EDITOR" "$@"
|
exec setsid uwsm-app -- xdg-terminal-exec "$EDITOR" "$@"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
exec setsid uwsm-app -- "$EDITOR" "$@"
|
exec setsid uwsm-app -- "$EDITOR" "$@"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
cmd="$*"
|
cmd="$*"
|
||||||
exec setsid uwsm-app -- alacritty -o font.size=9 --class=Omarchy --title=Omarchy -e bash -c "omarchy-show-logo; $cmd; omarchy-show-done"
|
exec setsid uwsm-app -- xdg-terminal-exec --app-id=com.omarchy.Omarchy --title=Omarchy -e bash -c "omarchy-show-logo; $cmd; omarchy-show-done"
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
exec setsid uwsm-app -- "$TERMINAL" --class=Impala -e impala "$@"
|
exec setsid uwsm-app -- xdg-terminal-exec --app-id=com.omarchy.Impala -e impala "$@"
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
terminal() {
|
terminal() {
|
||||||
alacritty --class=Omarchy -e "$@"
|
xdg-terminal-exec --app-id=com.omarchy.Omarchy "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
present_terminal() {
|
present_terminal() {
|
||||||
@@ -178,7 +178,7 @@ show_setup_menu() {
|
|||||||
options="$options\n Defaults\n DNS\n Security\n Config"
|
options="$options\n Defaults\n DNS\n Security\n Config"
|
||||||
|
|
||||||
case $(menu "Setup" "$options") in
|
case $(menu "Setup" "$options") in
|
||||||
*Audio*) $TERMINAL --class=Wiremix -e wiremix ;;
|
*Audio*) xdg-terminal-exec --app-id=com.omarchy.Wiremix -e wiremix ;;
|
||||||
*Wifi*)
|
*Wifi*)
|
||||||
rfkill unblock wifi
|
rfkill unblock wifi
|
||||||
omarchy-launch-wifi
|
omarchy-launch-wifi
|
||||||
@@ -264,7 +264,7 @@ show_install_editor_menu() {
|
|||||||
*VSCode*) present_terminal omarchy-install-vscode ;;
|
*VSCode*) present_terminal omarchy-install-vscode ;;
|
||||||
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;;
|
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;;
|
||||||
*Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;;
|
*Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;;
|
||||||
*Sublime*) aur_install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
|
*Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
|
||||||
*Helix*) install "Helix" "helix" ;;
|
*Helix*) install "Helix" "helix" ;;
|
||||||
*Emacs*) install "Emacs" "emacs-wayland" && systemctl --user enable --now emacs.service ;;
|
*Emacs*) install "Emacs" "emacs-wayland" && systemctl --user enable --now emacs.service ;;
|
||||||
*) show_install_menu ;;
|
*) show_install_menu ;;
|
||||||
@@ -287,11 +287,11 @@ show_install_ai_menu() {
|
|||||||
echo ollama
|
echo ollama
|
||||||
)
|
)
|
||||||
|
|
||||||
case $(menu "Install" " Claude Code\n Cursor CLI [AUR]\n Gemini [AUR]\n OpenAI Codex [AUR]\n LM Studio\n Ollama\n Crush\n opencode") in
|
case $(menu "Install" " Claude Code\n Cursor CLI\n Gemini\n OpenAI Codex\n LM Studio\n Ollama\n Crush\n opencode") in
|
||||||
*Claude*) install "Claude Code" "claude-code" ;;
|
*Claude*) install "Claude Code" "claude-code" ;;
|
||||||
*Cursor*) aur_install "Cursor CLI" "cursor-cli" ;;
|
*Cursor*) install "Cursor CLI" "cursor-cli" ;;
|
||||||
*OpenAI*) aur_install "OpenAI Codex" "openai-codex-bin" ;;
|
*OpenAI*) install "OpenAI Codex" "openai-codex-bin" ;;
|
||||||
*Gemini*) aur_install "Gemini" "gemini-cli" ;;
|
*Gemini*) install "Gemini" "gemini-cli" ;;
|
||||||
*Studio*) install "LM Studio" "lmstudio" ;;
|
*Studio*) install "LM Studio" "lmstudio" ;;
|
||||||
*Ollama*) install "Ollama" $ollama_pkg ;;
|
*Ollama*) install "Ollama" $ollama_pkg ;;
|
||||||
*Crush*) install "Crush" "crush-bin" ;;
|
*Crush*) install "Crush" "crush-bin" ;;
|
||||||
@@ -304,7 +304,7 @@ show_install_gaming_menu() {
|
|||||||
case $(menu "Install" " Steam\n RetroArch [AUR]\n Minecraft") in
|
case $(menu "Install" " Steam\n RetroArch [AUR]\n Minecraft") in
|
||||||
*Steam*) present_terminal omarchy-install-steam ;;
|
*Steam*) present_terminal omarchy-install-steam ;;
|
||||||
*RetroArch*) aur_install_and_launch "RetroArch" "retroarch retroarch-assets libretro libretro-fbneo" "com.libretro.RetroArch.desktop" ;;
|
*RetroArch*) aur_install_and_launch "RetroArch" "retroarch retroarch-assets libretro libretro-fbneo" "com.libretro.RetroArch.desktop" ;;
|
||||||
*Minecraft*) aur_install_and_launch "Minecraft [AUR]" "minecraft-launcher" "minecraft-launcher" ;;
|
*Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;;
|
||||||
*) show_install_menu ;;
|
*) show_install_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
@@ -387,27 +387,20 @@ show_remove_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_update_menu() {
|
show_update_menu() {
|
||||||
case $(menu "Update" " Omarchy\n Branch\n Config\n Extra Themes\n Process\n Hardware\n Firmware\n Password\n Timezone") in
|
case $(menu "Update" " Omarchy\n Config\n Extra Themes\n Process\n Hardware\n Firmware\n Password\n Timezone\n Time") in
|
||||||
*Omarchy*) present_terminal omarchy-update ;;
|
*Omarchy*) present_terminal omarchy-update ;;
|
||||||
*Branch*) show_update_branch_menu ;;
|
|
||||||
*Config*) show_update_config_menu ;;
|
*Config*) show_update_config_menu ;;
|
||||||
*Themes*) present_terminal omarchy-theme-update ;;
|
*Themes*) present_terminal omarchy-theme-update ;;
|
||||||
*Process*) show_update_process_menu ;;
|
*Process*) show_update_process_menu ;;
|
||||||
*Hardware*) show_update_hardware_menu ;;
|
*Hardware*) show_update_hardware_menu ;;
|
||||||
*Firmware*) present_terminal omarchy-update-firmware ;;
|
*Firmware*) present_terminal omarchy-update-firmware ;;
|
||||||
*Timezone*) present_terminal omarchy-tz-select ;;
|
*Timezone*) present_terminal omarchy-tz-select ;;
|
||||||
|
*Time*) present_terminal omarchy-update-time ;;
|
||||||
*Password*) show_update_password_menu ;;
|
*Password*) show_update_password_menu ;;
|
||||||
*) show_main_menu ;;
|
*) show_main_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
show_update_branch_menu() {
|
|
||||||
case $(menu "Branch" "master\ndev" "" "$(omarchy-version-branch)") in
|
|
||||||
*master*) present_terminal "omarchy-update-branch master" ;;
|
|
||||||
*dev*) present_terminal "omarchy-update-branch dev" ;;
|
|
||||||
*) show_update_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
show_update_process_menu() {
|
show_update_process_menu() {
|
||||||
case $(menu "Restart" " Hypridle\n Hyprsunset\n Swayosd\n Walker\n Waybar") in
|
case $(menu "Restart" " Hypridle\n Hyprsunset\n Swayosd\n Walker\n Waybar") in
|
||||||
*Hypridle*) omarchy-restart-hypridle ;;
|
*Hypridle*) omarchy-restart-hypridle ;;
|
||||||
|
|||||||
@@ -49,6 +49,17 @@ parse_keycodes() {
|
|||||||
code="${BASH_REMATCH[1]}"
|
code="${BASH_REMATCH[1]}"
|
||||||
symbol=$(lookup_keycode_cached "$code" "$XKB_KEYMAP_CACHE")
|
symbol=$(lookup_keycode_cached "$code" "$XKB_KEYMAP_CACHE")
|
||||||
echo "${line/code:${code}/$symbol}"
|
echo "${line/code:${code}/$symbol}"
|
||||||
|
elif [[ "$line" =~ mouse:([0-9]+) ]]; then
|
||||||
|
code="${BASH_REMATCH[1]}"
|
||||||
|
|
||||||
|
case "$code" in
|
||||||
|
272) symbol="LEFT MOUSE BUTTON" ;;
|
||||||
|
273) symbol="RIGHT MOUSE BUTTON" ;;
|
||||||
|
274) symbol="MIDDLE MOUSE BUTTON" ;;
|
||||||
|
*) symbol="mouse:${code}" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "${line/mouse:${code}/$symbol}"
|
||||||
else
|
else
|
||||||
echo "$line"
|
echo "$line"
|
||||||
fi
|
fi
|
||||||
@@ -78,7 +89,6 @@ dynamic_bindings() {
|
|||||||
jq -r '.[] | {modmask, key, keycode, description, dispatcher, arg} | "\(.modmask),\(.key)@\(.keycode),\(.description),\(.dispatcher),\(.arg)"' |
|
jq -r '.[] | {modmask, key, keycode, description, dispatcher, arg} | "\(.modmask),\(.key)@\(.keycode),\(.description),\(.dispatcher),\(.arg)"' |
|
||||||
sed -r \
|
sed -r \
|
||||||
-e 's/null//' \
|
-e 's/null//' \
|
||||||
-e 's,~/.local/share/omarchy/bin/,,' \
|
|
||||||
-e 's,uwsm app -- ,,' \
|
-e 's,uwsm app -- ,,' \
|
||||||
-e 's,uwsm-app -- ,,' \
|
-e 's,uwsm-app -- ,,' \
|
||||||
-e 's/@0//' \
|
-e 's/@0//' \
|
||||||
@@ -101,6 +111,11 @@ dynamic_bindings() {
|
|||||||
-e 's/^77,/SUPER SHIFT CTRL ALT,/'
|
-e 's/^77,/SUPER SHIFT CTRL ALT,/'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Hardcoded bindings, like the copy-url extension and such
|
||||||
|
static_bindings() {
|
||||||
|
echo "SHIFT ALT,L,Copy URL from Web App,extension,copy-url"
|
||||||
|
}
|
||||||
|
|
||||||
# Parse and format keybindings
|
# Parse and format keybindings
|
||||||
#
|
#
|
||||||
# `awk` does the heavy lifting:
|
# `awk` does the heavy lifting:
|
||||||
@@ -147,13 +162,67 @@ parse_bindings() {
|
|||||||
}'
|
}'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prioritize_entries() {
|
||||||
|
awk '
|
||||||
|
{
|
||||||
|
line = $0
|
||||||
|
prio = 50
|
||||||
|
if (match(line, /Terminal/)) prio = 0
|
||||||
|
if (match(line, /Browser/) && !match(line, /Browser[[:space:]]*\(/)) prio = 1
|
||||||
|
if (match(line, /File manager/)) prio = 2
|
||||||
|
if (match(line, /Launch apps/)) prio = 3
|
||||||
|
if (match(line, /Omarchy menu/)) prio = 4
|
||||||
|
if (match(line, /System menu/)) prio = 5
|
||||||
|
if (match(line, /Theme menu/)) prio = 6
|
||||||
|
if (match(line, /Full screen/)) prio = 7
|
||||||
|
if (match(line, /Close window/)) prio = 8
|
||||||
|
if (match(line, /Toggle window floating/)) prio = 9
|
||||||
|
if (match(line, /Toggle window split/)) prio = 10
|
||||||
|
if (match(line, /Universal/)) prio = 11
|
||||||
|
if (match(line, /Clipboard/)) prio = 12
|
||||||
|
if (match(line, /Emoji picker/)) prio = 13
|
||||||
|
if (match(line, /Color picker/)) prio = 14
|
||||||
|
if (match(line, /Screenshot/)) prio = 15
|
||||||
|
if (match(line, /Screenrecording/)) prio = 16
|
||||||
|
if (match(line, /(Switch|Next|Former|Previous).*workspace/)) prio = 17
|
||||||
|
if (match(line, /Move window to workspace/)) prio = 18
|
||||||
|
if (match(line, /Swap window/)) prio = 19
|
||||||
|
if (match(line, /Move window focus/)) prio = 20
|
||||||
|
if (match(line, /Move window$/)) prio = 21
|
||||||
|
if (match(line, /Resize window/)) prio = 22
|
||||||
|
if (match(line, /Expand window/)) prio = 23
|
||||||
|
if (match(line, /Shrink window/)) prio = 24
|
||||||
|
if (match(line, /scratchpad/)) prio = 25
|
||||||
|
if (match(line, /notification/)) prio = 26
|
||||||
|
if (match(line, /Toggle window transparency/)) prio = 27
|
||||||
|
if (match(line, /Toggle workspace gaps/)) prio = 28
|
||||||
|
if (match(line, /Toggle nightlight/)) prio = 29
|
||||||
|
if (match(line, /group/)) prio = 94
|
||||||
|
if (match(line, /Scroll active workspace/)) prio = 95
|
||||||
|
if (match(line, /Cycle to/)) prio = 96
|
||||||
|
if (match(line, /Reveal active/)) prio = 97
|
||||||
|
if (match(line, /Apple Display/)) prio = 98
|
||||||
|
if (match(line, /XF86/)) prio = 99
|
||||||
|
|
||||||
|
# print "priority<TAB>line"
|
||||||
|
printf "%d\t%s\n", prio, line
|
||||||
|
}' |
|
||||||
|
sort -k1,1n -k2,2 |
|
||||||
|
cut -f2-
|
||||||
|
}
|
||||||
|
|
||||||
monitor_height=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .height')
|
monitor_height=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .height')
|
||||||
menu_height=$((monitor_height * 40 / 100))
|
menu_height=$((monitor_height * 40 / 100))
|
||||||
|
|
||||||
build_keymap_cache
|
build_keymap_cache
|
||||||
|
|
||||||
dynamic_bindings |
|
{
|
||||||
|
dynamic_bindings
|
||||||
|
static_bindings
|
||||||
|
} |
|
||||||
sort -u |
|
sort -u |
|
||||||
parse_keycodes |
|
parse_keycodes |
|
||||||
parse_bindings |
|
parse_bindings |
|
||||||
|
prioritize_entries |
|
||||||
walker --dmenu -p 'Keybindings' --width 800 --height "$menu_height"
|
walker --dmenu -p 'Keybindings' --width 800 --height "$menu_height"
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ mkdir -p "$STATE_DIR"
|
|||||||
mkdir -p "$STATE_DIR/skipped"
|
mkdir -p "$STATE_DIR/skipped"
|
||||||
|
|
||||||
# Run any pending migrations
|
# Run any pending migrations
|
||||||
for file in ~/.local/share/omarchy/migrations/*.sh; do
|
for file in /usr/share/omarchy/migrations/*.sh; do
|
||||||
filename=$(basename "$file")
|
filename=$(basename "$file")
|
||||||
|
|
||||||
if [[ ! -f "$STATE_DIR/$filename" && ! -f "$STATE_DIR/skipped/$filename" ]]; then
|
if [[ ! -f "$STATE_DIR/$filename" && ! -f "$STATE_DIR/skipped/$filename" ]]; then
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
# Copy and sync icon files
|
# Copy and sync icon files
|
||||||
mkdir -p ~/.local/share/icons/hicolor/48x48/apps/
|
mkdir -p ~/.local/share/icons/hicolor/48x48/apps/
|
||||||
cp ~/.local/share/omarchy/applications/icons/*.png ~/.local/share/icons/hicolor/48x48/apps/
|
cp /usr/share/omarchy/applications/icons/*.png ~/.local/share/icons/hicolor/48x48/apps/
|
||||||
gtk-update-icon-cache ~/.local/share/icons/hicolor &>/dev/null
|
gtk-update-icon-cache ~/.local/share/icons/hicolor &>/dev/null
|
||||||
|
|
||||||
# Copy .desktop declarations
|
# Copy .desktop declarations
|
||||||
mkdir -p ~/.local/share/applications
|
mkdir -p ~/.local/share/applications
|
||||||
cp ~/.local/share/omarchy/applications/*.desktop ~/.local/share/applications/
|
cp /usr/share/omarchy/applications/*.desktop ~/.local/share/applications/
|
||||||
cp ~/.local/share/omarchy/applications/hidden/*.desktop ~/.local/share/applications/
|
cp /usr/share/omarchy/applications/hidden/*.desktop ~/.local/share/applications/
|
||||||
|
|
||||||
update-desktop-database ~/.local/share/applications
|
update-desktop-database ~/.local/share/applications
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# This script deploys ~/.local/share/omarchy/config/X/Y/Z -> ~/.config/X/Y/Z
|
# This script deploys /etc/skel/.config/X/Y/Z -> ~/.config/X/Y/Z
|
||||||
config_file=$1
|
config_file=$1
|
||||||
|
|
||||||
if [[ -z "$config_file" ]]; then
|
if [[ -z "$config_file" ]]; then
|
||||||
@@ -8,7 +8,7 @@ if [[ -z "$config_file" ]]; then
|
|||||||
Usage: $0 [config_file]
|
Usage: $0 [config_file]
|
||||||
|
|
||||||
Must provide a file path from the .config directory to be refreshed.
|
Must provide a file path from the .config directory to be refreshed.
|
||||||
To copy ~/.local/share/omarchy/config/hypr/hyprlock.conf to ~/.config/hypr/hyprlock.conf
|
To copy /etc/skel/.config/hypr/hyprlock.conf to ~/.config/hypr/hyprlock.conf
|
||||||
|
|
||||||
$0 hypr/hyprlock.conf
|
$0 hypr/hyprlock.conf
|
||||||
USAGE
|
USAGE
|
||||||
@@ -17,7 +17,7 @@ fi
|
|||||||
|
|
||||||
# Backup the destination file (with timestamp) to avoid clobbering (Ex: hyprlock.conf.bak.1753817951)
|
# Backup the destination file (with timestamp) to avoid clobbering (Ex: hyprlock.conf.bak.1753817951)
|
||||||
user_config_file="${HOME}/.config/$config_file"
|
user_config_file="${HOME}/.config/$config_file"
|
||||||
default_config_file="${HOME}/.local/share/omarchy/config/$config_file"
|
default_config_file="/etc/skel/.config/$config_file"
|
||||||
backup_config_file="$user_config_file.bak.$(date +%s)"
|
backup_config_file="$user_config_file.bak.$(date +%s)"
|
||||||
|
|
||||||
if [[ -f "$user_config_file" ]]; then
|
if [[ -f "$user_config_file" ]]; then
|
||||||
|
|||||||
34
bin/omarchy-refresh-limine
Executable file
34
bin/omarchy-refresh-limine
Executable file
@@ -0,0 +1,34 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [[ -f /boot/EFI/linux/omarchy_linux.efi ]] && [[ -f /boot/EFI/linux/$(cat /etc/machine-id)_linux.efi ]]; then
|
||||||
|
echo "Cleanup extra UKI"
|
||||||
|
sudo rm -f /boot/EFI/Linux/$(cat /etc/machine-id)_linux.efi
|
||||||
|
fi
|
||||||
|
echo "Resetting limine config"
|
||||||
|
|
||||||
|
sudo mv /boot/limine.conf /boot/limine.conf.bak
|
||||||
|
|
||||||
|
sudo tee /boot/limine.conf <<EOF >/dev/null
|
||||||
|
### Read more at config document: https://github.com/limine-bootloader/limine/blob/trunk/CONFIG.md
|
||||||
|
#timeout: 3
|
||||||
|
default_entry: 2
|
||||||
|
interface_branding: Omarchy Bootloader
|
||||||
|
interface_branding_color: 2
|
||||||
|
hash_mismatch_panic: no
|
||||||
|
|
||||||
|
term_background: 1a1b26
|
||||||
|
backdrop: 1a1b26
|
||||||
|
|
||||||
|
# Terminal colors (Tokyo Night palette)
|
||||||
|
term_palette: 15161e;f7768e;9ece6a;e0af68;7aa2f7;bb9af7;7dcfff;a9b1d6
|
||||||
|
term_palette_bright: 414868;f7768e;9ece6a;e0af68;7aa2f7;bb9af7;7dcfff;c0caf5
|
||||||
|
|
||||||
|
# Text colors
|
||||||
|
term_foreground: c0caf5
|
||||||
|
term_foreground_bright: c0caf5
|
||||||
|
term_background_bright: 24283b
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
sudo limine-update
|
||||||
|
sudo limine-snapper-sync
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist /etc/pacman.d/mirrorlist
|
sudo cp -f /usr/share/omarchy/default/pacman/mirrorlist /etc/pacman.d/mirrorlist
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
sudo cp ~/.local/share/omarchy/default/plymouth/* /usr/share/plymouth/themes/omarchy/
|
sudo cp /usr/share/omarchy/default/plymouth/* /usr/share/plymouth/themes/omarchy/
|
||||||
sudo plymouth-set-default-theme omarchy
|
sudo plymouth-set-default-theme omarchy
|
||||||
|
|
||||||
if command -v limine-mkinitcpio &>/dev/null; then
|
if command -v limine-mkinitcpio &>/dev/null; then
|
||||||
|
|||||||
29
bin/omarchy-reinstall
Executable file
29
bin/omarchy-reinstall
Executable file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "$EUID" -eq 0 ]; then
|
||||||
|
echo "Error: This script should not be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "This will reinstall all the default Omarchy packages and reset all default configs.\nWarning: All changes to configs will be lost.\n"
|
||||||
|
|
||||||
|
if gum confirm "Are you sure you want to reinstall and lose all config changes?"; then
|
||||||
|
echo "Reinstalling Omarchy Package"
|
||||||
|
sudo pacman -Syu --noconfirm --needed omarchy
|
||||||
|
|
||||||
|
echo "Reinstalling missing Omarchy packages"
|
||||||
|
mapfile -t packages < <(grep -v '^#' "$OMARCHY_PATH/install/omarchy-base.packages" | grep -v '^$')
|
||||||
|
sudo pacman -Syu --noconfirm --needed "${packages[@]}"
|
||||||
|
|
||||||
|
echo "Resetting all Omarchy configs"
|
||||||
|
cp -R /etc/skel/.config/* ~/.config/
|
||||||
|
|
||||||
|
$(bash $OMARCHY_PATH/install/config/theme.sh)
|
||||||
|
$(bash $OMARCHY_PATH/install/config/git.sh)
|
||||||
|
|
||||||
|
omarchy-refresh-limine
|
||||||
|
omarchy-refresh-plymouth
|
||||||
|
omarchy-nvim-setup
|
||||||
|
fi
|
||||||
@@ -1,21 +1,33 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
pkill elephant
|
|
||||||
pkill walker
|
|
||||||
|
|
||||||
# Detect if we're running as root (from pacman hook)
|
# Detect if we're running as root (from pacman hook)
|
||||||
if [[ $EUID -eq 0 ]]; then
|
if [[ $EUID -eq 0 ]]; then
|
||||||
# Get the owner of this script to determine which user to run as
|
# Find all logged-in users running Hyprland
|
||||||
SCRIPT_OWNER=$(stat -c '%U' "$0")
|
for user_runtime in /run/user/*/; do
|
||||||
USER_UID=$(id -u "$SCRIPT_OWNER")
|
USER_UID=$(basename "$user_runtime")
|
||||||
|
USER_NAME=$(id -un "$USER_UID" 2>/dev/null)
|
||||||
|
|
||||||
# Restart services as the script owner
|
# Skip if we can't resolve the username or if no Hyprland session
|
||||||
systemd-run --uid="$SCRIPT_OWNER" --setenv=XDG_RUNTIME_DIR="/run/user/$USER_UID" \
|
[[ -z "$USER_NAME" ]] && continue
|
||||||
|
[[ ! -S "${user_runtime}hypr/"*"/.socket.sock" ]] && continue
|
||||||
|
|
||||||
|
# Kill existing processes for this user
|
||||||
|
pkill -u "$USER_NAME" elephant
|
||||||
|
pkill -u "$USER_NAME" walker
|
||||||
|
|
||||||
|
# Restart services as this user
|
||||||
|
systemd-run --uid="$USER_NAME" --setenv=XDG_RUNTIME_DIR="/run/user/$USER_UID" \
|
||||||
bash -c "
|
bash -c "
|
||||||
setsid uwsm-app -- elephant &
|
setsid uwsm-app -- elephant &
|
||||||
setsid uwsm-app -- walker --gapplication-service &
|
setsid uwsm-app -- walker --gapplication-service &
|
||||||
"
|
"
|
||||||
|
done
|
||||||
else
|
else
|
||||||
|
# Running as user directly
|
||||||
|
pkill elephant
|
||||||
|
pkill walker
|
||||||
|
|
||||||
setsid uwsm-app -- elephant &
|
setsid uwsm-app -- elephant &
|
||||||
|
wait 2
|
||||||
setsid uwsm-app -- walker --gapplication-service &
|
setsid uwsm-app -- walker --gapplication-service &
|
||||||
fi
|
fi
|
||||||
|
|||||||
3
bin/omarchy-set-user
Executable file
3
bin/omarchy-set-user
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Track active Omarchy user for package migrations
|
||||||
|
echo "$USER:$HOME:$XDG_RUNTIME_DIR" > /tmp/omarchy-active-user
|
||||||
@@ -2,6 +2,6 @@
|
|||||||
|
|
||||||
clear
|
clear
|
||||||
echo -e "\033[32m"
|
echo -e "\033[32m"
|
||||||
cat <~/.local/share/omarchy/logo.txt
|
cat < /usr/share/omarchy/logo.txt
|
||||||
echo -e "\033[0m"
|
echo -e "\033[0m"
|
||||||
echo
|
echo
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
COMMAND="$1"
|
COMMAND="$1"
|
||||||
OMARCHY_PATH=${OMARCHY_PATH:-$HOME/.local/share/omarchy}
|
OMARCHY_PATH=${OMARCHY_PATH:-$HOME/.local/share/omarchy}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
# omarchy-theme-set-obsidian: Bootstrap and update Omarchy theme for Obsidian
|
# omarchy-theme-set-obsidian: Bootstrap and update Omarchy theme for Obsidian
|
||||||
#
|
#
|
||||||
# - Ensures registry at ~/.local/state/omarchy/obsidian-vaults
|
# - Ensures registry at ~/.local/state/omarchy/obsidian-vaults
|
||||||
# - If missing/empty, bootstraps by scanning ~/Documents/*/.obsidian and ~/Dropbox/*/.obsidian
|
# - Populates by extracting vault paths from ~/.config/obsidian/obsidian.json
|
||||||
# - For each valid vault:
|
# - For each valid vault:
|
||||||
# - Ensures .obsidian/themes/Omarchy/{manifest.json, theme.css}
|
# - Ensures .obsidian/themes/Omarchy/{manifest.json, theme.css}
|
||||||
# - Updates theme.css (uses current theme’s obsidian.css if present; otherwise generates -- see below)
|
# - Updates theme.css (uses current theme’s obsidian.css if present; otherwise generates -- see below)
|
||||||
@@ -26,30 +26,18 @@
|
|||||||
VAULTS_FILE="$HOME/.local/state/omarchy/obsidian-vaults"
|
VAULTS_FILE="$HOME/.local/state/omarchy/obsidian-vaults"
|
||||||
CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme"
|
CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme"
|
||||||
|
|
||||||
# Ensure the vaults registry exists, or bootstrap from known locations
|
|
||||||
ensure_vaults_file() {
|
ensure_vaults_file() {
|
||||||
mkdir -p "$(dirname "$VAULTS_FILE")"
|
mkdir -p "$(dirname "$VAULTS_FILE")"
|
||||||
# If file exists (even empty), do not scan; treat as authoritative
|
|
||||||
if [ -f "$VAULTS_FILE" ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
local tmpfile
|
local tmpfile
|
||||||
tmpfile="$(mktemp)"
|
tmpfile="$(mktemp)"
|
||||||
# Scan a couple of common locations for <base>/<vault>/.obsidian
|
# Extract the Obsidian vault location from config file <base>/<vault>/.obsidian
|
||||||
for base in "$HOME/Documents" "$HOME/Dropbox"; do
|
jq -r '.vaults | values[].path' ~/.config/obsidian/obsidian.json 2>/dev/null >>"$tmpfile"
|
||||||
[ -d "$base" ] || continue
|
|
||||||
for d in "$base"/*/.obsidian; do
|
|
||||||
[ -d "$d" ] || continue
|
|
||||||
vault_dir="${d%/.obsidian}"
|
|
||||||
printf "%s\n" "$vault_dir" >>"$tmpfile"
|
|
||||||
done
|
|
||||||
done
|
|
||||||
if [ -s "$tmpfile" ]; then
|
if [ -s "$tmpfile" ]; then
|
||||||
sort -u "$tmpfile" >"$VAULTS_FILE"
|
sort -u "$tmpfile" >"$VAULTS_FILE"
|
||||||
else
|
else
|
||||||
: >"$VAULTS_FILE"
|
: >"$VAULTS_FILE"
|
||||||
fi
|
fi
|
||||||
rm -f "$tmpfile"
|
rm "$tmpfile"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Ensure theme directory and minimal manifest exist in a vault
|
# Ensure theme directory and minimal manifest exist in a vault
|
||||||
@@ -99,6 +87,35 @@ calculate_brightness() {
|
|||||||
echo $(((r * 299 + g * 587 + b * 114) / 1000))
|
echo $(((r * 299 + g * 587 + b * 114) / 1000))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Calculate approximate contrast ratio between two colors
|
||||||
|
# Returns ratio scaled by 100 (e.g., 450 = 4.5:1 ratio)
|
||||||
|
# (this is due to bash not supporting decimal math)
|
||||||
|
calculate_contrast_ratio() {
|
||||||
|
local hex1="$1" hex2="$2"
|
||||||
|
local br1=$(calculate_brightness "$hex1") # 0-255 range
|
||||||
|
local br2=$(calculate_brightness "$hex2") # 0-255 range
|
||||||
|
|
||||||
|
# Ensure br1 is the lighter color (higher brightness)
|
||||||
|
if [ $br1 -lt $br2 ]; then
|
||||||
|
local temp=$br1
|
||||||
|
br1=$br2
|
||||||
|
br2=$temp
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Approximate contrast ratio scaled by 100
|
||||||
|
# Add offset to avoid division by zero and approximate WCAG +0.05 behavior
|
||||||
|
echo $(((br1 + 13) * 100 / (br2 + 13)))
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if two colors meet minimum contrast threshold
|
||||||
|
# Usage: meets_contrast_threshold <ratio> <threshold>
|
||||||
|
# Both ratio and threshold should be scaled by 100 (e.g., 300 = 3:1)
|
||||||
|
meets_contrast_threshold() {
|
||||||
|
local ratio="$1" # Ratio scaled by 100 (from calculate_contrast_ratio)
|
||||||
|
local threshold="$2" # Threshold scaled by 100 (300=3:1, 450=4.5:1, 700=7:1)
|
||||||
|
[ $ratio -ge $threshold ]
|
||||||
|
}
|
||||||
|
|
||||||
# Calculate color distance (euclidean in RGB space)
|
# Calculate color distance (euclidean in RGB space)
|
||||||
color_distance() {
|
color_distance() {
|
||||||
local hex1="$1"
|
local hex1="$1"
|
||||||
@@ -241,20 +258,12 @@ extract_theme_data() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Sort by distance and get the closest color for code background
|
|
||||||
local -a closest_to_bg
|
|
||||||
readarray -t closest_to_bg < <(printf '%s\n' "${bg_distances[@]}" | sort -n | head -1 | cut -d: -f2)
|
|
||||||
|
|
||||||
# All background variations use the same as primary background
|
# All background variations use the same as primary background
|
||||||
local bg_primary_alt="$bg_color"
|
local bg_primary_alt="$bg_color"
|
||||||
local bg_secondary="$bg_color"
|
local bg_secondary="$bg_color"
|
||||||
local bg_secondary_alt="$bg_color"
|
local bg_secondary_alt="$bg_color"
|
||||||
|
|
||||||
# Code block background uses the closest different color
|
# Generate code background color that will contrast with foreground text
|
||||||
local code_bg="${closest_to_bg[0]}"
|
|
||||||
|
|
||||||
# If no different color available, create a subtle variant for code blocks
|
|
||||||
if [ -z "$code_bg" ]; then
|
|
||||||
read -r r g b <<<"$(hex_to_rgb "$bg_color")"
|
read -r r g b <<<"$(hex_to_rgb "$bg_color")"
|
||||||
if [ $bg_brightness -gt 127 ]; then
|
if [ $bg_brightness -gt 127 ]; then
|
||||||
r=$((r - 10))
|
r=$((r - 10))
|
||||||
@@ -272,7 +281,7 @@ extract_theme_data() {
|
|||||||
[ $b -lt 0 ] && b=0
|
[ $b -lt 0 ] && b=0
|
||||||
[ $b -gt 255 ] && b=255
|
[ $b -gt 255 ] && b=255
|
||||||
code_bg=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
|
code_bg=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
|
||||||
fi
|
|
||||||
|
|
||||||
# Find closest color to foreground for code block text
|
# Find closest color to foreground for code block text
|
||||||
local code_fg=""
|
local code_fg=""
|
||||||
@@ -357,6 +366,22 @@ extract_theme_data() {
|
|||||||
border_color=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
|
border_color=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Set text colors for muted/faint based on contrast
|
||||||
|
local text_muted_color="$border_color"
|
||||||
|
local text_faint_color="$border_color"
|
||||||
|
|
||||||
|
# Validate border color contrast against background
|
||||||
|
|
||||||
|
# Represents a 3:1 WCAG contrast ratio
|
||||||
|
local ideal_contrast_ratio=300
|
||||||
|
|
||||||
|
local border_contrast=$(calculate_contrast_ratio "$border_color" "$bg_color")
|
||||||
|
if ! meets_contrast_threshold "$border_contrast" "$ideal_contrast_ratio"; then
|
||||||
|
# Override text colors for readability, keep border color for visibility
|
||||||
|
text_muted_color="$fg_color"
|
||||||
|
text_faint_color="$fg_color"
|
||||||
|
fi
|
||||||
|
|
||||||
# Get unique colors array (without bg/fg) sorted by frequency
|
# Get unique colors array (without bg/fg) sorted by frequency
|
||||||
local -a unique_colors
|
local -a unique_colors
|
||||||
readarray -t unique_colors < <(echo "$filtered_data" | sort_colors_by_frequency)
|
readarray -t unique_colors < <(echo "$filtered_data" | sort_colors_by_frequency)
|
||||||
@@ -421,8 +446,8 @@ extract_theme_data() {
|
|||||||
--text-mark: ${color_slots[7]};
|
--text-mark: ${color_slots[7]};
|
||||||
--interactive-accent: ${color_slots[8]};
|
--interactive-accent: ${color_slots[8]};
|
||||||
--blockquote-border: ${color_slots[9]};
|
--blockquote-border: ${color_slots[9]};
|
||||||
--text-muted: $border_color; /* Use border color for muted text */
|
--text-muted: $text_muted_color; /* Use text-specific color for muted text */
|
||||||
--text-faint: $border_color; /* Use border color for faint text */
|
--text-faint: $text_faint_color; /* Use text-specific color for faint text */
|
||||||
|
|
||||||
/* Additional mappings */
|
/* Additional mappings */
|
||||||
--text-accent: var(--interactive-accent);
|
--text-accent: var(--interactive-accent);
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
for dir in ~/.config/omarchy/themes/*/; do
|
for dir in ~/.config/omarchy/themes/*/; do
|
||||||
[ -d "$dir" ] && [ ! -L "${dir%/}" ] && echo "Updating: $(basename "$dir")" && git -C "$dir" pull
|
if [[ -d $dir ]] && [[ ! -L "${dir%/}" ]] && [[ -d "$dir/.git" ]]; then
|
||||||
|
echo "Updating: $(basename "$dir")"
|
||||||
|
git -C "$dir" pull
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
trap 'echo ""; echo -e "\033[0;31mSomething went wrong during the update!\n\nPlease review the output above carefully, correct the error, and retry the update.\n\nIf you need assistance, get help from the community at https://omarchy.org/discord\033[0m"' ERR
|
||||||
|
|
||||||
|
omarchy-update-confirm
|
||||||
omarchy-snapshot create || [ $? -eq 127 ]
|
omarchy-snapshot create || [ $? -eq 127 ]
|
||||||
omarchy-update-git
|
omarchy-update-git
|
||||||
omarchy-update-perform
|
omarchy-update-perform
|
||||||
|
|||||||
@@ -2,3 +2,4 @@
|
|||||||
|
|
||||||
# Ensure Waybar icon offering the available update is removed
|
# Ensure Waybar icon offering the available update is removed
|
||||||
pkill -RTMIN+7 waybar
|
pkill -RTMIN+7 waybar
|
||||||
|
exit 0
|
||||||
|
|||||||
14
bin/omarchy-update-confirm
Executable file
14
bin/omarchy-update-confirm
Executable file
@@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
gum style --border normal --border-foreground 6 --padding "1 2" \
|
||||||
|
"Ready to update Omarchy?" \
|
||||||
|
"" \
|
||||||
|
"• You cannot stop the update once you start!" \
|
||||||
|
"• Make sure you're connected to power or have a full battery"
|
||||||
|
|
||||||
|
if ! gum confirm "Continue with update?"; then
|
||||||
|
echo "Update cancelled"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
echo -e "\e[32mUpdate Omarchy\e[0m"
|
echo -e "\e[32mUpdate Omarchy\e[0m"
|
||||||
|
|
||||||
git -C $OMARCHY_PATH pull --autostash
|
git -C $OMARCHY_PATH pull --autostash
|
||||||
|
|||||||
12
bin/omarchy-update-keyring
Executable file
12
bin/omarchy-update-keyring
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Ensure we have the omarchy-keyring and it's populated
|
||||||
|
if omarchy-pkg-missing omarchy-keyring || ! sudo pacman-key --list-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 &>/dev/null; then
|
||||||
|
sudo pacman-key --recv-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 --keyserver keys.openpgp.org
|
||||||
|
sudo pacman-key --lsign-key 40DFB630FF42BCFFB047046CF0134EE680CAC571
|
||||||
|
|
||||||
|
sudo pacman -Sy
|
||||||
|
omarchy-pkg-add omarchy-keyring
|
||||||
|
|
||||||
|
sudo pacman-key --list-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571
|
||||||
|
fi
|
||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
omarchy-update-time
|
||||||
|
omarchy-update-keyring
|
||||||
omarchy-update-available-reset
|
omarchy-update-available-reset
|
||||||
omarchy-update-system-pkgs
|
omarchy-update-system-pkgs
|
||||||
omarchy-migrate
|
omarchy-migrate
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
# Used in package emergencies if a bad package has been pushed and we can't revoke.
|
# Used in package emergencies if a bad package has been pushed and we can't revoke.
|
||||||
# Requires manually installing the good package using sudo pacman -U <url>
|
# Requires manually installing the good package using sudo pacman -U <url>
|
||||||
ignored_packages=$(omarchy-pkg-ignored)
|
ignored_packages=$(omarchy-pkg-ignored)
|
||||||
@@ -21,7 +23,7 @@ if pacman -Qem >/dev/null; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
orphans=$(pacman -Qtdq)
|
orphans=$(pacman -Qtdq || true)
|
||||||
if [[ -n $orphans ]]; then
|
if [[ -n $orphans ]]; then
|
||||||
echo -e "\e[32m\nRemove orphan system packages\e[0m"
|
echo -e "\e[32m\nRemove orphan system packages\e[0m"
|
||||||
for pkg in $orphans; do
|
for pkg in $orphans; do
|
||||||
|
|||||||
4
bin/omarchy-update-time
Executable file
4
bin/omarchy-update-time
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "Updating time..."
|
||||||
|
sudo systemctl restart systemd-timesyncd
|
||||||
@@ -30,7 +30,7 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ${#APP_NAMES[@]} -eq 0 ]]; then
|
if [[ ${#APP_NAMES[@]} -eq 0 ]]; then
|
||||||
echo "You must provide web app names."
|
echo "You must select at least one web app to remove."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -273,7 +273,7 @@ launch_windows() {
|
|||||||
echo "Starting Windows VM..."
|
echo "Starting Windows VM..."
|
||||||
|
|
||||||
# Send desktop notification
|
# Send desktop notification
|
||||||
notify-send "Windows VM" "Starting Windows VM, this may take a moment..."
|
notify-send " Starting Windows VM" " This can take 15-30 seconds" -t 15000
|
||||||
|
|
||||||
if ! docker-compose -f "$COMPOSE_FILE" up -d 2>&1; then
|
if ! docker-compose -f "$COMPOSE_FILE" up -d 2>&1; then
|
||||||
echo "❌ Failed to start Windows VM!"
|
echo "❌ Failed to start Windows VM!"
|
||||||
@@ -298,7 +298,7 @@ launch_windows() {
|
|||||||
done
|
done
|
||||||
|
|
||||||
# Give it a moment more to fully initialize
|
# Give it a moment more to fully initialize
|
||||||
sleep 3
|
sleep 5
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Extract credentials from compose file
|
# Extract credentials from compose file
|
||||||
@@ -339,7 +339,7 @@ To stop: omarchy-windows-vm stop"
|
|||||||
# If scale is less than 130%, don't set any scale (use default 100)
|
# If scale is less than 130%, don't set any scale (use default 100)
|
||||||
|
|
||||||
# Connect with RDP in fullscreen (auto-detects resolution)
|
# Connect with RDP in fullscreen (auto-detects resolution)
|
||||||
xfreerdp3 /u:"$WIN_USER" /p:"$WIN_PASS" /v:127.0.0.1:3389 +f -grab-keyboard /cert:ignore /title:"Windows VM - Omarchy" /floatbar:sticky:off,default:visible,show:fullscreen $RDP_SCALE
|
xfreerdp3 /u:"$WIN_USER" /p:"$WIN_PASS" /v:127.0.0.1:3389 -grab-keyboard /sound /microphone /cert:ignore /title:"Windows VM - Omarchy" /dynamic-resolution /gfx:AVC444 /floatbar:sticky:off,default:visible,show:fullscreen $RDP_SCALE
|
||||||
|
|
||||||
# After RDP closes, stop the container unless --keep-alive was specified
|
# After RDP closes, stop the container unless --keep-alive was specified
|
||||||
if [ "$KEEP_ALIVE" = false ]; then
|
if [ "$KEEP_ALIVE" = false ]; then
|
||||||
|
|||||||
19
boot.sh
19
boot.sh
@@ -19,21 +19,4 @@ echo -e "\n$ansi_art\n"
|
|||||||
|
|
||||||
sudo pacman -Syu --noconfirm --needed git
|
sudo pacman -Syu --noconfirm --needed git
|
||||||
|
|
||||||
# Use custom repo if specified, otherwise default to basecamp/omarchy
|
# FIXME: Update behavior or remove
|
||||||
OMARCHY_REPO="${OMARCHY_REPO:-basecamp/omarchy}"
|
|
||||||
|
|
||||||
echo -e "\nCloning Omarchy from: https://github.com/${OMARCHY_REPO}.git"
|
|
||||||
rm -rf ~/.local/share/omarchy/
|
|
||||||
git clone "https://github.com/${OMARCHY_REPO}.git" ~/.local/share/omarchy >/dev/null
|
|
||||||
|
|
||||||
# Use custom branch if instructed, otherwise default to master
|
|
||||||
OMARCHY_REF="${OMARCHY_REF:-master}"
|
|
||||||
if [[ $OMARCHY_REF != "master" ]]; then
|
|
||||||
echo -e "\e[32mUsing branch: $OMARCHY_REF\e[0m"
|
|
||||||
cd ~/.local/share/omarchy
|
|
||||||
git fetch origin "${OMARCHY_REF}" && git checkout "${OMARCHY_REF}"
|
|
||||||
cd -
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "\nInstallation starting..."
|
|
||||||
source ~/.local/share/omarchy/install.sh
|
|
||||||
|
|||||||
BIN
config/.local/share/fonts/omarchy.ttf
Normal file
BIN
config/.local/share/fonts/omarchy.ttf
Normal file
Binary file not shown.
@@ -1,6 +1,6 @@
|
|||||||
--ozone-platform=wayland
|
--ozone-platform=wayland
|
||||||
--ozone-platform-hint=wayland
|
--ozone-platform-hint=wayland
|
||||||
--enable-features=TouchpadOverscrollHistoryNavigation
|
--enable-features=TouchpadOverscrollHistoryNavigation
|
||||||
--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url
|
--load-extension=/usr/share/omarchy/default/chromium/extensions/copy-url
|
||||||
# Chromium crash workaround for Wayland color management on Hyprland - see https://github.com/hyprwm/Hyprland/issues/11957
|
# Chromium crash workaround for Wayland color management on Hyprland - see https://github.com/hyprwm/Hyprland/issues/11957
|
||||||
--disable-features=WaylandWpColorManagerV1
|
--disable-features=WaylandWpColorManagerV1
|
||||||
|
|||||||
2
config/fcitx5/conf/clipboard.conf
Normal file
2
config/fcitx5/conf/clipboard.conf
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
TriggerKey=
|
||||||
|
PastePrimaryKey=
|
||||||
@@ -17,11 +17,11 @@ gtk-toolbar-style = flat
|
|||||||
# Cursor styling
|
# Cursor styling
|
||||||
cursor-style = "block"
|
cursor-style = "block"
|
||||||
cursor-style-blink = false
|
cursor-style-blink = false
|
||||||
shell-integration-features = no-cursor
|
|
||||||
|
# Cursor styling + SSH session terminfo
|
||||||
|
# (all shell integration options must be passed together)
|
||||||
|
shell-integration-features = no-cursor,ssh-env
|
||||||
|
|
||||||
# Keyboard bindings
|
# Keyboard bindings
|
||||||
keybind = shift+insert=paste_from_clipboard
|
keybind = shift+insert=paste_from_clipboard
|
||||||
keybind = control+insert=copy_to_clipboard
|
keybind = control+insert=copy_to_clipboard
|
||||||
|
|
||||||
# SSH session terminfo
|
|
||||||
shell-integration-features = ssh-env
|
|
||||||
|
|||||||
28
config/git/config
Normal file
28
config/git/config
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# See https://git-scm.com/docs/git-config
|
||||||
|
|
||||||
|
[alias]
|
||||||
|
co = checkout
|
||||||
|
br = branch
|
||||||
|
ci = commit
|
||||||
|
st = status
|
||||||
|
[init]
|
||||||
|
defaultBranch = master
|
||||||
|
[pull]
|
||||||
|
rebase = true # Rebase (instead of merge) on pull
|
||||||
|
[push]
|
||||||
|
autoSetupRemote = true # Automatically set upstream branch on push
|
||||||
|
[diff]
|
||||||
|
algorithm = histogram # Clearer diffs on moved/edited lines
|
||||||
|
colorMoved = plain # Highlight moved blocks in diffs
|
||||||
|
mnemonicPrefix = true # More intuitive refs in diff output
|
||||||
|
[commit]
|
||||||
|
verbose = true # Include diff comment in commit message template
|
||||||
|
[column]
|
||||||
|
ui = auto # Output in columns when possible
|
||||||
|
[branch]
|
||||||
|
sort = -committerdate # Sort branches by most recent commit first
|
||||||
|
[tag]
|
||||||
|
sort = -version:refname # Sort version numbers as you would expect
|
||||||
|
[rerere]
|
||||||
|
enabled = true # Record and reuse conflict resolutions
|
||||||
|
autoupdate = true # Apply stored conflict resolutions automatically
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# Application bindings
|
# Application bindings
|
||||||
$terminal = uwsm-app -- $TERMINAL
|
$terminal = uwsm-app -- xdg-terminal-exec
|
||||||
$browser = omarchy-launch-browser
|
$browser = omarchy-launch-browser
|
||||||
|
|
||||||
bindd = SUPER, RETURN, Terminal, exec, $terminal --working-directory="$(omarchy-cmd-terminal-cwd)"
|
bindd = SUPER, RETURN, Terminal, exec, $terminal --working-directory="$(omarchy-cmd-terminal-cwd)"
|
||||||
@@ -12,9 +12,10 @@ bindd = SUPER SHIFT, T, Activity, exec, $terminal -e btop
|
|||||||
bindd = SUPER SHIFT, D, Docker, exec, $terminal -e lazydocker
|
bindd = SUPER SHIFT, D, Docker, exec, $terminal -e lazydocker
|
||||||
bindd = SUPER SHIFT, G, Signal, exec, omarchy-launch-or-focus signal "uwsm-app -- signal-desktop"
|
bindd = SUPER SHIFT, G, Signal, exec, omarchy-launch-or-focus signal "uwsm-app -- signal-desktop"
|
||||||
bindd = SUPER SHIFT, O, Obsidian, exec, omarchy-launch-or-focus "^obsidian$" "uwsm-app -- obsidian -disable-gpu --enable-wayland-ime"
|
bindd = SUPER SHIFT, O, Obsidian, exec, omarchy-launch-or-focus "^obsidian$" "uwsm-app -- obsidian -disable-gpu --enable-wayland-ime"
|
||||||
|
bindd = SUPER SHIFT, W, Typora, exec, uwsm-app -- typora --enable-wayland-ime
|
||||||
bindd = SUPER SHIFT, SLASH, Passwords, exec, uwsm-app -- 1password
|
bindd = SUPER SHIFT, SLASH, Passwords, exec, uwsm-app -- 1password
|
||||||
|
|
||||||
# If your web app url contains #, type it as ## to prevent hyperland treat it as comments
|
# If your web app url contains #, type it as ## to prevent hyprland treating it as a comment
|
||||||
bindd = SUPER SHIFT, A, ChatGPT, exec, omarchy-launch-webapp "https://chatgpt.com"
|
bindd = SUPER SHIFT, A, ChatGPT, exec, omarchy-launch-webapp "https://chatgpt.com"
|
||||||
bindd = SUPER SHIFT ALT, A, Grok, exec, omarchy-launch-webapp "https://grok.com"
|
bindd = SUPER SHIFT ALT, A, Grok, exec, omarchy-launch-webapp "https://grok.com"
|
||||||
bindd = SUPER SHIFT, C, Calendar, exec, omarchy-launch-webapp "https://app.hey.com/calendar/weeks/"
|
bindd = SUPER SHIFT, C, Calendar, exec, omarchy-launch-webapp "https://app.hey.com/calendar/weeks/"
|
||||||
@@ -22,6 +23,7 @@ bindd = SUPER SHIFT, E, Email, exec, omarchy-launch-webapp "https://app.hey.com"
|
|||||||
bindd = SUPER SHIFT, Y, YouTube, exec, omarchy-launch-webapp "https://youtube.com/"
|
bindd = SUPER SHIFT, Y, YouTube, exec, omarchy-launch-webapp "https://youtube.com/"
|
||||||
bindd = SUPER SHIFT ALT, G, WhatsApp, exec, omarchy-launch-or-focus-webapp WhatsApp "https://web.whatsapp.com/"
|
bindd = SUPER SHIFT ALT, G, WhatsApp, exec, omarchy-launch-or-focus-webapp WhatsApp "https://web.whatsapp.com/"
|
||||||
bindd = SUPER SHIFT CTRL, G, Google Messages, exec, omarchy-launch-or-focus-webapp "Google Messages" "https://messages.google.com/web/conversations"
|
bindd = SUPER SHIFT CTRL, G, Google Messages, exec, omarchy-launch-or-focus-webapp "Google Messages" "https://messages.google.com/web/conversations"
|
||||||
|
bindd = SUPER SHIFT, P, Google Photos, exec, omarchy-launch-or-focus-webapp "Google Photos" "https://photos.google.com/"
|
||||||
bindd = SUPER SHIFT, X, X, exec, omarchy-launch-webapp "https://x.com/"
|
bindd = SUPER SHIFT, X, X, exec, omarchy-launch-webapp "https://x.com/"
|
||||||
bindd = SUPER SHIFT ALT, X, X Post, exec, omarchy-launch-webapp "https://x.com/compose/post"
|
bindd = SUPER SHIFT ALT, X, X Post, exec, omarchy-launch-webapp "https://x.com/compose/post"
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
# Learn how to configure Hyprland: https://wiki.hyprland.org/Configuring/
|
# Learn how to configure Hyprland: https://wiki.hyprland.org/Configuring/
|
||||||
|
|
||||||
# Use defaults Omarchy defaults (but don't edit these directly!)
|
# Use defaults Omarchy defaults (but don't edit these directly!)
|
||||||
source = ~/.local/share/omarchy/default/hypr/autostart.conf
|
source = /usr/share/omarchy/default/hypr/autostart.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/bindings/media.conf
|
source = /usr/share/omarchy/default/hypr/bindings/media.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/bindings/clipboard.conf
|
source = /usr/share/omarchy/default/hypr/bindings/clipboard.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/bindings/tiling-v2.conf
|
source = /usr/share/omarchy/default/hypr/bindings/tiling-v2.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/bindings/utilities.conf
|
source = /usr/share/omarchy/default/hypr/bindings/utilities.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/envs.conf
|
source = /usr/share/omarchy/default/hypr/envs.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/looknfeel.conf
|
source = /usr/share/omarchy/default/hypr/looknfeel.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/input.conf
|
source = /usr/share/omarchy/default/hypr/input.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/windows.conf
|
source = /usr/share/omarchy/default/hypr/windows.conf
|
||||||
source = ~/.config/omarchy/current/theme/hyprland.conf
|
source = ~/.config/omarchy/current/theme/hyprland.conf
|
||||||
|
|
||||||
# Change your own setup in these files (and overwrite any settings from defaults!)
|
# Change your own setup in these files (and overwrite any settings from defaults!)
|
||||||
|
|||||||
@@ -5,7 +5,9 @@ profile {
|
|||||||
identity = true
|
identity = true
|
||||||
}
|
}
|
||||||
|
|
||||||
# Enable auto switch to nightlight:
|
# To enable auto switch to nightlight, set in your .config/hypr/autostart:
|
||||||
|
# exec-once = uwsm app -- hyprsunset
|
||||||
|
# and use the following:
|
||||||
# profile {
|
# profile {
|
||||||
# time = 20:00
|
# time = 20:00
|
||||||
# temperature = 4000
|
# temperature = 4000
|
||||||
|
|||||||
@@ -2,9 +2,10 @@
|
|||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Variables/#general
|
# https://wiki.hyprland.org/Configuring/Variables/#general
|
||||||
general {
|
general {
|
||||||
# No gaps between windows
|
# No gaps between windows or borders
|
||||||
# gaps_in = 0
|
# gaps_in = 0
|
||||||
# gaps_out = 0
|
# gaps_out = 0
|
||||||
|
# border_size = 0
|
||||||
|
|
||||||
# Use master layout instead of dwindle
|
# Use master layout instead of dwindle
|
||||||
# layout = master
|
# layout = master
|
||||||
|
|||||||
2
config/imv/config
Normal file
2
config/imv/config
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
[binds]
|
||||||
|
<Ctrl+p> = exec lp $imv_current_file
|
||||||
36
config/mimeapps.list
Normal file
36
config/mimeapps.list
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
[Default Applications]
|
||||||
|
image/png=imv.desktop
|
||||||
|
image/jpeg=imv.desktop
|
||||||
|
image/gif=imv.desktop
|
||||||
|
image/webp=imv.desktop
|
||||||
|
image/bmp=imv.desktop
|
||||||
|
image/tiff=imv.desktop
|
||||||
|
application/pdf=org.gnome.Evince.desktop
|
||||||
|
x-scheme-handler/http=chromium.desktop
|
||||||
|
x-scheme-handler/https=chromium.desktop
|
||||||
|
text/html=chromium.desktop
|
||||||
|
video/mp4=mpv.desktop
|
||||||
|
video/x-msvideo=mpv.desktop
|
||||||
|
video/x-matroska=mpv.desktop
|
||||||
|
video/x-flv=mpv.desktop
|
||||||
|
video/x-ms-wmv=mpv.desktop
|
||||||
|
video/mpeg=mpv.desktop
|
||||||
|
video/ogg=mpv.desktop
|
||||||
|
video/webm=mpv.desktop
|
||||||
|
video/quicktime=mpv.desktop
|
||||||
|
video/3gpp=mpv.desktop
|
||||||
|
video/3gpp2=mpv.desktop
|
||||||
|
video/x-ms-asf=mpv.desktop
|
||||||
|
video/x-ogm+ogg=mpv.desktop
|
||||||
|
video/x-theora+ogg=mpv.desktop
|
||||||
|
application/ogg=mpv.desktop
|
||||||
|
x-scheme-handler/mailto=HEY.desktop
|
||||||
|
|
||||||
|
[Added Associations]
|
||||||
|
image/png=imv.desktop;
|
||||||
|
image/jpeg=imv.desktop;
|
||||||
|
image/gif=imv.desktop;
|
||||||
|
image/webp=imv.desktop;
|
||||||
|
text/html=chromium.desktop;
|
||||||
|
x-scheme-handler/http=chromium.desktop;
|
||||||
|
x-scheme-handler/https=chromium.desktop;
|
||||||
26
config/omarchy/branding/about.txt
Normal file
26
config/omarchy/branding/about.txt
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
██████████████████████████████████████████████████████
|
||||||
|
██████████████████████████████████████████████████████
|
||||||
|
████ ████ ████
|
||||||
|
████ ████ ████
|
||||||
|
████ █████████████████████ ████████ ████
|
||||||
|
████ █████████████████████ ████████ ████
|
||||||
|
████ ████ ████ ████
|
||||||
|
████ ████ ████ ████
|
||||||
|
████ ████ ████ ████
|
||||||
|
████ ████ ████ ████
|
||||||
|
████ ████ ████ ████
|
||||||
|
████ ████ ████ ████
|
||||||
|
████████████ ████ ████
|
||||||
|
████████████ ████ ████
|
||||||
|
████ ████ ████ ████
|
||||||
|
████ ████ ████ ████
|
||||||
|
████ ████ ████ ████
|
||||||
|
████ ████ ████ ████
|
||||||
|
████ ████ ████ ████
|
||||||
|
████ ████ ████ ████
|
||||||
|
████ ██████████████████████████████████████ ████
|
||||||
|
████ ██████████████████████████████████████ ████
|
||||||
|
████ ████ ████
|
||||||
|
████ ████ ████
|
||||||
|
█████████████████████████████ ████████████████████
|
||||||
|
█████████████████████████████ ████████████████████
|
||||||
10
config/omarchy/branding/screensaver.txt
Normal file
10
config/omarchy/branding/screensaver.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
▄▄▄
|
||||||
|
▄█████▄ ▄███████████▄ ▄███████ ▄███████ ▄███████ ▄█ █▄ ▄█ █▄
|
||||||
|
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
|
||||||
|
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ █▀ ███ ███ ███ ███
|
||||||
|
███ ███ ███ ███ ███ ▄███▄▄▄███ ▄███▄▄▄██▀ ███ ▄███▄▄▄███▄ ███▄▄▄███
|
||||||
|
███ ███ ███ ███ ███ ▀███▀▀▀███ ▀███▀▀▀▀ ███ ▀▀███▀▀▀███ ▀▀▀▀▀▀███
|
||||||
|
███ ███ ███ ███ ███ ███ ███ ██████████ ███ █▄ ███ ███ ▄██ ███
|
||||||
|
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
|
||||||
|
▀█████▀ ▀█ ███ █▀ ███ █▀ ███ ███ ███████▀ ███ █▀ ▀█████▀
|
||||||
|
███ █▀
|
||||||
@@ -1,4 +1,13 @@
|
|||||||
# Changes require a restart to take effect.
|
# Changes require a restart to take effect.
|
||||||
|
|
||||||
export TERMINAL=alacritty
|
# Install other terminals via Install > Terminal
|
||||||
|
export TERMINAL=xdg-terminal-exec
|
||||||
|
|
||||||
|
# Use code for VSCode
|
||||||
export EDITOR=nvim
|
export EDITOR=nvim
|
||||||
|
|
||||||
|
# Use a custom directory for screenshots (remember to make the directory!)
|
||||||
|
# export OMARCHY_SCREENSHOT_DIR="$HOME/Pictures/Screenshots"
|
||||||
|
|
||||||
|
# Use a custom directory for screenrecordings (remember to make the directory!)
|
||||||
|
# export OMARCHY_SCREENRECORD_DIR="$HOME/Videos/Screencasts"
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
# Changes require a restart to take effect.
|
# Changes require a restart to take effect.
|
||||||
|
|
||||||
# Ensure Omarchy bins are in the path
|
# Set default OMARCHY_PATH
|
||||||
export OMARCHY_PATH=$HOME/.local/share/omarchy
|
export OMARCHY_PATH=/usr/share/omarchy
|
||||||
export PATH=$OMARCHY_PATH/bin/:$PATH
|
|
||||||
|
|
||||||
# Set default terminal and editor
|
# Set default terminal and editor
|
||||||
source ~/.config/uwsm/default
|
source ~/.config/uwsm/default
|
||||||
|
|||||||
@@ -1,28 +1,11 @@
|
|||||||
force_keyboard_focus = true # forces keyboard forcus to stay in Walker
|
force_keyboard_focus = true # forces keyboard forcus to stay in Walker
|
||||||
close_when_open = true # close walker when invoking while already opened
|
|
||||||
selection_wrap = true # wrap list if at bottom or top
|
selection_wrap = true # wrap list if at bottom or top
|
||||||
click_to_close = true # closes walker if clicking outside of the main content area
|
|
||||||
global_argument_delimiter = "#" # query: firefox#https://benz.dev => part after delimiter will be ignored when querying. this should be the same as in the elephant config
|
|
||||||
exact_search_prefix = "'" # disable fuzzy searching
|
|
||||||
theme = "omarchy-default" # theme to use
|
theme = "omarchy-default" # theme to use
|
||||||
disable_mouse = false # disable mouse (on input and list only)
|
|
||||||
additional_theme_location = "~/.local/share/omarchy/default/walker/themes/"
|
|
||||||
|
|
||||||
[shell]
|
|
||||||
anchor_top = true
|
|
||||||
anchor_bottom = true
|
|
||||||
anchor_left = true
|
|
||||||
anchor_right = true
|
|
||||||
|
|
||||||
[placeholders]
|
[placeholders]
|
||||||
"default" = { input = " Search...", list = "No Results" } # placeholders for input and empty list, key is the providers name, so f.e. "desktopapplications" or "menus:other"
|
"default" = { input = " Search...", list = "No Results" } # placeholders for input and empty list, key is the providers name, so f.e. "desktopapplications" or "menus:other"
|
||||||
|
|
||||||
[keybinds]
|
[keybinds]
|
||||||
close = ["Escape"]
|
|
||||||
next = ["Down"]
|
|
||||||
previous = ["Up"]
|
|
||||||
toggle_exact = ["ctrl e"]
|
|
||||||
resume_last_query = ["ctrl r"]
|
|
||||||
quick_activate = []
|
quick_activate = []
|
||||||
|
|
||||||
[providers]
|
[providers]
|
||||||
@@ -31,11 +14,6 @@ default = [
|
|||||||
"menus",
|
"menus",
|
||||||
"websearch",
|
"websearch",
|
||||||
] # providers to be queried by default
|
] # providers to be queried by default
|
||||||
empty = ["desktopapplications"] # providers to be queried when query is empty
|
|
||||||
max_results = 50 # global max results
|
|
||||||
|
|
||||||
[providers.sets] # define your own defaults/empty sets of providers
|
|
||||||
[providers.max_results_provider] # define max results per provider in here
|
|
||||||
|
|
||||||
[[providers.prefixes]]
|
[[providers.prefixes]]
|
||||||
prefix = "/"
|
prefix = "/"
|
||||||
@@ -60,86 +38,3 @@ provider = "websearch"
|
|||||||
[[providers.prefixes]]
|
[[providers.prefixes]]
|
||||||
prefix = "$"
|
prefix = "$"
|
||||||
provider = "clipboard"
|
provider = "clipboard"
|
||||||
|
|
||||||
[providers.actions] # This will be MERGED/OVEWRITTEN with what the user specifies
|
|
||||||
dmenu = [{ action = "select", default = true, bind = "Return" }]
|
|
||||||
|
|
||||||
providerlist = [
|
|
||||||
{ action = "activate", default = true, bind = "Return", after = "ClearReload" },
|
|
||||||
]
|
|
||||||
|
|
||||||
bluetooth = [
|
|
||||||
{ action = "find", global = true, bind = "ctrl f", after = "AsyncClearReload" },
|
|
||||||
{ action = "trust", bind = "ctrl t", after = "AsyncReload" },
|
|
||||||
{ action = "untrust", bind = "ctrl t", after = "AsyncReload" },
|
|
||||||
{ action = "pair", bind = "Return", after = "AsyncReload" },
|
|
||||||
{ action = "remove", bind = "ctrl d", after = "AsyncReload" },
|
|
||||||
{ action = "connect", bind = "Return", after = "AsyncReload" },
|
|
||||||
{ action = "disconnect", bind = "Return", after = "AsyncReload" },
|
|
||||||
]
|
|
||||||
|
|
||||||
archlinuxpkgs = [
|
|
||||||
{ action = "install", bind = "Return", default = true },
|
|
||||||
{ action = "remove", bind = "Return" },
|
|
||||||
]
|
|
||||||
|
|
||||||
calc = [
|
|
||||||
{ action = "copy", default = true, bind = "Return" },
|
|
||||||
{ action = "delete", bind = "ctrl d", after = "AsyncReload" },
|
|
||||||
{ action = "save", bind = "ctrl s", after = "AsyncClearReload" },
|
|
||||||
]
|
|
||||||
|
|
||||||
websearch = [
|
|
||||||
{ action = "search", default = true, bind = "Return" },
|
|
||||||
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" },
|
|
||||||
]
|
|
||||||
|
|
||||||
desktopapplications = [
|
|
||||||
{ action = "start", default = true, bind = "Return" },
|
|
||||||
{ action = "start:keep", label = "open+next", bind = "shift Return", after = "KeepOpen" },
|
|
||||||
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "AsyncReload" },
|
|
||||||
{ action = "pin", bind = "ctrl p", after = "AsyncReload" },
|
|
||||||
{ action = "unpin", bind = "ctrl p", after = "AsyncReload" },
|
|
||||||
{ action = "pinup", bind = "ctrl n", after = "AsyncReload" },
|
|
||||||
{ action = "pindown", bind = "ctrl m", after = "AsyncReload" },
|
|
||||||
]
|
|
||||||
|
|
||||||
files = [
|
|
||||||
{ action = "open", default = true, bind = "Return" },
|
|
||||||
{ action = "opendir", label = "open dir", bind = "ctrl Return" },
|
|
||||||
{ action = "copypath", label = "copy path", bind = "ctrl shift c" },
|
|
||||||
{ action = "copyfile", label = "copy file", bind = "ctrl c" },
|
|
||||||
]
|
|
||||||
|
|
||||||
todo = [
|
|
||||||
{ action = "save", default = true, bind = "Return", after = "ClearReload" },
|
|
||||||
{ action = "delete", bind = "ctrl d", after = "ClearReload" },
|
|
||||||
{ action = "active", bind = "Return", after = "ClearReload" },
|
|
||||||
{ action = "inactive", bind = "Return", after = "ClearReload" },
|
|
||||||
{ action = "done", bind = "ctrl f", after = "ClearReload" },
|
|
||||||
{ action = "clear", bind = "ctrl x", after = "ClearReload", global = true },
|
|
||||||
]
|
|
||||||
|
|
||||||
runner = [
|
|
||||||
{ action = "run", default = true, bind = "Return" },
|
|
||||||
{ action = "runterminal", label = "run in terminal", bind = "shift Return" },
|
|
||||||
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" },
|
|
||||||
]
|
|
||||||
|
|
||||||
symbols = [
|
|
||||||
{ action = "run_cmd", label = "select", default = true, bind = "Return" },
|
|
||||||
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" },
|
|
||||||
]
|
|
||||||
|
|
||||||
unicode = [
|
|
||||||
{ action = "run_cmd", label = "select", default = true, bind = "Return" },
|
|
||||||
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" },
|
|
||||||
]
|
|
||||||
|
|
||||||
clipboard = [
|
|
||||||
{ action = "copy", default = true, bind = "Return" },
|
|
||||||
{ action = "remove", bind = "ctrl d", after = "ClearReload" },
|
|
||||||
{ action = "remove_all", global = true, label = "clear", bind = "ctrl shift d", after = "ClearReload" },
|
|
||||||
{ action = "toggle_images", global = true, label = "toggle images", bind = "ctrl i", after = "ClearReload" },
|
|
||||||
{ action = "edit", bind = "ctrl o" },
|
|
||||||
]
|
|
||||||
|
|||||||
@@ -41,6 +41,7 @@
|
|||||||
"custom/omarchy": {
|
"custom/omarchy": {
|
||||||
"format": "<span font='omarchy'>\ue900</span>",
|
"format": "<span font='omarchy'>\ue900</span>",
|
||||||
"on-click": "omarchy-menu",
|
"on-click": "omarchy-menu",
|
||||||
|
"on-click-right": "xdg-terminal-exec",
|
||||||
"tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
|
"tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
|
||||||
},
|
},
|
||||||
"custom/update": {
|
"custom/update": {
|
||||||
@@ -49,13 +50,13 @@
|
|||||||
"on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update",
|
"on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update",
|
||||||
"tooltip-format": "Omarchy update available",
|
"tooltip-format": "Omarchy update available",
|
||||||
"signal": 7,
|
"signal": 7,
|
||||||
"interval": 3600
|
"interval": 21600
|
||||||
},
|
},
|
||||||
|
|
||||||
"cpu": {
|
"cpu": {
|
||||||
"interval": 5,
|
"interval": 5,
|
||||||
"format": "",
|
"format": "",
|
||||||
"on-click": "$TERMINAL -e btop"
|
"on-click": "xdg-terminal-exec btop"
|
||||||
},
|
},
|
||||||
"clock": {
|
"clock": {
|
||||||
"format": "{:L%A %H:%M}",
|
"format": "{:L%A %H:%M}",
|
||||||
@@ -104,7 +105,7 @@
|
|||||||
},
|
},
|
||||||
"pulseaudio": {
|
"pulseaudio": {
|
||||||
"format": "{icon}",
|
"format": "{icon}",
|
||||||
"on-click": "$TERMINAL --class=Wiremix -e wiremix",
|
"on-click": "xdg-terminal-exec --app-id=com.omarchy.Wiremix -e wiremix",
|
||||||
"on-click-right": "pamixer -t",
|
"on-click-right": "pamixer -t",
|
||||||
"tooltip-format": "Playing at {volume}%",
|
"tooltip-format": "Playing at {volume}%",
|
||||||
"scroll-step": 5,
|
"scroll-step": 5,
|
||||||
|
|||||||
@@ -1,9 +1,14 @@
|
|||||||
# File system
|
# File system
|
||||||
|
if command -v eza &> /dev/null; then
|
||||||
alias ls='eza -lh --group-directories-first --icons=auto'
|
alias ls='eza -lh --group-directories-first --icons=auto'
|
||||||
alias lsa='ls -a'
|
alias lsa='ls -a'
|
||||||
alias lt='eza --tree --level=2 --long --icons --git'
|
alias lt='eza --tree --level=2 --long --icons --git'
|
||||||
alias lta='lt -a'
|
alias lta='lt -a'
|
||||||
|
fi
|
||||||
|
|
||||||
alias ff="fzf --preview 'bat --style=numbers --color=always {}'"
|
alias ff="fzf --preview 'bat --style=numbers --color=always {}'"
|
||||||
|
|
||||||
|
if command -v zoxide &> /dev/null; then
|
||||||
alias cd="zd"
|
alias cd="zd"
|
||||||
zd() {
|
zd() {
|
||||||
if [ $# -eq 0 ]; then
|
if [ $# -eq 0 ]; then
|
||||||
@@ -14,6 +19,8 @@ zd() {
|
|||||||
z "$@" && printf "\U000F17A9 " && pwd || echo "Error: Directory not found"
|
z "$@" && printf "\U000F17A9 " && pwd || echo "Error: Directory not found"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
fi
|
||||||
|
|
||||||
open() {
|
open() {
|
||||||
xdg-open "$@" >/dev/null 2>&1 &
|
xdg-open "$@" >/dev/null 2>&1 &
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
source ~/.local/share/omarchy/default/bash/shell
|
source /usr/share/omarchy/default/bash/shell
|
||||||
source ~/.local/share/omarchy/default/bash/aliases
|
source /usr/share/omarchy/default/bash/aliases
|
||||||
source ~/.local/share/omarchy/default/bash/functions
|
source /usr/share/omarchy/default/bash/functions
|
||||||
source ~/.local/share/omarchy/default/bash/prompt
|
source /usr/share/omarchy/default/bash/prompt
|
||||||
source ~/.local/share/omarchy/default/bash/init
|
source /usr/share/omarchy/default/bash/init
|
||||||
source ~/.local/share/omarchy/default/bash/envs
|
source /usr/share/omarchy/default/bash/envs
|
||||||
[[ $- == *i* ]] && bind -f ~/.local/share/omarchy/default/bash/inputrc
|
[[ $- == *i* ]] && bind -f /usr/share/omarchy/default/bash/inputrc
|
||||||
|
|||||||
@@ -9,6 +9,5 @@ if [[ ! -v BASH_COMPLETION_VERSINFO && -f /usr/share/bash-completion/bash_comple
|
|||||||
source /usr/share/bash-completion/bash_completion
|
source /usr/share/bash-completion/bash_completion
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set complete path
|
# Ensure command hashing is off for mise
|
||||||
export PATH="$HOME/.local/bin:$PATH"
|
|
||||||
set +h
|
set +h
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
|
# If not running interactively, don't do anything (leave this at the top of this file)
|
||||||
|
[[ $- != *i* ]] && return
|
||||||
|
|
||||||
# All the default Omarchy aliases and functions
|
# All the default Omarchy aliases and functions
|
||||||
# (don't mess with these directly, just overwrite them here!)
|
# (don't mess with these directly, just overwrite them here!)
|
||||||
source ~/.local/share/omarchy/default/bash/rc
|
source /usr/share/omarchy/default/bash/rc
|
||||||
|
|
||||||
# Add your own exports, aliases, and functions here.
|
# Add your own exports, aliases, and functions here.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
# App-specific tweaks
|
# App-specific tweaks
|
||||||
source = ~/.local/share/omarchy/default/hypr/apps/1password.conf
|
source = /usr/share/omarchy/default/hypr/apps/1password.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/apps/bitwarden.conf
|
source = /usr/share/omarchy/default/hypr/apps/bitwarden.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/apps/browser.conf
|
source = /usr/share/omarchy/default/hypr/apps/browser.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/apps/hyprshot.conf
|
source = /usr/share/omarchy/default/hypr/apps/hyprshot.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/apps/jetbrains.conf
|
source = /usr/share/omarchy/default/hypr/apps/jetbrains.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/apps/localsend.conf
|
source = /usr/share/omarchy/default/hypr/apps/localsend.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/apps/pip.conf
|
source = /usr/share/omarchy/default/hypr/apps/pip.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/apps/qemu.conf
|
source = /usr/share/omarchy/default/hypr/apps/qemu.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/apps/retroarch.conf
|
source = /usr/share/omarchy/default/hypr/apps/retroarch.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/apps/steam.conf
|
source = /usr/share/omarchy/default/hypr/apps/steam.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/apps/system.conf
|
source = /usr/share/omarchy/default/hypr/apps/system.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/apps/terminals.conf
|
source = /usr/share/omarchy/default/hypr/apps/terminals.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/apps/walker.conf
|
source = /usr/share/omarchy/default/hypr/apps/walker.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/apps/webcam-overlay.conf
|
source = /usr/share/omarchy/default/hypr/apps/webcam-overlay.conf
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
# Fixing popup size issue
|
# JetBrains windows default size
|
||||||
windowrule = size 50% 50%, class:(.*jetbrains.*)$, title:^$,floating:1
|
windowrule = size 50% 50%, class:(.*jetbrains.*)$, title:^$
|
||||||
|
|
||||||
# Fix tab dragging (always have a single space character as their title)
|
# Fix tab dragging (tab titles are just one space)
|
||||||
windowrule = noinitialfocus, class:^(.*jetbrains.*)$, title:^\\s$
|
windowrule = noinitialfocus, class:^(.*jetbrains.*)$, title:^\\s$
|
||||||
windowrule = nofocus, class:^(.*jetbrains.*)$, title:^\\s$
|
|
||||||
|
# Allow dialogs (like "Send usage statistics") to be focusable and clickable
|
||||||
|
windowrule = unset,nofocus,class:^(.*jetbrains.*)$,title:^$
|
||||||
|
windowrule = unset,noinitialfocus,class:^(.*jetbrains.*)$,title:^$
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Picture-in-picture overlays
|
# Picture-in-picture overlays
|
||||||
windowrule = tag +pip, title:(Picture.{0,1}in.{0,1}[Pp]icture)
|
windowrule = tag +pip, title:(Picture.?in.?[Pp]icture)
|
||||||
windowrule = float, tag:pip
|
windowrule = float, tag:pip
|
||||||
windowrule = pin, tag:pip
|
windowrule = pin, tag:pip
|
||||||
windowrule = size 600 338, tag:pip
|
windowrule = size 600 338, tag:pip
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
# Floating windows
|
# Floating windows
|
||||||
windowrule = float, tag:floating-window
|
windowrule = float, tag:floating-window
|
||||||
windowrule = center, tag:floating-window
|
windowrule = center, tag:floating-window
|
||||||
windowrule = size 800 600, tag:floating-window
|
windowrule = size 875 600, tag:floating-window
|
||||||
|
|
||||||
windowrule = tag +floating-window, class:(blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|com.gabm.satty|Omarchy|About|TUI.float)
|
windowrule = tag +floating-window, class:(blueberry.py|com.omarchy.Impala|com.omarchy.Wiremix|com.omarchy.Omarchy|org.gnome.NautilusPreviewer|com.gabm.satty|Omarchy|About|TUI.float)
|
||||||
windowrule = 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)
|
windowrule = 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.*)
|
||||||
windowrule = float, class:org.gnome.Calculator
|
windowrule = float, class:org.gnome.Calculator
|
||||||
|
|
||||||
# Fullscreen screensaver
|
# Fullscreen screensaver
|
||||||
@@ -12,3 +12,6 @@ windowrule = fullscreen, class:Screensaver
|
|||||||
|
|
||||||
# No transparency on media windows
|
# No transparency on media windows
|
||||||
windowrule = opacity 1 1, class:^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$
|
windowrule = opacity 1 1, class:^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$
|
||||||
|
|
||||||
|
# Popped window rounding
|
||||||
|
windowrule = rounding 8, tag:pop
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
exec-once = omarchy-set-user
|
||||||
exec-once = uwsm-app -- hypridle
|
exec-once = uwsm-app -- hypridle
|
||||||
exec-once = uwsm-app -- mako
|
exec-once = uwsm-app -- mako
|
||||||
exec-once = uwsm-app -- waybar
|
exec-once = uwsm-app -- waybar
|
||||||
@@ -8,3 +9,7 @@ exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
|||||||
exec-once = omarchy-cmd-first-run
|
exec-once = omarchy-cmd-first-run
|
||||||
exec-once = uwsm-app -- elephant
|
exec-once = uwsm-app -- elephant
|
||||||
exec-once = uwsm-app -- walker --gapplication-service
|
exec-once = uwsm-app -- walker --gapplication-service
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|||||||
@@ -11,6 +11,6 @@ bindd = SUPER, G, Messenger, exec, $messenger
|
|||||||
bindd = SUPER, O, Obsidian, exec, obsidian -disable-gpu
|
bindd = SUPER, O, Obsidian, exec, obsidian -disable-gpu
|
||||||
bindd = SUPER, SLASH, Password manager, exec, $passwordManager
|
bindd = SUPER, SLASH, Password manager, exec, $passwordManager
|
||||||
|
|
||||||
source = ~/.local/share/omarchy/default/hypr/bindings/media.conf
|
source = /usr/share/omarchy/default/hypr/bindings/media.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/bindings/tiling.conf
|
source = /usr/share/omarchy/default/hypr/bindings/tiling.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/bindings/utilities.conf
|
source = /usr/share/omarchy/default/hypr/bindings/utilities.conf
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Copy / Paste
|
# Copy / Paste
|
||||||
bindd = SUPER, C, Copy, sendshortcut, CTRL, Insert,
|
bindd = SUPER, C, Universal copy, sendshortcut, CTRL, Insert,
|
||||||
bindd = SUPER, V, Paste, sendshortcut, SHIFT, Insert,
|
bindd = SUPER, V, Universal paste, sendshortcut, SHIFT, Insert,
|
||||||
bindd = SUPER, X, Cut, sendshortcut, CTRL, X,
|
bindd = SUPER, X, Universal cut, sendshortcut, CTRL, X,
|
||||||
bindd = SUPER CTRL, V, Clipboard, exec, omarchy-launch-walker -m clipboard
|
bindd = SUPER CTRL, V, Clipboard manager, exec, omarchy-launch-walker -m clipboard
|
||||||
|
|||||||
@@ -1,22 +1,23 @@
|
|||||||
# Close windows
|
# Close windows
|
||||||
bindd = SUPER, W, Close active window, killactive,
|
bindd = SUPER, W, Close window, killactive,
|
||||||
bindd = CTRL ALT, DELETE, Close all Windows, exec, omarchy-cmd-close-all-windows
|
bindd = CTRL ALT, DELETE, Close all windows, exec, omarchy-hyprland-window-close-all
|
||||||
|
|
||||||
# Control tiling
|
# Control tiling
|
||||||
bindd = SUPER, J, Toggle split, togglesplit, # dwindle
|
bindd = SUPER, J, Toggle window split, togglesplit, # dwindle
|
||||||
bindd = SUPER, P, Pseudo window, pseudo, # dwindle
|
bindd = SUPER, P, Pseudo window, pseudo, # dwindle
|
||||||
bindd = SUPER, T, Toggle floating, togglefloating,
|
bindd = SUPER, T, Toggle window floating/tiling, togglefloating,
|
||||||
bindd = SUPER, F, Force full screen, fullscreen, 0
|
bindd = SUPER, F, Full screen, fullscreen, 0
|
||||||
bindd = SUPER CTRL, F, Tiled full screen, fullscreenstate, 0 2
|
bindd = SUPER CTRL, F, Tiled full screen, fullscreenstate, 0 2
|
||||||
bindd = SUPER ALT, F, Full width, fullscreen, 1
|
bindd = SUPER ALT, F, Full width, fullscreen, 1
|
||||||
|
bindd = SUPER, O, Pop window out (float & pin), exec, omarchy-hyprland-window-pop
|
||||||
|
|
||||||
# Move focus with SUPER + arrow keys
|
# Move focus with SUPER + arrow keys
|
||||||
bindd = SUPER, LEFT, Move focus left, movefocus, l
|
bindd = SUPER, LEFT, Move window focus left, movefocus, l
|
||||||
bindd = SUPER, RIGHT, Move focus right, movefocus, r
|
bindd = SUPER, RIGHT, Move window focus right, movefocus, r
|
||||||
bindd = SUPER, UP, Move focus up, movefocus, u
|
bindd = SUPER, UP, Move window focus up, movefocus, u
|
||||||
bindd = SUPER, DOWN, Move focus down, movefocus, d
|
bindd = SUPER, DOWN, Move window focus down, movefocus, d
|
||||||
|
|
||||||
# Switch workspaces with SUPER + [0-9]
|
# Switch workspaces with SUPER + [1-9]
|
||||||
bindd = SUPER, code:10, Switch to workspace 1, workspace, 1
|
bindd = SUPER, code:10, Switch to workspace 1, workspace, 1
|
||||||
bindd = SUPER, code:11, Switch to workspace 2, workspace, 2
|
bindd = SUPER, code:11, Switch to workspace 2, workspace, 2
|
||||||
bindd = SUPER, code:12, Switch to workspace 3, workspace, 3
|
bindd = SUPER, code:12, Switch to workspace 3, workspace, 3
|
||||||
@@ -26,9 +27,8 @@ bindd = SUPER, code:15, Switch to workspace 6, workspace, 6
|
|||||||
bindd = SUPER, code:16, Switch to workspace 7, workspace, 7
|
bindd = SUPER, code:16, Switch to workspace 7, workspace, 7
|
||||||
bindd = SUPER, code:17, Switch to workspace 8, workspace, 8
|
bindd = SUPER, code:17, Switch to workspace 8, workspace, 8
|
||||||
bindd = SUPER, code:18, Switch to workspace 9, workspace, 9
|
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]
|
# Move active window to a workspace with SUPER + SHIFT + [1-9]
|
||||||
bindd = SUPER SHIFT, code:10, Move window to workspace 1, movetoworkspace, 1
|
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:11, Move window to workspace 2, movetoworkspace, 2
|
||||||
bindd = SUPER SHIFT, code:12, Move window to workspace 3, movetoworkspace, 3
|
bindd = SUPER SHIFT, code:12, Move window to workspace 3, movetoworkspace, 3
|
||||||
@@ -38,7 +38,10 @@ 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:16, Move window to workspace 7, movetoworkspace, 7
|
||||||
bindd = SUPER SHIFT, code:17, Move window to workspace 8, movetoworkspace, 8
|
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:18, Move window to workspace 9, movetoworkspace, 9
|
||||||
bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10
|
|
||||||
|
# Control scratchpad
|
||||||
|
bindd = SUPER, S, Toggle scratchpad, togglespecialworkspace, scratchpad
|
||||||
|
bindd = SUPER ALT, S, Move window to scratchpad, movetoworkspacesilent, special:scratchpad
|
||||||
|
|
||||||
# TAB between workspaces
|
# TAB between workspaces
|
||||||
bindd = SUPER, TAB, Next workspace, workspace, e+1
|
bindd = SUPER, TAB, Next workspace, workspace, e+1
|
||||||
@@ -85,6 +88,10 @@ bindd = SUPER ALT, DOWN, Move window to group on bottom, moveintogroup, d
|
|||||||
bindd = SUPER ALT, TAB, Next window in group, changegroupactive, f
|
bindd = SUPER ALT, TAB, Next window in group, changegroupactive, f
|
||||||
bindd = SUPER ALT SHIFT, TAB, Previous window in group, changegroupactive, b
|
bindd = SUPER ALT SHIFT, TAB, Previous window in group, changegroupactive, b
|
||||||
|
|
||||||
|
# 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
|
# Activate window in a group by number
|
||||||
bindd = SUPER ALT, 1, Switch to group window 1, changegroupactive, 1
|
bindd = SUPER ALT, 1, Switch to group window 1, changegroupactive, 1
|
||||||
bindd = SUPER ALT, 2, Switch to group window 2, changegroupactive, 2
|
bindd = SUPER ALT, 2, Switch to group window 2, changegroupactive, 2
|
||||||
|
|||||||
@@ -2,13 +2,13 @@
|
|||||||
# Do not make changes here, but bring them to tiling-v2.conf instead.
|
# Do not make changes here, but bring them to tiling-v2.conf instead.
|
||||||
|
|
||||||
# Close windows
|
# Close windows
|
||||||
bindd = SUPER, W, Close active window, killactive,
|
bindd = SUPER, W, Close window, killactive,
|
||||||
bindd = CTRL ALT, DELETE, Close all Windows, exec, omarchy-cmd-close-all-windows
|
bindd = CTRL ALT, DELETE, Close all windows, exec, omarchy-hyprland-window-close-all
|
||||||
|
|
||||||
# Control tiling
|
# Control tiling
|
||||||
bindd = SUPER, J, Toggle split, togglesplit, # dwindle
|
bindd = SUPER, J, Toggle window split, togglesplit, # dwindle
|
||||||
bindd = SUPER, P, Pseudo window, pseudo, # dwindle
|
bindd = SUPER, P, Pseudo window, pseudo, # dwindle
|
||||||
bindd = SUPER SHIFT, V, Toggle floating, togglefloating,
|
bindd = SUPER SHIFT, V, Toggle window floating/tiling, togglefloating,
|
||||||
bindd = SHIFT, F11, Force full screen, fullscreen, 0
|
bindd = SHIFT, F11, Force full screen, fullscreen, 0
|
||||||
bindd = ALT, F11, Full width, fullscreen, 1
|
bindd = ALT, F11, Full width, fullscreen, 1
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
bindd = SUPER, SPACE, Launch apps, exec, omarchy-launch-walker
|
bindd = SUPER, SPACE, Launch apps, exec, omarchy-launch-walker
|
||||||
bindd = SUPER CTRL, E, Emoji picker, exec, omarchy-launch-walker -m symbols
|
bindd = SUPER CTRL, E, Emoji picker, exec, omarchy-launch-walker -m symbols
|
||||||
bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu
|
bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu
|
||||||
bindd = SUPER, ESCAPE, Power menu, exec, omarchy-menu system
|
bindd = SUPER, ESCAPE, System menu, exec, omarchy-menu system
|
||||||
bindld = , XF86PowerOff, Power menu, exec, omarchy-menu system
|
bindld = , XF86PowerOff, Power menu, exec, omarchy-menu system
|
||||||
bindd = SUPER, K, Show key bindings, exec, omarchy-menu-keybindings
|
bindd = SUPER, K, Show key bindings, exec, omarchy-menu-keybindings
|
||||||
bindd = , XF86Calculator, Calculator, exec, gnome-calculator
|
bindd = , XF86Calculator, Calculator, exec, gnome-calculator
|
||||||
@@ -10,8 +10,9 @@ bindd = , XF86Calculator, Calculator, exec, gnome-calculator
|
|||||||
# Aesthetics
|
# Aesthetics
|
||||||
bindd = SUPER SHIFT, SPACE, Toggle top bar, exec, omarchy-toggle-waybar
|
bindd = SUPER SHIFT, SPACE, Toggle top bar, exec, omarchy-toggle-waybar
|
||||||
bindd = SUPER CTRL, SPACE, Next background in theme, exec, omarchy-theme-bg-next
|
bindd = SUPER CTRL, SPACE, Next background in theme, exec, omarchy-theme-bg-next
|
||||||
bindd = SUPER SHIFT CTRL, SPACE, Pick new theme, exec, omarchy-menu theme
|
bindd = SUPER SHIFT CTRL, SPACE, Theme menu, exec, omarchy-menu theme
|
||||||
bindd = SUPER, BACKSPACE, Toggle window transparency, exec, hyprctl dispatch setprop "address:$(hyprctl activewindow -j | jq -r '.address')" opaque toggle
|
bindd = SUPER, BACKSPACE, Toggle window transparency, exec, hyprctl dispatch setprop "address:$(hyprctl activewindow -j | jq -r '.address')" opaque toggle
|
||||||
|
bindd = SUPER SHIFT, BACKSPACE, Toggle workspace gaps, exec, omarchy-hyprland-workspace-toggle-gaps
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
bindd = SUPER, COMMA, Dismiss last notification, exec, makoctl dismiss
|
bindd = SUPER, COMMA, Dismiss last notification, exec, makoctl dismiss
|
||||||
@@ -30,10 +31,14 @@ bindd = CTRL, F2, Apple Display brightness up, exec, omarchy-cmd-apple-display-b
|
|||||||
bindd = SHIFT CTRL, F2, Apple Display full brightness, exec, omarchy-cmd-apple-display-brightness +60000
|
bindd = SHIFT CTRL, F2, Apple Display full brightness, exec, omarchy-cmd-apple-display-brightness +60000
|
||||||
|
|
||||||
# Captures
|
# Captures
|
||||||
bindd = , PRINT, Screenshot, exec, omarchy-cmd-screenshot
|
bindd = , PRINT, Screenshot with editing, exec, omarchy-cmd-screenshot
|
||||||
bindd = SHIFT, PRINT, Screenshot, exec, omarchy-cmd-screenshot smart clipboard
|
bindd = SHIFT, PRINT, Screenshot to clipboard, exec, omarchy-cmd-screenshot smart clipboard
|
||||||
bindd = ALT, PRINT, Screenrecording, exec, omarchy-menu screenrecord
|
bindd = ALT, PRINT, Screenrecording, exec, omarchy-menu screenrecord
|
||||||
bindd = SUPER, PRINT, Color picking, exec, pkill hyprpicker || hyprpicker -a
|
bindd = SUPER, PRINT, Color picker, exec, pkill hyprpicker || hyprpicker -a
|
||||||
|
|
||||||
# File sharing
|
# File sharing
|
||||||
bindd = CTRL SUPER, S, Share, exec, omarchy-menu share
|
bindd = SUPER CTRL, S, Share, exec, omarchy-menu share
|
||||||
|
|
||||||
|
# Waybar-less information
|
||||||
|
bindd = SUPER CTRL, T, Show time, exec, notify-send " $(date +"%A %H:%M — %d %B W%V %Y")"
|
||||||
|
bindd = SUPER CTRL, B, Show battery remaining, exec, notify-send " Battery is at $(omarchy-battery-remaining)%"
|
||||||
|
|||||||
@@ -120,9 +120,17 @@ misc {
|
|||||||
disable_splash_rendering = true
|
disable_splash_rendering = true
|
||||||
focus_on_activate = true
|
focus_on_activate = true
|
||||||
anr_missed_pings = 3
|
anr_missed_pings = 3
|
||||||
|
new_window_takes_over_fullscreen = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# https://wiki.hypr.land/Configuring/Variables/#cursor
|
# https://wiki.hypr.land/Configuring/Variables/#cursor
|
||||||
cursor {
|
cursor {
|
||||||
hide_on_key_press = true
|
hide_on_key_press = 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,0 # Black
|
||||||
|
env = GUM_CONFIRM_UNSELECTED_BACKGROUND,8 # Dark grey
|
||||||
|
|||||||
@@ -8,4 +8,4 @@ windowrule = opacity 0.97 0.9, class:.*
|
|||||||
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
|
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
|
||||||
|
|
||||||
# App-specific tweaks
|
# App-specific tweaks
|
||||||
source = ~/.local/share/omarchy/default/hypr/apps.conf
|
source = /usr/share/omarchy/default/hypr/apps.conf
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
@import "../../../../../../../.config/omarchy/current/theme/walker.css";
|
@import "../../../omarchy/current/theme/walker.css";
|
||||||
|
|
||||||
* {
|
* {
|
||||||
all: unset;
|
all: unset;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
if pgrep -f "gpu-screen-recorder" >/dev/null; then
|
if pgrep -f "^gpu-screen-recorder" >/dev/null; then
|
||||||
echo '{"text": "", "tooltip": "Stop recording", "class": "active"}'
|
echo '{"text": "", "tooltip": "Stop recording", "class": "active"}'
|
||||||
else
|
else
|
||||||
echo '{"text": ""}'
|
echo '{"text": ""}'
|
||||||
|
|||||||
750
etc/cups/cups-browsed.conf
Normal file
750
etc/cups/cups-browsed.conf
Normal file
@@ -0,0 +1,750 @@
|
|||||||
|
# All configuration options described here can also be supplied on the
|
||||||
|
# command line of cups-browsed via the "-o" option. In case of
|
||||||
|
# contradicting settings the setting defined in the configuration file
|
||||||
|
# will get used.
|
||||||
|
|
||||||
|
# Unknown directives are ignored, also unknown values.
|
||||||
|
|
||||||
|
|
||||||
|
# Where should cups-browsed save information about the print queues it had
|
||||||
|
# generated when shutting down, like whether one of these queues was the
|
||||||
|
# default printer, or default option settings of the queues?
|
||||||
|
|
||||||
|
# CacheDir /var/cache/cups
|
||||||
|
|
||||||
|
|
||||||
|
# Where should cups-browsed create its debug log file (if "DebugLogging file"
|
||||||
|
# is set)?
|
||||||
|
|
||||||
|
# LogDir /var/log/cups
|
||||||
|
|
||||||
|
|
||||||
|
# How should debug logging be done? Into the file
|
||||||
|
# /var/log/cups/cups-browsed_log ('file'), to stderr ('stderr'), or
|
||||||
|
# not at all ('none')?
|
||||||
|
|
||||||
|
# Note that if cups-browsed is running as a system service (for
|
||||||
|
# example via systemd) logging to stderr makes the log output going to
|
||||||
|
# the journal or syslog. Only if you run cups-browsed from the command
|
||||||
|
# line (for development or debugging) it will actually appear on
|
||||||
|
# stderr.
|
||||||
|
|
||||||
|
# DebugLogging file
|
||||||
|
# DebugLogging stderr
|
||||||
|
# DebugLogging file stderr
|
||||||
|
# DebugLogging none
|
||||||
|
|
||||||
|
|
||||||
|
# Which protocols will we use to discover printers on the network?
|
||||||
|
# Can use DNSSD or 'none'.
|
||||||
|
|
||||||
|
BrowseRemoteProtocols dnssd
|
||||||
|
|
||||||
|
|
||||||
|
# Which protocols will we use to broadcast shared local printers to the network?
|
||||||
|
# Can use DNSSD or 'none'.
|
||||||
|
# Broadcasting is currently not supported, as DNSSD is done by CUPS itself
|
||||||
|
# (we ignore DNSSD in this directive).
|
||||||
|
|
||||||
|
# BrowseLocalProtocols none
|
||||||
|
|
||||||
|
|
||||||
|
# Settings of this directive apply to both BrowseRemoteProtocols and
|
||||||
|
# BrowseLocalProtocols.
|
||||||
|
# Can use DNSSD or 'none'.
|
||||||
|
|
||||||
|
# BrowseProtocols none
|
||||||
|
|
||||||
|
|
||||||
|
# Only browse remote printers (via DNS-SD) from
|
||||||
|
# selected servers using the "BrowseAllow", "BrowseDeny", and
|
||||||
|
# "BrowseOrder" directives
|
||||||
|
|
||||||
|
# This serves for restricting the choice of printers in print dialogs
|
||||||
|
# to trusted servers or to reduce the number of listed printers in the
|
||||||
|
# print dialogs to a more user-friendly amount in large networks with
|
||||||
|
# very many shared printers.
|
||||||
|
|
||||||
|
# This only filters the selection of remote printers for which
|
||||||
|
# cups-browsed creates local queues. If the print dialog uses other
|
||||||
|
# mechanisms to list remote printers as for example direct DNS-SD
|
||||||
|
# access, cups-browsed has no influence. cups-browsed also does not
|
||||||
|
# prevent the user from manually accessing non-listed printers.
|
||||||
|
|
||||||
|
# "BrowseAllow": Accept printers from these hosts or networks. If
|
||||||
|
# there are only "BrowseAllow" lines and no "BrowseOrder" and/or
|
||||||
|
# "BrowseDeny" lines, only servers matching at last one "BrowseAllow"
|
||||||
|
# line are accepted.
|
||||||
|
|
||||||
|
# "BrowseDeny": Deny printers from these hosts or networks. If there
|
||||||
|
# are only "BrowseDeny" lines and no "BrowseOrder" and/or
|
||||||
|
# "BrowseAllow" lines, all servers NOT matching any of the
|
||||||
|
# "BrowseDeny" lines are accepted.
|
||||||
|
|
||||||
|
# "BrowseOrder": Determine the order in which "BrowseAllow" and
|
||||||
|
# "BrowseDeny" lines are applied. With "BrowseOrder Deny,Allow" in the
|
||||||
|
# beginning all servers are accepted, then the "BrowseDeny" lines are
|
||||||
|
# applied to exclude unwished servers or networks and after that the
|
||||||
|
# "BrowseAllow" lines to re-include servers or networks. With
|
||||||
|
# "BrowseOrder Allow,Deny" we start with denying all servers, then
|
||||||
|
# applying the "BrowseAllow" lines and afterwards the "BrowseDeny"
|
||||||
|
# lines.
|
||||||
|
|
||||||
|
# Default for "BrowseOrder" is "Deny.Allow" if there are both
|
||||||
|
# "BrowseAllow" and "BrowseDeny" lines.
|
||||||
|
|
||||||
|
# If there are no "Browse..." lines at all, all servers are accepted.
|
||||||
|
|
||||||
|
# BrowseAllow All
|
||||||
|
# BrowseAllow cups.example.com
|
||||||
|
# BrowseAllow 192.168.1.12
|
||||||
|
# BrowseAllow 192.168.1.0/24
|
||||||
|
# BrowseAllow 192.168.1.0/255.255.255.0
|
||||||
|
|
||||||
|
# BrowseDeny All
|
||||||
|
# BrowseDeny printserver.example.com
|
||||||
|
# BrowseDeny 192.168.1.13
|
||||||
|
# BrowseDeny 192.168.3.0/24
|
||||||
|
# BrowseDeny 192.168.3.0/255.255.255.0
|
||||||
|
|
||||||
|
# BrowseOrder Deny,Allow
|
||||||
|
# BrowseOrder Allow,Deny
|
||||||
|
|
||||||
|
|
||||||
|
# The interval between browsing/broadcasting cycles, local and/or
|
||||||
|
# remote, can be adjusted with the BrowseInterval directive.
|
||||||
|
|
||||||
|
# BrowseInterval 60
|
||||||
|
|
||||||
|
|
||||||
|
# Browsing-related operations such as adding or removing printer queues
|
||||||
|
# and broadcasting are each allowed to take up to a given amount of time.
|
||||||
|
# It can be configured, in seconds, with the BrowseTimeout directive.
|
||||||
|
|
||||||
|
# BrowseTimeout 300
|
||||||
|
|
||||||
|
# Filtering of remote printers by other properties than IP addresses
|
||||||
|
# of their servers
|
||||||
|
|
||||||
|
# Often the desired selection of printers cannot be reached by only
|
||||||
|
# taking into account the IP addresses of the servers. For these cases
|
||||||
|
# there is the BrowseFilter directive to filter by most of the known
|
||||||
|
# properties of the printer.
|
||||||
|
|
||||||
|
# By default there is no BrowseFilter line meaning that no filtering
|
||||||
|
# is applied.
|
||||||
|
|
||||||
|
# To do filtering one can supply one or more BrowseFilter directives
|
||||||
|
# like this:
|
||||||
|
|
||||||
|
# BrowseFilter [NOT] [EXACT] <FIELD> [<VALUE>]
|
||||||
|
|
||||||
|
# The BrowseFilter directive always starts with the word
|
||||||
|
# "BrowseFilter" and it must at least contain the name of the data
|
||||||
|
# field (<FIELD>) of the printer's properties to which it should
|
||||||
|
# apply.
|
||||||
|
|
||||||
|
# Available field names are:
|
||||||
|
|
||||||
|
# name: Name of the local print queue to be created
|
||||||
|
# host: Host name of the remote print server
|
||||||
|
# port: Port through which the printer is accessed on the server
|
||||||
|
# service: DNS/SD service name of the remote printer
|
||||||
|
# domain: Domain of the remote print server
|
||||||
|
|
||||||
|
# Also all field names in the TXT records of DNS-SD-advertised printers
|
||||||
|
# are valid, like "color", "duplex", "pdl", ... If the field name of
|
||||||
|
# the filter rule does not exist for the printer, the rule is skipped.
|
||||||
|
|
||||||
|
# The optional <VALUE> field is either the exact value (when the
|
||||||
|
# option EXACT is supplied) or a regular expression (Run "man 7 regex"
|
||||||
|
# in a terminal window) to be matched with the data field.
|
||||||
|
|
||||||
|
# If no <VALUE> filed is supplied, rules with field names of the TXT
|
||||||
|
# record are considered for boolean matching (true/false) of boolean
|
||||||
|
# field (like duplex, which can have the values "T" for true and "F"
|
||||||
|
# for false).
|
||||||
|
|
||||||
|
# If the option NOT is supplied, the filter rule is fulfilled if the
|
||||||
|
# regular expression or the exact value DOES NOT match the content of
|
||||||
|
# the data field. In a boolean rule (without <VALUE>) the rule matches
|
||||||
|
# false.
|
||||||
|
|
||||||
|
# Regular expressions are always considered case-insensitive and
|
||||||
|
# extended POSIX regular expressions. Field names and options (NOT,
|
||||||
|
# EXACT) are all evaluated case-insensitive. If there is an error in a
|
||||||
|
# regular expression, the BrowseFilter line gets ignored.
|
||||||
|
|
||||||
|
# Especially to note is that supplying any simple string consisting of
|
||||||
|
# only letters, numbers, spaces, and some basic special characters as
|
||||||
|
# a regular expression matches if it is contained somewhere in the
|
||||||
|
# data field.
|
||||||
|
|
||||||
|
# If there is more than one BrowseFilter directive, ALL the directives
|
||||||
|
# need to be fulfilled for the remote printer to be accepted. If one
|
||||||
|
# is not fulfilled, the printer will get ignored.
|
||||||
|
|
||||||
|
# Examples:
|
||||||
|
|
||||||
|
# Rules for standard data items which are supplied with any remote
|
||||||
|
# printer advertised via DNS-SD:
|
||||||
|
|
||||||
|
# Print queue name must contain "hum_res_", this matches
|
||||||
|
# "hum_res_mono" or "hum_res_color" but also "old_hum_res_mono":
|
||||||
|
|
||||||
|
# BrowseFilter name hum_res_
|
||||||
|
|
||||||
|
# This matches if the remote host name contains "printserver", like
|
||||||
|
# "printserver.local", "printserver2.example.com", "newprintserver":
|
||||||
|
|
||||||
|
# BrowseFilter host printserver
|
||||||
|
|
||||||
|
# This matches all ports with 631 int its number, for example 631,
|
||||||
|
# 8631, 10631,...:
|
||||||
|
|
||||||
|
# BrowseFilter port 631
|
||||||
|
|
||||||
|
# This rule matches if the DNS-SD service name contains "@ printserver":
|
||||||
|
|
||||||
|
# Browsefilter service @ printserver
|
||||||
|
|
||||||
|
# Matches all domains with "local" in their names, not only "local" but
|
||||||
|
# also things like "printlocally.com":
|
||||||
|
|
||||||
|
# BrowseFilter domain local
|
||||||
|
|
||||||
|
# Examples for rules applying to items of the TXT record:
|
||||||
|
|
||||||
|
# This rule selects PostScript printers, as the "PDL" field in the TXT
|
||||||
|
# record contains "postscript" then. This includes also remote CUPS
|
||||||
|
# queues which accept PostScript, independent of whether the physical
|
||||||
|
# printer behind the CUPS queue accepts PostScript or not.
|
||||||
|
|
||||||
|
# BrowseFilter pdl postscript
|
||||||
|
|
||||||
|
# Color printers usually contain a "Color" entry set to "T" (for true)
|
||||||
|
# in the TXT record. This rule selects them:
|
||||||
|
|
||||||
|
# BrowseFilter color
|
||||||
|
|
||||||
|
# This is a similar rule to select only duplex (automatic double-sided
|
||||||
|
# printing) printers:
|
||||||
|
|
||||||
|
# BrowseFilter duplex
|
||||||
|
|
||||||
|
# Rules with the NOT option:
|
||||||
|
|
||||||
|
# This rule EXCLUDES printers from all hosts containing "financial" in
|
||||||
|
# their names, nice to get rid of the 100s of printers of the
|
||||||
|
# financial department:
|
||||||
|
|
||||||
|
# BrowseFilter NOT host financial
|
||||||
|
|
||||||
|
# Get only monochrome printers ("Color" set to "F", meaning false, in
|
||||||
|
# the TXT record):
|
||||||
|
|
||||||
|
# BrowseFilter NOT color
|
||||||
|
|
||||||
|
# Rules with more advanced use of regular expressions:
|
||||||
|
|
||||||
|
# Only queue names which BEGIN WITH "hum_res_" are accepted now, so we
|
||||||
|
# still get "hum_res_mono" or "hum_res_color" but not
|
||||||
|
# "old_hum_res_mono" any more:
|
||||||
|
|
||||||
|
# BrowseFilter name ^hum_res_
|
||||||
|
|
||||||
|
# Server names is accepted if it contains "print_server" OR
|
||||||
|
# "graphics_dep_server":
|
||||||
|
|
||||||
|
# BrowseFilter host print_server|graphics_dep_server
|
||||||
|
|
||||||
|
# "printserver1", "printserver2", and "printserver3", nothing else:
|
||||||
|
|
||||||
|
# BrowseFilter host ^printserver[1-3]$
|
||||||
|
|
||||||
|
# Printers understanding at least one of PostScript, PCL, or PDF:
|
||||||
|
|
||||||
|
# BrowseFilter pdl postscript|pcl|pdf
|
||||||
|
|
||||||
|
# Examples for the EXACT option:
|
||||||
|
|
||||||
|
# Only printers from "printserver.local" are accepted:
|
||||||
|
|
||||||
|
# BrowseFilter EXACT host printserver.local
|
||||||
|
|
||||||
|
# Printers from all servers except "prinserver2.local" are accepted:
|
||||||
|
|
||||||
|
# BrowseFilter NOT EXACT host prinserver2.local
|
||||||
|
|
||||||
|
|
||||||
|
# Use BrowsePoll to poll a particular CUPS server
|
||||||
|
|
||||||
|
# BrowsePoll cups.example.com
|
||||||
|
# BrowsePoll cups.example.com:631
|
||||||
|
# BrowsePoll cups.example.com:631/version=1.1
|
||||||
|
|
||||||
|
|
||||||
|
# Use DomainSocket to access the local CUPS daemon via another than the
|
||||||
|
# default domain socket. "None" or "Off" lets cups-browsed not use CUPS'
|
||||||
|
# domain socket.
|
||||||
|
|
||||||
|
# DomainSocket /var/run/cups/cups.sock
|
||||||
|
# DomainSocket None
|
||||||
|
# DomainSocket Off
|
||||||
|
|
||||||
|
|
||||||
|
# Set HTTP timeout (in seconds) for requests sent to local/remote
|
||||||
|
# resources Note that too short timeouts can make services getting
|
||||||
|
# missed when they are present and operations be unnecessarily
|
||||||
|
# repeated and too long timeouts can make operations take too long
|
||||||
|
# when the server does not respond.
|
||||||
|
|
||||||
|
# HttpLocalTimeout 5
|
||||||
|
# HttpRemoteTimeout 10
|
||||||
|
|
||||||
|
# Set how many retries (N) should cups-browsed do for creating print
|
||||||
|
# queues for remote printers which receive timeouts during print queue
|
||||||
|
# creation. The printers which are not successfully set up even after
|
||||||
|
# N retries, are skipped until the next restart of the service. Note
|
||||||
|
# that too many retries can cause high CPU load.
|
||||||
|
|
||||||
|
# HttpMaxRetries 5
|
||||||
|
|
||||||
|
# Set OnlyUnsupportedByCUPS to "Yes" will make cups-browsed not create
|
||||||
|
# local queues for remote printers for which CUPS creates queues by
|
||||||
|
# itself. These printers are printers advertised via DNS-SD and doing
|
||||||
|
# CUPS-supported (currently PWG Raster and Apple Raster) driverless
|
||||||
|
# printing, including remote CUPS queues. Queues for other printers
|
||||||
|
# (like for legacy PostScript/PCL printers) are always created
|
||||||
|
# (depending on the other configuration settings of cups-browsed).
|
||||||
|
|
||||||
|
# With OnlyUnsupportedByCUPS set to "No", cups-browsed creates queues
|
||||||
|
# for all printers which it supports, including printers for which
|
||||||
|
# CUPS would create queues by itself. Temporary queues created by CUPS
|
||||||
|
# will get overwritten. This way it is assured that any extra
|
||||||
|
# functionality of cups-browsed will apply to these queues. As queues
|
||||||
|
# created by cups-browsed are permanent CUPS queues this setting is
|
||||||
|
# also recommended if applications/print dialogs which do not support
|
||||||
|
# temporary CUPS queues are installed. This setting is the default.
|
||||||
|
|
||||||
|
# OnlyUnsupportedByCUPS Yes
|
||||||
|
|
||||||
|
|
||||||
|
# With UseCUPSGeneratedPPDs set to "Yes" cups-browsed creates queues
|
||||||
|
# for IPP printers with PPDs generated by the PPD generator of CUPS
|
||||||
|
# and not with the one of cups-browsed. So any new development in
|
||||||
|
# CUPS' PPD generator gets available. As CUPS' PPD generator is not
|
||||||
|
# directly accessible, we need to make CUPS generate a temporary print
|
||||||
|
# queue with the desired PPD. Therefore we can only use these PPDs
|
||||||
|
# when our queue replaces a temporary CUPS queue, meaning that the
|
||||||
|
# queue is for a printer on which CUPS supports driverless printing
|
||||||
|
# (IPP 2.x, PDLs: PDF, PWG Raster, and/or Apple Raster) and that its
|
||||||
|
# name is the same as CUPS uses for the temporary queue
|
||||||
|
# ("LocalQueueNamingIPPPrinter DNS-SD" must be set). The directive
|
||||||
|
# applies only to IPP printers, not to remote CUPS queues, to not
|
||||||
|
# break clustering. Setting this directive to "No" lets cups-browsed
|
||||||
|
# generate the PPD file. Default setting is "No".
|
||||||
|
|
||||||
|
# UseCUPSGeneratedPPDs No
|
||||||
|
|
||||||
|
|
||||||
|
# With the directives LocalQueueNamingRemoteCUPS and
|
||||||
|
# LocalQueueNamingIPPPrinter you can determine how the names for local
|
||||||
|
# queues generated by cups-browsed are generated, separately for
|
||||||
|
# remote CUPS printers and IPP printers.
|
||||||
|
|
||||||
|
# DNS-SD (the default in both cases) bases the naming on the service
|
||||||
|
# name of the printer's advertised DNS-SD record. This is exactly the
|
||||||
|
# same naming scheme as CUPS uses for its temporary queues, so the
|
||||||
|
# local queue from cups-browsed prevents CUPS from listing and
|
||||||
|
# creating an additional queue. As DNS-SD service names have to be
|
||||||
|
# unique, queue names of printers from different servers will also be
|
||||||
|
# unique and so there is no automatic clustering for load-balanced
|
||||||
|
# printing.
|
||||||
|
|
||||||
|
# MakeModel bases the queue name on the printer's manufacturer and
|
||||||
|
# model names. This scheme cups-browsed used formerly for IPP
|
||||||
|
# printers.
|
||||||
|
|
||||||
|
# RemoteName is only available for remote CUPS queues and uses the
|
||||||
|
# name of the queue on the remote CUPS server as the local queue's
|
||||||
|
# name. This makes printers on different CUPS servers with equal queue
|
||||||
|
# names automatically forming a load-balancing cluster as CUPS did
|
||||||
|
# formerly (CUPS 1.5.x and older) with CUPS-broadcasted remote
|
||||||
|
# printers. This scheme cups-browsed used formerly for remote CUPS
|
||||||
|
# printers.
|
||||||
|
|
||||||
|
# LocalQueueNamingRemoteCUPS DNS-SD
|
||||||
|
# LocalQueueNamingRemoteCUPS MakeModel
|
||||||
|
# LocalQueueNamingRemoteCUPS RemoteName
|
||||||
|
# LocalQueueNamingIPPPrinter DNS-SD
|
||||||
|
# LocalQueueNamingIPPPrinter MakeModel
|
||||||
|
|
||||||
|
|
||||||
|
# Set DNSSDBasedDeviceURIs to "Yes" if cups-browsed should use
|
||||||
|
# DNS-SD-service-name-based device URIs for its local queues, as CUPS
|
||||||
|
# also does. These queues use the DNS-SD service name of the
|
||||||
|
# discovered printer. With this the URI is independent of network
|
||||||
|
# interfaces and ports, giving reliable connections to always the same
|
||||||
|
# physical device. This setting is the default.
|
||||||
|
|
||||||
|
# Set DNSSDBasedDeviceURIs to "No" if cups-browsed should use the
|
||||||
|
# conventional host-name/IP-based URIs.
|
||||||
|
|
||||||
|
# Note that this option has only influence on URIs for printers
|
||||||
|
# discovered via DNS-SD, not via BrowsePoll.
|
||||||
|
# Those printers get always assigned the conventional URIs.
|
||||||
|
|
||||||
|
# DNSSDBasedDeviceURIs Yes
|
||||||
|
|
||||||
|
|
||||||
|
# Set IPBasedDeviceURIs to "Yes" if cups-browsed should create its
|
||||||
|
# local queues with device URIs with the IP addresses instead of the
|
||||||
|
# host names of the remote servers. This mode is there for any
|
||||||
|
# problems with host name resolution in the network, especially also
|
||||||
|
# if avahi-daemon is only run for printer discovery and already
|
||||||
|
# stopped while still printing. By default this mode is turned off,
|
||||||
|
# meaning that we use URIs with host names.
|
||||||
|
|
||||||
|
# Note that the IP addresses depend on the network interface through
|
||||||
|
# which the printer is accessed. So do not use IP-based URIs on systems
|
||||||
|
# with many network interfaces and where interfaces can appear and
|
||||||
|
# disappear frequently.
|
||||||
|
|
||||||
|
# This mode could also be useful for development and debugging.
|
||||||
|
|
||||||
|
# If you prefer IPv4 or IPv6 IP addresses in the URIs, you can set
|
||||||
|
# IPBasedDeviceURIs to "IPv4" to only get IPv4 IP addresses or
|
||||||
|
# IPBasedDeviceURIs to "IPv6" to only get IPv6 IP addresses.
|
||||||
|
|
||||||
|
# IPBasedDeviceURIs No
|
||||||
|
# IPBasedDeviceURIs Yes
|
||||||
|
# IPBasedDeviceURIs IPv4
|
||||||
|
# IPBasedDeviceURIs IPv6
|
||||||
|
|
||||||
|
# The AllowResharingRemoteCUPSPrinters directive determines whether a
|
||||||
|
# print queue pointing to a remote CUPS queue will be re-shared to the
|
||||||
|
# local network or not. Since the queues generated using the BrowsePoll
|
||||||
|
# directive are also pointing to remote queues, they are also shared
|
||||||
|
# automatically if the following option is set. Default is not to share
|
||||||
|
# remote printers.
|
||||||
|
|
||||||
|
# AllowResharingRemoteCUPSPrinters Yes
|
||||||
|
|
||||||
|
# The NewBrowsePollQueuesShared directive determines whether a print
|
||||||
|
# queue for a newly discovered printer (discovered by the BrowsePoll directive)
|
||||||
|
# will be shared to the local network or not. This directive will only work
|
||||||
|
# if AllowResharingRemoteCUPSPrinters is set to yes. Default is
|
||||||
|
# not to share printers discovered using BrowsePoll.
|
||||||
|
|
||||||
|
# NewBrowsePollQueuesShared Yes
|
||||||
|
|
||||||
|
# Set CreateRemoteRawPrinterQueues to "Yes" to let cups-browsed also
|
||||||
|
# create local queues pointing to remote raw CUPS queues. Normally,
|
||||||
|
# only queues pointing to remote queues with PPD/driver are created
|
||||||
|
# as we do not use drivers on the client side, but in some cases
|
||||||
|
# accessing a remote raw queue can make sense, for example if the
|
||||||
|
# queue forwards the jobs by a special backend like Tea4CUPS.
|
||||||
|
|
||||||
|
# CreateRemoteRawPrinterQueues Yes
|
||||||
|
|
||||||
|
|
||||||
|
# cups-browsed by default creates local print queues for each shared
|
||||||
|
# CUPS print queue which it discovers on remote machines in the local
|
||||||
|
# network(s). Set CreateRemoteCUPSPrinterQueues to "No" if you do not
|
||||||
|
# want cups-browsed to do this. For example you can set cups-browsed
|
||||||
|
# to only create queues for IPP network printers setting
|
||||||
|
# CreateIPPPrinterQueues not to "No" and CreateRemoteCUPSPrinterQueues
|
||||||
|
# to "No".
|
||||||
|
|
||||||
|
# CreateRemoteCUPSPrinterQueues No
|
||||||
|
|
||||||
|
|
||||||
|
# Set CreateIPPPrinterQueues to "All" to let cups-browsed discover IPP
|
||||||
|
# network printers (native printers, not CUPS queues) with known page
|
||||||
|
# description languages (PWG Raster, PDF, PostScript, PCL XL, PCL
|
||||||
|
# 5c/e) in the local network and auto-create print queues for them.
|
||||||
|
|
||||||
|
# Set CreateIPPPrinterQueues to "Everywhere" to let cups-browsed
|
||||||
|
# discover IPP Everywhere printers in the local network (native
|
||||||
|
# printers, not CUPS queues) and auto-create print queues for them.
|
||||||
|
|
||||||
|
# Set CreateIPPPrinterQueues to "AppleRaster" to let cups-browsed
|
||||||
|
# discover Apple Raster printers in the local network (native
|
||||||
|
# printers, not CUPS queues) and auto-create print queues for them.
|
||||||
|
|
||||||
|
# Set CreateIPPPrinterQueues to "Driverless" to let cups-browsed
|
||||||
|
# discover printers designed for driverless use (currently IPP
|
||||||
|
# Everywhere and Apple Raster) in the local network (native printers,
|
||||||
|
# not CUPS queues) and auto-create print queues for them.
|
||||||
|
|
||||||
|
# Set CreateIPPPrinterQueues to "LocalOnly" to auto-create print
|
||||||
|
# queues only for local printers made available as IPP printers. These
|
||||||
|
# are for example IPP-over-USB printers, made available via
|
||||||
|
# ippusbxd. This is the default.
|
||||||
|
|
||||||
|
# Set CreateIPPPrinterQueues to "No" to not auto-create print queues
|
||||||
|
# for IPP network printers.
|
||||||
|
|
||||||
|
# The PPDs are auto-generated by cups-browsed based on properties of
|
||||||
|
# the printer polled via IPP. In case of missing information, info
|
||||||
|
# from the Bonjour record is used as last mean for the default values.
|
||||||
|
|
||||||
|
# This functionality is primarily for mobile devices running
|
||||||
|
# CUPS to not need a printer setup tool nor a collection of printer
|
||||||
|
# drivers and PPDs.
|
||||||
|
|
||||||
|
# CreateIPPPrinterQueues No
|
||||||
|
# CreateIPPPrinterQueues LocalOnly
|
||||||
|
# CreateIPPPrinterQueues Everywhere
|
||||||
|
# CreateIPPPrinterQueues AppleRaster
|
||||||
|
# CreateIPPPrinterQueues Everywhere AppleRaster
|
||||||
|
# CreateIPPPrinterQueues Driverless
|
||||||
|
# CreateIPPPrinterQueues All
|
||||||
|
|
||||||
|
|
||||||
|
# The NewIPPPrinterQueuesShared directive determines whether a print
|
||||||
|
# queue for a newly discovered IPP network printer (not remote CUPS
|
||||||
|
# queue) will be shared to the local network or not. This is only
|
||||||
|
# valid for newly discovered printers. For printers discovered in an
|
||||||
|
# earlier cups-browsed session, cups-browsed will remember whether the
|
||||||
|
# printer was shared, so changes by the user get conserved. Default is
|
||||||
|
# not to share newly discovered IPP printers.
|
||||||
|
|
||||||
|
# NewIPPPrinterQueuesShared Yes
|
||||||
|
|
||||||
|
|
||||||
|
# How to handle the print queues cups-browsed creates when
|
||||||
|
# cups-browsed is shut down:
|
||||||
|
|
||||||
|
# "KeepGeneratedQueuesOnShutdown No" makes the queues being
|
||||||
|
# removed. This makes sense as these queues only work while
|
||||||
|
# cups-browsed is running. cups-browsed has to determine to which
|
||||||
|
# member printer of a cluster to pass on the job.
|
||||||
|
|
||||||
|
# "KeepGeneratedQueuesOnShutdown Yes" (the default) makes the queues
|
||||||
|
# not being removed. This is the recommended setting for a system
|
||||||
|
# where cups-browsed is permanently running and only stopped for short
|
||||||
|
# times (like log rotation) or on shutdown. This avoids the
|
||||||
|
# re-creation of the queues when cups-browsed is restarted, which
|
||||||
|
# often causes a clutter of CUPS notifications on the desktop.
|
||||||
|
|
||||||
|
# KeepGeneratedQueuesOnShutdown No
|
||||||
|
|
||||||
|
# If there is more than one remote CUPS printer whose local queue
|
||||||
|
# would get the same name and AutoClustering is set to "Yes" (the
|
||||||
|
# default) only one local queue is created which makes up a
|
||||||
|
# load-balancing cluster of the remote printers which would get this
|
||||||
|
# queue name (implicit class). This means that when several jobs are
|
||||||
|
# sent to this queue they get distributed between the printers, using
|
||||||
|
# the method chosen by the LoadBalancing directive.
|
||||||
|
|
||||||
|
# Note that the forming of clusters depends on the naming scheme for
|
||||||
|
# local queues created by cups-browsed. If you have set
|
||||||
|
# LocalQueueNamingRemoteCUPS to "DNSSD" you will not get automatic
|
||||||
|
# clustering as the DNS-SD service names are always unique. With
|
||||||
|
# LocalQueueNamingRemoteCUPS set to "RemoteName" local queues are
|
||||||
|
# named as the CUPS queues on the remote servers are named and so
|
||||||
|
# equally named queues on different servers get clustered (this is how
|
||||||
|
# CUPS did it in version 1.5.x or older). LocalQueueNamingRemoteCUPS
|
||||||
|
# set to "MakeModel" makes remote printers of the same model get
|
||||||
|
# clustered. Note that then a cluster can contain more than one queue
|
||||||
|
# of the same server.
|
||||||
|
|
||||||
|
# With AutoClustering set to "No", for each remote CUPS printer an
|
||||||
|
# individual local queue is created, and to avoid name clashes when
|
||||||
|
# using the LocalQueueNamingRemoteCUPS settings "RemoteName" or
|
||||||
|
# "MakeModel" "@<server name>" is added to the local queue name.
|
||||||
|
|
||||||
|
# Only remote CUPS printers get clustered, not IPP network printers or
|
||||||
|
# IPP-over-USB printers.
|
||||||
|
|
||||||
|
# AutoClustering Yes
|
||||||
|
# AutoClustering No
|
||||||
|
|
||||||
|
|
||||||
|
# Load-balancing printer cluster formation can also be manually
|
||||||
|
# controlled by defining explicitly which remote CUPS printers should
|
||||||
|
# get clustered together.
|
||||||
|
|
||||||
|
# This is done by the "Cluster" directive:
|
||||||
|
|
||||||
|
# Cluster <QUEUENAME>: <EXPRESSION1> <EXPRESSION2> ...
|
||||||
|
# Cluster <QUEUENAME>
|
||||||
|
|
||||||
|
# If no expressions are given, <QUEUENAME> is used as the first and
|
||||||
|
# only expression for this cluster.
|
||||||
|
|
||||||
|
# Discovered printers are matched against all the expressions of all
|
||||||
|
# defined clusters. The first expression which matches the discovered
|
||||||
|
# printer determines to which cluster it belongs. Note that this way a
|
||||||
|
# printer can only belong to one cluster. Once matched, further
|
||||||
|
# cluster definitions will not checked any more.
|
||||||
|
|
||||||
|
# With the first printer matching a cluster's expression a local queue
|
||||||
|
# with the name <QUEUENAME> is created. If more printers are
|
||||||
|
# discovered and match this cluster, they join the cluster. Printing
|
||||||
|
# to this queue prints to all these printers in a load-balancing
|
||||||
|
# manner, according to to the setting of the LoadBalancing directive.
|
||||||
|
|
||||||
|
# Each expression must be a string of characters without spaces. If
|
||||||
|
# spaces are needed, replace them by underscores ('_').
|
||||||
|
|
||||||
|
# An expression can be matched in three ways:
|
||||||
|
|
||||||
|
# 1. By the name of the CUPS queue on the remote server
|
||||||
|
# 2. By make and model name of the remote printer
|
||||||
|
# 3. By the DNS-SD service name of the remote printer
|
||||||
|
|
||||||
|
# Note that the matching is done case-insensitively and any group of
|
||||||
|
# non-alphanumerical characters is replaced by a single underscore.
|
||||||
|
|
||||||
|
# So if an expression is "HP_DeskJet_2540" and the remote server
|
||||||
|
# reports "hp Deskjet-2540" the printer gets matched to this cluster.
|
||||||
|
|
||||||
|
# If "AutoClustering" is not set to "No" both your manual cluster
|
||||||
|
# definitions will be followed and automatic clustering of
|
||||||
|
# equally-named remote queues will be performed. If a printer matches
|
||||||
|
# in both categories the match to the manually defined cluster has
|
||||||
|
# priority. Automatic clustering of equally-named remote printers is
|
||||||
|
# not performed if there is a manually defined cluster with this name
|
||||||
|
# (at least as the printers do not match this cluster).
|
||||||
|
|
||||||
|
# Examples:
|
||||||
|
|
||||||
|
# To cluster all remote CUPS queues named "laserprinter" in your local
|
||||||
|
# network but not cluster any other equally-named remote CUPS printers
|
||||||
|
# use (Local queue will get named "laserprinter"):
|
||||||
|
|
||||||
|
# AutoClustering No
|
||||||
|
# Cluster laserprinter
|
||||||
|
|
||||||
|
# To cluster all remote CUPS queues of HP LaserJet 4050 printers in a
|
||||||
|
# local queue named "LJ4050":
|
||||||
|
|
||||||
|
# Cluster LJ4050: HP_LaserJet_4050
|
||||||
|
|
||||||
|
# As DNS-SD service names are unique in a network you can create a
|
||||||
|
# cluster from exactly specified printers (spaces replaced by
|
||||||
|
# underscores):
|
||||||
|
|
||||||
|
# Cluster hrdep: oldlaser_@_hr-server1 newlaser_@_hr-server2
|
||||||
|
|
||||||
|
|
||||||
|
# The LoadBalancing directive switches between two methods of handling
|
||||||
|
# load balancing between equally-named remote queues which are
|
||||||
|
# represented by one local print queue making up a cluster of them
|
||||||
|
# (implicit class).
|
||||||
|
|
||||||
|
# The two methods are:
|
||||||
|
|
||||||
|
# Queuing of jobs on the client (LoadBalancing QueueOnClient):
|
||||||
|
|
||||||
|
# Here we queue up the jobs on the client and regularly check the
|
||||||
|
# clustered remote print queues. If we find an idle queue, we pass
|
||||||
|
# on a job to it.
|
||||||
|
|
||||||
|
# This is also the method which CUPS uses for classes. Advantage is a
|
||||||
|
# more even distribution of the job workload on the servers
|
||||||
|
# (especially if the printing speed of the servers is very different),
|
||||||
|
# and if a server fails, there are not several jobs stuck or
|
||||||
|
# lost. Disadvantage is that if one takes the client (laptop, mobile
|
||||||
|
# phone, ...) out of the local network, printing stops with the jobs
|
||||||
|
# waiting in the local queue.
|
||||||
|
|
||||||
|
# Queuing of jobs on the servers (LoadBalancing QueueOnServers):
|
||||||
|
|
||||||
|
# Here we check the number of jobs on each of the clustered remote
|
||||||
|
# printers and send an incoming job immediately to the remote printer
|
||||||
|
# with the lowest amount of jobs in its queue. This way no jobs queue
|
||||||
|
# up locally, all jobs which are waiting are waiting on one of the
|
||||||
|
# remote servers.
|
||||||
|
|
||||||
|
# Not having jobs waiting locally has the advantage that we can take
|
||||||
|
# the local machine from the network and all jobs get printed.
|
||||||
|
# Disadvantage is that if a server with a full queue of jobs goes
|
||||||
|
# away, the jobs go away, too.
|
||||||
|
|
||||||
|
# Default is queuing the jobs on the client as this is what CUPS does
|
||||||
|
# with classes.
|
||||||
|
|
||||||
|
# LoadBalancing QueueOnClient
|
||||||
|
# LoadBalancing QueueOnServers
|
||||||
|
|
||||||
|
|
||||||
|
# With the DefaultOptions directive one or more option settings can be
|
||||||
|
# defined to be applied to every print queue newly created by
|
||||||
|
# cups-browsed. Each option is supplied as one supplies options with
|
||||||
|
# the "-o" command line argument to the "lpadmin" command (Run "man
|
||||||
|
# lpadmin" for more details). More than one option can be supplied
|
||||||
|
# separating the options by spaces. By default no option settings are
|
||||||
|
# pre-defined.
|
||||||
|
|
||||||
|
# Note that print queues which cups-browsed already created before
|
||||||
|
# remember their previous settings and so these settings do not get
|
||||||
|
# applied.
|
||||||
|
|
||||||
|
# DefaultOptions Option1=Value1 Option2=Value2 Option3 noOption4
|
||||||
|
|
||||||
|
|
||||||
|
# The AutoShutdown directive specifies whether cups-browsed should
|
||||||
|
# automatically terminate when it has no local raw queues set up
|
||||||
|
# pointing to any discovered remote printers or no jobs on such queues
|
||||||
|
# depending on AutoShutdownOn setting (auto shutdown mode). Setting it
|
||||||
|
# to "On" activates the auto-shutdown mode, setting it to "Off"
|
||||||
|
# deactiivates it (the default). The special mode "avahi" turns auto
|
||||||
|
# shutdown off while avahi-daemon is running and on when avahi-daemon
|
||||||
|
# stops. This allows running cups-browsed on-demand when avahi-daemon
|
||||||
|
# is run on-demand.
|
||||||
|
|
||||||
|
# AutoShutdown Off
|
||||||
|
# AutoShutdown On
|
||||||
|
# AutoShutdown avahi
|
||||||
|
|
||||||
|
|
||||||
|
# The AutoShutdownOn directive determines what event cups-browsed
|
||||||
|
# considers as inactivity in auto shutdown mode. "NoQueues" (the
|
||||||
|
# default) means that auto shutdown is initiated when there are no
|
||||||
|
# queues for discovered remote printers generated by cups-browsed any
|
||||||
|
# more. "NoJobs" means that all queues generated by cups-browsed are
|
||||||
|
# without jobs.
|
||||||
|
|
||||||
|
# AutoShutdownOn NoQueues
|
||||||
|
# AutoShutdownOn NoJobs
|
||||||
|
|
||||||
|
|
||||||
|
# The AutoShutdownTimeout directive specifies after how many seconds
|
||||||
|
# without local raw queues set up pointing to any discovered remote
|
||||||
|
# printers or jobs on these queues cups-browsed should actually shut
|
||||||
|
# down in auto shutdown mode. Default is 30 seconds, 0 means immediate
|
||||||
|
# shutdown.
|
||||||
|
|
||||||
|
# AutoShutdownTimeout 30
|
||||||
|
|
||||||
|
# DebugLogFileSize defines the maximum size possible (in KBytes)
|
||||||
|
# of the log files (cups-browsed_log and cups-browsed_previous_logs)
|
||||||
|
# that is created using cups-browsed in the debugging mode.
|
||||||
|
# Setting its value to 0 would turn off any restriction
|
||||||
|
# on the size of the file.
|
||||||
|
|
||||||
|
# DebugLogFileSize 300
|
||||||
|
|
||||||
|
# NotifLeaseDuration defines how long the D-BUS subscription created by cups-browsed
|
||||||
|
# in cupsd will last before cupsd cancels it. The default value is 1 day
|
||||||
|
# in seconds - 86400. The subscription renewal is set to happen after half of
|
||||||
|
# NotifLeaseDuration passed. The D-BUS notifications are used for watching over queues
|
||||||
|
# and doing specific actions when a D-BUS notification comes.
|
||||||
|
|
||||||
|
# NotifLeaseDuration 86400
|
||||||
|
|
||||||
|
# FrequentNetifUpdate turns on/off the network interface update routines
|
||||||
|
# which happen for each found entry, which can slow up cups-browsed significantly
|
||||||
|
# if we are on a network with many shared printers or if we use BrowsePoll to a server
|
||||||
|
# with many queues. Network interface updates after receiving D-BUS notification
|
||||||
|
# from NetworkManager won't be turned off with the directive. The default value
|
||||||
|
# is 'Yes'.
|
||||||
|
#
|
||||||
|
# FrequentNetifUpdate Yes
|
||||||
|
|
||||||
|
# Omarchy: Automatically create queues for discovered remote printers
|
||||||
|
CreateRemotePrinters Yes
|
||||||
6
etc/docker/daemon.json
Normal file
6
etc/docker/daemon.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"log-driver": "json-file",
|
||||||
|
"log-opts": { "max-size": "10m", "max-file": "5" },
|
||||||
|
"dns": ["172.17.0.1"],
|
||||||
|
"bip": "172.17.0.1/16"
|
||||||
|
}
|
||||||
7
etc/gnupg/dirmngr.conf
Normal file
7
etc/gnupg/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
|
||||||
1
etc/modprobe.d/omarchy-usb-autosuspend.conf
Normal file
1
etc/modprobe.d/omarchy-usb-autosuspend.conf
Normal file
@@ -0,0 +1 @@
|
|||||||
|
options usbcore autosuspend=-1
|
||||||
19
etc/nsswitch.conf
Normal file
19
etc/nsswitch.conf
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# Name Service Switch configuration file.
|
||||||
|
# See nsswitch.conf(5) for details.
|
||||||
|
|
||||||
|
passwd: files systemd
|
||||||
|
group: files [SUCCESS=merge] systemd
|
||||||
|
shadow: files systemd
|
||||||
|
gshadow: files systemd
|
||||||
|
|
||||||
|
publickey: files
|
||||||
|
|
||||||
|
hosts: mymachines mdns_minimal [NOTFOUND=return] resolve files myhostname dns
|
||||||
|
networks: files
|
||||||
|
|
||||||
|
protocols: files
|
||||||
|
services: files
|
||||||
|
ethers: files
|
||||||
|
rpc: files
|
||||||
|
|
||||||
|
netgroup: files
|
||||||
11
etc/pacman.d/hooks/walker-restart.hook
Normal file
11
etc/pacman.d/hooks/walker-restart.hook
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[Trigger]
|
||||||
|
Type = Package
|
||||||
|
Operation = Upgrade
|
||||||
|
Target = walker
|
||||||
|
Target = walker-debug
|
||||||
|
Target = elephant*
|
||||||
|
|
||||||
|
[Action]
|
||||||
|
Description = Restarting Walker services after system update
|
||||||
|
When = PostTransaction
|
||||||
|
Exec = /usr/bin/omarchy-restart-walker
|
||||||
3
etc/plymouth/plymouthd.conf
Normal file
3
etc/plymouth/plymouthd.conf
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[Daemon]
|
||||||
|
Theme=omarchy
|
||||||
|
ShowDelay=0
|
||||||
62
etc/security/faillock.conf
Normal file
62
etc/security/faillock.conf
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
# Configuration for locking the user after multiple failed
|
||||||
|
# authentication attempts.
|
||||||
|
#
|
||||||
|
# The directory where the user files with the failure records are kept.
|
||||||
|
# The default is /var/run/faillock.
|
||||||
|
# dir = /var/run/faillock
|
||||||
|
#
|
||||||
|
# Will log the user name into the system log if the user is not found.
|
||||||
|
# Enabled if option is present.
|
||||||
|
# audit
|
||||||
|
#
|
||||||
|
# Don't print informative messages.
|
||||||
|
# Enabled if option is present.
|
||||||
|
# silent
|
||||||
|
#
|
||||||
|
# Don't log informative messages via syslog.
|
||||||
|
# Enabled if option is present.
|
||||||
|
# no_log_info
|
||||||
|
#
|
||||||
|
# Only track failed user authentications attempts for local users
|
||||||
|
# in /etc/passwd and ignore centralized (AD, IdM, LDAP, etc.) users.
|
||||||
|
# The `faillock` command will also no longer track user failed
|
||||||
|
# authentication attempts. Enabling this option will prevent a
|
||||||
|
# double-lockout scenario where a user is locked out locally and
|
||||||
|
# in the centralized mechanism.
|
||||||
|
# Enabled if option is present.
|
||||||
|
# local_users_only
|
||||||
|
#
|
||||||
|
# Deny access if the number of consecutive authentication failures
|
||||||
|
# for this user during the recent interval exceeds n tries.
|
||||||
|
# The default is 3.
|
||||||
|
deny = 10
|
||||||
|
#
|
||||||
|
# The length of the interval during which the consecutive
|
||||||
|
# authentication failures must happen for the user account
|
||||||
|
# lock out is <replaceable>n</replaceable> seconds.
|
||||||
|
# The default is 900 (15 minutes).
|
||||||
|
# fail_interval = 900
|
||||||
|
#
|
||||||
|
# The access will be re-enabled after n seconds after the lock out.
|
||||||
|
# The value 0 has the same meaning as value `never` - the access
|
||||||
|
# will not be re-enabled without resetting the faillock
|
||||||
|
# entries by the `faillock` command.
|
||||||
|
# The default is 600 (10 minutes).
|
||||||
|
unlock_time = 120
|
||||||
|
#
|
||||||
|
# Root account can become locked as well as regular accounts.
|
||||||
|
# Enabled if option is present.
|
||||||
|
# even_deny_root
|
||||||
|
#
|
||||||
|
# This option implies the `even_deny_root` option.
|
||||||
|
# Allow access after n seconds to root account after the
|
||||||
|
# account is locked. In case the option is not specified
|
||||||
|
# the value is the same as of the `unlock_time` option.
|
||||||
|
# root_unlock_time = 900
|
||||||
|
#
|
||||||
|
# If a group name is specified with this option, members
|
||||||
|
# of the group will be handled by this module the same as
|
||||||
|
# the root account (the options `even_deny_root>` and
|
||||||
|
# `root_unlock_time` will apply to them.
|
||||||
|
# By default, the option is not set.
|
||||||
|
# admin_group = <admin_group_name>
|
||||||
1
etc/sudoers.d/omarchy-asdcontrol
Normal file
1
etc/sudoers.d/omarchy-asdcontrol
Normal file
@@ -0,0 +1 @@
|
|||||||
|
%wheel ALL=(ALL) NOPASSWD: /usr/bin/asdcontrol
|
||||||
1
etc/sudoers.d/omarchy-passwd-tries
Normal file
1
etc/sudoers.d/omarchy-passwd-tries
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Defaults passwd_tries=10
|
||||||
1
etc/sudoers.d/omarchy-tzupdate
Normal file
1
etc/sudoers.d/omarchy-tzupdate
Normal file
@@ -0,0 +1 @@
|
|||||||
|
%wheel ALL=(root) NOPASSWD: /usr/bin/tzupdate, /usr/bin/timedatectl
|
||||||
1
etc/sysctl.d/99-omarchy-sysctl.conf
Normal file
1
etc/sysctl.d/99-omarchy-sysctl.conf
Normal file
@@ -0,0 +1 @@
|
|||||||
|
net.ipv4.tcp_mtu_probing=1
|
||||||
4
etc/systemd/logind.conf.d/10-ignore-power-button.conf
Normal file
4
etc/systemd/logind.conf.d/10-ignore-power-button.conf
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# Disable shutting system down on power button
|
||||||
|
# This allows binding the power button to a custom power menu in Hyprland
|
||||||
|
[Login]
|
||||||
|
HandlePowerKey=ignore
|
||||||
4
etc/systemd/resolved.conf.d/10-disable-multicast.conf
Normal file
4
etc/systemd/resolved.conf.d/10-disable-multicast.conf
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# Disable multicast DNS in systemd-resolved
|
||||||
|
# Avahi will provide mDNS instead for better network printer discovery
|
||||||
|
[Resolve]
|
||||||
|
MulticastDNS=no
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user