mirror of
https://github.com/basecamp/omarchy.git
synced 2026-02-17 15:25:37 +00:00
Compare commits
143 Commits
v3.1.2
...
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 | ||
|
|
8b896b60a9 |
3
.github/ISSUE_TEMPLATE/bug.yml
vendored
3
.github/ISSUE_TEMPLATE/bug.yml
vendored
@@ -1,5 +1,5 @@
|
||||
name: Bug
|
||||
description: Report a problem
|
||||
description: Report a validated bug -- NOT FOR SUPPORT REQUESTS
|
||||
labels: [bug]
|
||||
body:
|
||||
- type: markdown
|
||||
@@ -19,5 +19,6 @@ body:
|
||||
id: steps
|
||||
attributes:
|
||||
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:
|
||||
required: true
|
||||
|
||||
7
.github/ISSUE_TEMPLATE/config.yml
vendored
7
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1 +1,8 @@
|
||||
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
|
||||
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++;
|
||||
@@ -11,11 +11,13 @@ send_notification() {
|
||||
notify-send -u critical " Time to recharge!" "Battery is down to ${1}%" -i battery-caution -t 30000
|
||||
}
|
||||
|
||||
if [[ $BATTERY_STATE == "discharging" && $BATTERY_LEVEL -le $BATTERY_THRESHOLD ]]; then
|
||||
if [[ ! -f $NOTIFICATION_FLAG ]]; then
|
||||
send_notification $BATTERY_LEVEL
|
||||
touch $NOTIFICATION_FLAG
|
||||
if [[ -n "$BATTERY_LEVEL" && "$BATTERY_LEVEL" =~ ^[0-9]+$ ]]; then
|
||||
if [[ $BATTERY_STATE == "discharging" && $BATTERY_LEVEL -le $BATTERY_THRESHOLD ]]; then
|
||||
if [[ ! -f $NOTIFICATION_FLAG ]]; then
|
||||
send_notification $BATTERY_LEVEL
|
||||
touch $NOTIFICATION_FLAG
|
||||
fi
|
||||
else
|
||||
rm -f $NOTIFICATION_FLAG
|
||||
fi
|
||||
else
|
||||
rm -f $NOTIFICATION_FLAG
|
||||
fi
|
||||
|
||||
@@ -14,6 +14,6 @@ if [[ -f "$FIRST_RUN_MODE" ]]; then
|
||||
bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh"
|
||||
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/wifi.sh"
|
||||
fi
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# FIXME: Update behavior
|
||||
cd ~/.local/share/omarchy
|
||||
migration_file="$HOME/.local/share/omarchy/migrations/$(git log -1 --format=%cd --date=unix).sh"
|
||||
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()
|
||||
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
|
||||
@@ -4,7 +4,7 @@ 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, border:true"
|
||||
hyprctl keyword "workspace $workspace_id, gapsout:10, gapsin:5, bordersize:2"
|
||||
else \
|
||||
hyprctl keyword "workspace $workspace_id, gapsout:0, gapsin:0, border:false"
|
||||
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"
|
||||
|
||||
# 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
|
||||
if omarchy-pkg-add $package; then
|
||||
# Set as default terminal
|
||||
echo "Setting $package as new default terminal..."
|
||||
sed -i "/export TERMINAL=/ c\export TERMINAL=$package" ~/.config/uwsm/default
|
||||
|
||||
# Restart is needed for new default to take effect
|
||||
echo
|
||||
gum confirm "Restart to use new terminal?" && systemctl reboot --no-wall
|
||||
# Copy custom desktop entry for alacritty with X-TerminalArg* keys
|
||||
if [ "$package" = "alacritty" ]; then
|
||||
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
|
||||
echo "Failed to install $package"
|
||||
fi
|
||||
|
||||
@@ -21,4 +21,7 @@ EOF
|
||||
# Ensure VSC's own auto-update feature is turned off
|
||||
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
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
#!/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
|
||||
|
||||
case "${EDITOR:-nvim}" in
|
||||
omarchy-cmd-present "$EDITOR" || EDITOR=nvim
|
||||
|
||||
case "$EDITOR" in
|
||||
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" "$@"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
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 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
exec setsid uwsm-app -- "${TERMINAL:-alacritty}" "$@"
|
||||
@@ -1,3 +1,3 @@
|
||||
#!/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() {
|
||||
alacritty --class=Omarchy -e "$@"
|
||||
xdg-terminal-exec --app-id=com.omarchy.Omarchy "$@"
|
||||
}
|
||||
|
||||
present_terminal() {
|
||||
@@ -178,7 +178,7 @@ show_setup_menu() {
|
||||
options="$options\n Defaults\n DNS\n Security\n Config"
|
||||
|
||||
case $(menu "Setup" "$options") in
|
||||
*Audio*) $TERMINAL --class=Wiremix -e wiremix ;;
|
||||
*Audio*) xdg-terminal-exec --app-id=com.omarchy.Wiremix -e wiremix ;;
|
||||
*Wifi*)
|
||||
rfkill unblock wifi
|
||||
omarchy-launch-wifi
|
||||
@@ -264,7 +264,7 @@ show_install_editor_menu() {
|
||||
*VSCode*) present_terminal omarchy-install-vscode ;;
|
||||
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;;
|
||||
*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" ;;
|
||||
*Emacs*) install "Emacs" "emacs-wayland" && systemctl --user enable --now emacs.service ;;
|
||||
*) show_install_menu ;;
|
||||
@@ -287,11 +287,11 @@ show_install_ai_menu() {
|
||||
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" ;;
|
||||
*Cursor*) aur_install "Cursor CLI" "cursor-cli" ;;
|
||||
*OpenAI*) aur_install "OpenAI Codex" "openai-codex-bin" ;;
|
||||
*Gemini*) aur_install "Gemini" "gemini-cli" ;;
|
||||
*Cursor*) install "Cursor CLI" "cursor-cli" ;;
|
||||
*OpenAI*) install "OpenAI Codex" "openai-codex-bin" ;;
|
||||
*Gemini*) install "Gemini" "gemini-cli" ;;
|
||||
*Studio*) install "LM Studio" "lmstudio" ;;
|
||||
*Ollama*) install "Ollama" $ollama_pkg ;;
|
||||
*Crush*) install "Crush" "crush-bin" ;;
|
||||
@@ -304,7 +304,7 @@ show_install_gaming_menu() {
|
||||
case $(menu "Install" " Steam\n RetroArch [AUR]\n Minecraft") in
|
||||
*Steam*) present_terminal omarchy-install-steam ;;
|
||||
*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 ;;
|
||||
esac
|
||||
}
|
||||
@@ -395,7 +395,7 @@ show_update_menu() {
|
||||
*Hardware*) show_update_hardware_menu ;;
|
||||
*Firmware*) present_terminal omarchy-update-firmware ;;
|
||||
*Timezone*) present_terminal omarchy-tz-select ;;
|
||||
*Time*) present_terminal omarchy-reset-time ;;
|
||||
*Time*) present_terminal omarchy-update-time ;;
|
||||
*Password*) show_update_password_menu ;;
|
||||
*) show_main_menu ;;
|
||||
esac
|
||||
|
||||
@@ -49,6 +49,17 @@ parse_keycodes() {
|
||||
code="${BASH_REMATCH[1]}"
|
||||
symbol=$(lookup_keycode_cached "$code" "$XKB_KEYMAP_CACHE")
|
||||
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
|
||||
echo "$line"
|
||||
fi
|
||||
@@ -78,7 +89,6 @@ dynamic_bindings() {
|
||||
jq -r '.[] | {modmask, key, keycode, description, dispatcher, arg} | "\(.modmask),\(.key)@\(.keycode),\(.description),\(.dispatcher),\(.arg)"' |
|
||||
sed -r \
|
||||
-e 's/null//' \
|
||||
-e 's,~/.local/share/omarchy/bin/,,' \
|
||||
-e 's,uwsm app -- ,,' \
|
||||
-e 's,uwsm-app -- ,,' \
|
||||
-e 's/@0//' \
|
||||
@@ -101,6 +111,11 @@ dynamic_bindings() {
|
||||
-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
|
||||
#
|
||||
# `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')
|
||||
menu_height=$((monitor_height * 40 / 100))
|
||||
|
||||
build_keymap_cache
|
||||
|
||||
dynamic_bindings |
|
||||
{
|
||||
dynamic_bindings
|
||||
static_bindings
|
||||
} |
|
||||
sort -u |
|
||||
parse_keycodes |
|
||||
parse_bindings |
|
||||
prioritize_entries |
|
||||
walker --dmenu -p 'Keybindings' --width 800 --height "$menu_height"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ mkdir -p "$STATE_DIR"
|
||||
mkdir -p "$STATE_DIR/skipped"
|
||||
|
||||
# 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")
|
||||
|
||||
if [[ ! -f "$STATE_DIR/$filename" && ! -f "$STATE_DIR/skipped/$filename" ]]; then
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
# Copy and sync icon files
|
||||
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
|
||||
|
||||
# Copy .desktop declarations
|
||||
mkdir -p ~/.local/share/applications
|
||||
cp ~/.local/share/omarchy/applications/*.desktop ~/.local/share/applications/
|
||||
cp ~/.local/share/omarchy/applications/hidden/*.desktop ~/.local/share/applications/
|
||||
cp /usr/share/omarchy/applications/*.desktop ~/.local/share/applications/
|
||||
cp /usr/share/omarchy/applications/hidden/*.desktop ~/.local/share/applications/
|
||||
|
||||
update-desktop-database ~/.local/share/applications
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/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
|
||||
|
||||
if [[ -z "$config_file" ]]; then
|
||||
@@ -8,16 +8,16 @@ if [[ -z "$config_file" ]]; then
|
||||
Usage: $0 [config_file]
|
||||
|
||||
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
|
||||
|
||||
$0 hypr/hyprlock.conf
|
||||
To copy /etc/skel/.config/hypr/hyprlock.conf to ~/.config/hypr/hyprlock.conf
|
||||
|
||||
$0 hypr/hyprlock.conf
|
||||
USAGE
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Backup the destination file (with timestamp) to avoid clobbering (Ex: hyprlock.conf.bak.1753817951)
|
||||
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)"
|
||||
|
||||
if [[ -f "$user_config_file" ]]; then
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
#!/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
|
||||
|
||||
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
|
||||
|
||||
if command -v limine-mkinitcpio &>/dev/null; then
|
||||
|
||||
@@ -10,19 +10,15 @@ 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 "Resetting Omarchy repository"
|
||||
git clone "https://github.com/basecamp/omarchy.git" ~/.local/share/omarchy-new >/dev/null
|
||||
rm -rf $OMARCHY_PATH
|
||||
mv ~/.local/share/omarchy-new $OMARCHY_PATH
|
||||
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 ~/.local/share/omarchy/config/* ~/.config/
|
||||
cp ~/.local/share/omarchy/default/bashrc ~/.bashrc
|
||||
echo '[[ -f ~/.bashrc ]] && . ~/.bashrc' | tee ~/.bash_profile >/dev/null
|
||||
cp -R /etc/skel/.config/* ~/.config/
|
||||
|
||||
$(bash $OMARCHY_PATH/install/config/theme.sh)
|
||||
$(bash $OMARCHY_PATH/install/config/git.sh)
|
||||
|
||||
@@ -1,21 +1,33 @@
|
||||
#!/bin/bash
|
||||
|
||||
pkill elephant
|
||||
pkill walker
|
||||
|
||||
# Detect if we're running as root (from pacman hook)
|
||||
if [[ $EUID -eq 0 ]]; then
|
||||
# Get the owner of this script to determine which user to run as
|
||||
SCRIPT_OWNER=$(stat -c '%U' "$0")
|
||||
USER_UID=$(id -u "$SCRIPT_OWNER")
|
||||
# Find all logged-in users running Hyprland
|
||||
for user_runtime in /run/user/*/; do
|
||||
USER_UID=$(basename "$user_runtime")
|
||||
USER_NAME=$(id -un "$USER_UID" 2>/dev/null)
|
||||
|
||||
# Restart services as the script owner
|
||||
systemd-run --uid="$SCRIPT_OWNER" --setenv=XDG_RUNTIME_DIR="/run/user/$USER_UID" \
|
||||
bash -c "
|
||||
setsid uwsm-app -- elephant &
|
||||
setsid uwsm-app -- walker --gapplication-service &
|
||||
"
|
||||
# Skip if we can't resolve the username or if no Hyprland session
|
||||
[[ -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 "
|
||||
setsid uwsm-app -- elephant &
|
||||
setsid uwsm-app -- walker --gapplication-service &
|
||||
"
|
||||
done
|
||||
else
|
||||
# Running as user directly
|
||||
pkill elephant
|
||||
pkill walker
|
||||
|
||||
setsid uwsm-app -- elephant &
|
||||
wait 2
|
||||
setsid uwsm-app -- walker --gapplication-service &
|
||||
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
|
||||
echo -e "\033[32m"
|
||||
cat <~/.local/share/omarchy/logo.txt
|
||||
cat < /usr/share/omarchy/logo.txt
|
||||
echo -e "\033[0m"
|
||||
echo
|
||||
|
||||
@@ -87,6 +87,35 @@ calculate_brightness() {
|
||||
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)
|
||||
color_distance() {
|
||||
local hex1="$1"
|
||||
@@ -229,38 +258,30 @@ extract_theme_data() {
|
||||
fi
|
||||
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
|
||||
local bg_primary_alt="$bg_color"
|
||||
local bg_secondary="$bg_color"
|
||||
local bg_secondary_alt="$bg_color"
|
||||
|
||||
# Code block background uses the closest different color
|
||||
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")"
|
||||
if [ $bg_brightness -gt 127 ]; then
|
||||
r=$((r - 10))
|
||||
g=$((g - 10))
|
||||
b=$((b - 10))
|
||||
else
|
||||
r=$((r + 15))
|
||||
g=$((g + 15))
|
||||
b=$((b + 15))
|
||||
fi
|
||||
[ $r -lt 0 ] && r=0
|
||||
[ $r -gt 255 ] && r=255
|
||||
[ $g -lt 0 ] && g=0
|
||||
[ $g -gt 255 ] && g=255
|
||||
[ $b -lt 0 ] && b=0
|
||||
[ $b -gt 255 ] && b=255
|
||||
code_bg=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
|
||||
# Generate code background color that will contrast with foreground text
|
||||
read -r r g b <<<"$(hex_to_rgb "$bg_color")"
|
||||
if [ $bg_brightness -gt 127 ]; then
|
||||
r=$((r - 10))
|
||||
g=$((g - 10))
|
||||
b=$((b - 10))
|
||||
else
|
||||
r=$((r + 15))
|
||||
g=$((g + 15))
|
||||
b=$((b + 15))
|
||||
fi
|
||||
[ $r -lt 0 ] && r=0
|
||||
[ $r -gt 255 ] && r=255
|
||||
[ $g -lt 0 ] && g=0
|
||||
[ $g -gt 255 ] && g=255
|
||||
[ $b -lt 0 ] && b=0
|
||||
[ $b -gt 255 ] && b=255
|
||||
code_bg=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
|
||||
|
||||
|
||||
# Find closest color to foreground for code block text
|
||||
local code_fg=""
|
||||
@@ -345,6 +366,22 @@ extract_theme_data() {
|
||||
border_color=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
|
||||
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
|
||||
local -a unique_colors
|
||||
readarray -t unique_colors < <(echo "$filtered_data" | sort_colors_by_frequency)
|
||||
@@ -409,8 +446,8 @@ extract_theme_data() {
|
||||
--text-mark: ${color_slots[7]};
|
||||
--interactive-accent: ${color_slots[8]};
|
||||
--blockquote-border: ${color_slots[9]};
|
||||
--text-muted: $border_color; /* Use border color for muted text */
|
||||
--text-faint: $border_color; /* Use border color for faint text */
|
||||
--text-muted: $text_muted_color; /* Use text-specific color for muted text */
|
||||
--text-faint: $text_faint_color; /* Use text-specific color for faint text */
|
||||
|
||||
/* Additional mappings */
|
||||
--text-accent: var(--interactive-accent);
|
||||
|
||||
@@ -4,6 +4,7 @@ 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-update-git
|
||||
omarchy-update-perform
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
omarchy-update-time
|
||||
omarchy-update-keyring
|
||||
omarchy-update-available-reset
|
||||
omarchy-update-system-pkgs
|
||||
omarchy-migrate
|
||||
|
||||
@@ -23,7 +23,7 @@ if pacman -Qem >/dev/null; then
|
||||
fi
|
||||
fi
|
||||
|
||||
orphans=$(pacman -Qtdq)
|
||||
orphans=$(pacman -Qtdq || true)
|
||||
if [[ -n $orphans ]]; then
|
||||
echo -e "\e[32m\nRemove orphan system packages\e[0m"
|
||||
for pkg in $orphans; do
|
||||
|
||||
@@ -30,7 +30,7 @@ else
|
||||
fi
|
||||
|
||||
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
|
||||
fi
|
||||
|
||||
|
||||
25
boot.sh
25
boot.sh
@@ -3,15 +3,15 @@
|
||||
# Set install mode to online since boot.sh is used for curl installations
|
||||
export OMARCHY_ONLINE_INSTALL=true
|
||||
|
||||
ansi_art=' ▄▄▄
|
||||
▄█████▄ ▄███████████▄ ▄███████ ▄███████ ▄███████ ▄█ █▄ ▄█ █▄
|
||||
ansi_art=' ▄▄▄
|
||||
▄█████▄ ▄███████████▄ ▄███████ ▄███████ ▄███████ ▄█ █▄ ▄█ █▄
|
||||
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
|
||||
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ █▀ ███ ███ ███ ███
|
||||
███ ███ ███ ███ ███ ▄███▄▄▄███ ▄███▄▄▄██▀ ███ ▄███▄▄▄███▄ ███▄▄▄███
|
||||
███ ███ ███ ███ ███ ▀███▀▀▀███ ▀███▀▀▀▀ ███ ▀▀███▀▀▀███ ▀▀▀▀▀▀███
|
||||
███ ███ ███ ███ ███ ███ ███ ██████████ ███ █▄ ███ ███ ▄██ ███
|
||||
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
|
||||
▀█████▀ ▀█ ███ █▀ ███ █▀ ███ ███ ███████▀ ███ █▀ ▀█████▀
|
||||
▀█████▀ ▀█ ███ █▀ ███ █▀ ███ ███ ███████▀ ███ █▀ ▀█████▀
|
||||
███ █▀ '
|
||||
|
||||
clear
|
||||
@@ -19,21 +19,4 @@ echo -e "\n$ansi_art\n"
|
||||
|
||||
sudo pacman -Syu --noconfirm --needed git
|
||||
|
||||
# Use custom repo if specified, otherwise default to basecamp/omarchy
|
||||
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
|
||||
# FIXME: Update behavior or remove
|
||||
|
||||
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-hint=wayland
|
||||
--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
|
||||
--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-style = "block"
|
||||
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
|
||||
keybind = shift+insert=paste_from_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
|
||||
$terminal = uwsm-app -- $TERMINAL
|
||||
$terminal = uwsm-app -- xdg-terminal-exec
|
||||
$browser = omarchy-launch-browser
|
||||
|
||||
bindd = SUPER, RETURN, Terminal, exec, $terminal --working-directory="$(omarchy-cmd-terminal-cwd)"
|
||||
@@ -12,7 +12,7 @@ bindd = SUPER SHIFT, T, Activity, exec, $terminal -e btop
|
||||
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, 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
|
||||
bindd = SUPER SHIFT, W, Typora, exec, uwsm-app -- typora --enable-wayland-ime
|
||||
bindd = SUPER SHIFT, SLASH, Passwords, exec, uwsm-app -- 1password
|
||||
|
||||
# If your web app url contains #, type it as ## to prevent hyprland treating it as a comment
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
# Learn how to configure Hyprland: https://wiki.hyprland.org/Configuring/
|
||||
|
||||
# Use defaults Omarchy defaults (but don't edit these directly!)
|
||||
source = ~/.local/share/omarchy/default/hypr/autostart.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/bindings/media.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/bindings/clipboard.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/bindings/tiling-v2.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/bindings/utilities.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/envs.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/looknfeel.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/input.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/windows.conf
|
||||
source = /usr/share/omarchy/default/hypr/autostart.conf
|
||||
source = /usr/share/omarchy/default/hypr/bindings/media.conf
|
||||
source = /usr/share/omarchy/default/hypr/bindings/clipboard.conf
|
||||
source = /usr/share/omarchy/default/hypr/bindings/tiling-v2.conf
|
||||
source = /usr/share/omarchy/default/hypr/bindings/utilities.conf
|
||||
source = /usr/share/omarchy/default/hypr/envs.conf
|
||||
source = /usr/share/omarchy/default/hypr/looknfeel.conf
|
||||
source = /usr/share/omarchy/default/hypr/input.conf
|
||||
source = /usr/share/omarchy/default/hypr/windows.conf
|
||||
source = ~/.config/omarchy/current/theme/hyprland.conf
|
||||
|
||||
# Change your own setup in these files (and overwrite any settings from defaults!)
|
||||
|
||||
@@ -5,7 +5,9 @@ profile {
|
||||
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 {
|
||||
# time = 20:00
|
||||
# temperature = 4000
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#general
|
||||
general {
|
||||
# No gaps between windows
|
||||
# No gaps between windows or borders
|
||||
# gaps_in = 0
|
||||
# gaps_out = 0
|
||||
# border_size = 0
|
||||
|
||||
# Use master layout instead of dwindle
|
||||
# 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,7 +1,7 @@
|
||||
# Changes require a restart to take effect.
|
||||
|
||||
# Install other terminals via Install > Terminal
|
||||
export TERMINAL=alacritty
|
||||
export TERMINAL=xdg-terminal-exec
|
||||
|
||||
# Use code for VSCode
|
||||
export EDITOR=nvim
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
# Changes require a restart to take effect.
|
||||
|
||||
# Ensure Omarchy bins are in the path
|
||||
export OMARCHY_PATH=$HOME/.local/share/omarchy
|
||||
export PATH=$OMARCHY_PATH/bin/:$PATH
|
||||
# Set default OMARCHY_PATH
|
||||
export OMARCHY_PATH=/usr/share/omarchy
|
||||
|
||||
# Set default terminal and editor
|
||||
source ~/.config/uwsm/default
|
||||
|
||||
@@ -1,28 +1,11 @@
|
||||
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
|
||||
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
|
||||
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]
|
||||
"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]
|
||||
close = ["Escape"]
|
||||
next = ["Down"]
|
||||
previous = ["Up"]
|
||||
toggle_exact = ["ctrl e"]
|
||||
resume_last_query = ["ctrl r"]
|
||||
quick_activate = []
|
||||
|
||||
[providers]
|
||||
@@ -31,11 +14,6 @@ default = [
|
||||
"menus",
|
||||
"websearch",
|
||||
] # 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]]
|
||||
prefix = "/"
|
||||
@@ -60,86 +38,3 @@ provider = "websearch"
|
||||
[[providers.prefixes]]
|
||||
prefix = "$"
|
||||
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,7 +41,7 @@
|
||||
"custom/omarchy": {
|
||||
"format": "<span font='omarchy'>\ue900</span>",
|
||||
"on-click": "omarchy-menu",
|
||||
"on-click-right": "omarchy-launch-terminal",
|
||||
"on-click-right": "xdg-terminal-exec",
|
||||
"tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
|
||||
},
|
||||
"custom/update": {
|
||||
@@ -50,13 +50,13 @@
|
||||
"on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update",
|
||||
"tooltip-format": "Omarchy update available",
|
||||
"signal": 7,
|
||||
"interval": 3600
|
||||
"interval": 21600
|
||||
},
|
||||
|
||||
"cpu": {
|
||||
"interval": 5,
|
||||
"format": "",
|
||||
"on-click": "$TERMINAL -e btop"
|
||||
"on-click": "xdg-terminal-exec btop"
|
||||
},
|
||||
"clock": {
|
||||
"format": "{:L%A %H:%M}",
|
||||
@@ -105,7 +105,7 @@
|
||||
},
|
||||
"pulseaudio": {
|
||||
"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",
|
||||
"tooltip-format": "Playing at {volume}%",
|
||||
"scroll-step": 5,
|
||||
|
||||
@@ -1,19 +1,26 @@
|
||||
# File system
|
||||
alias ls='eza -lh --group-directories-first --icons=auto'
|
||||
alias lsa='ls -a'
|
||||
alias lt='eza --tree --level=2 --long --icons --git'
|
||||
alias lta='lt -a'
|
||||
if command -v eza &> /dev/null; then
|
||||
alias ls='eza -lh --group-directories-first --icons=auto'
|
||||
alias lsa='ls -a'
|
||||
alias lt='eza --tree --level=2 --long --icons --git'
|
||||
alias lta='lt -a'
|
||||
fi
|
||||
|
||||
alias ff="fzf --preview 'bat --style=numbers --color=always {}'"
|
||||
alias cd="zd"
|
||||
zd() {
|
||||
if [ $# -eq 0 ]; then
|
||||
builtin cd ~ && return
|
||||
elif [ -d "$1" ]; then
|
||||
builtin cd "$1"
|
||||
else
|
||||
z "$@" && printf "\U000F17A9 " && pwd || echo "Error: Directory not found"
|
||||
fi
|
||||
}
|
||||
|
||||
if command -v zoxide &> /dev/null; then
|
||||
alias cd="zd"
|
||||
zd() {
|
||||
if [ $# -eq 0 ]; then
|
||||
builtin cd ~ && return
|
||||
elif [ -d "$1" ]; then
|
||||
builtin cd "$1"
|
||||
else
|
||||
z "$@" && printf "\U000F17A9 " && pwd || echo "Error: Directory not found"
|
||||
fi
|
||||
}
|
||||
fi
|
||||
|
||||
open() {
|
||||
xdg-open "$@" >/dev/null 2>&1 &
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
source ~/.local/share/omarchy/default/bash/shell
|
||||
source ~/.local/share/omarchy/default/bash/aliases
|
||||
source ~/.local/share/omarchy/default/bash/functions
|
||||
source ~/.local/share/omarchy/default/bash/prompt
|
||||
source ~/.local/share/omarchy/default/bash/init
|
||||
source ~/.local/share/omarchy/default/bash/envs
|
||||
[[ $- == *i* ]] && bind -f ~/.local/share/omarchy/default/bash/inputrc
|
||||
source /usr/share/omarchy/default/bash/shell
|
||||
source /usr/share/omarchy/default/bash/aliases
|
||||
source /usr/share/omarchy/default/bash/functions
|
||||
source /usr/share/omarchy/default/bash/prompt
|
||||
source /usr/share/omarchy/default/bash/init
|
||||
source /usr/share/omarchy/default/bash/envs
|
||||
[[ $- == *i* ]] && bind -f /usr/share/omarchy/default/bash/inputrc
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
# All the default Omarchy aliases and functions
|
||||
# (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.
|
||||
#
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
# App-specific tweaks
|
||||
source = ~/.local/share/omarchy/default/hypr/apps/1password.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/apps/bitwarden.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/apps/browser.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/apps/hyprshot.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/apps/jetbrains.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/apps/localsend.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/apps/pip.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/apps/qemu.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/apps/retroarch.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/apps/steam.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/apps/system.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/apps/terminals.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/apps/walker.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/apps/webcam-overlay.conf
|
||||
source = /usr/share/omarchy/default/hypr/apps/1password.conf
|
||||
source = /usr/share/omarchy/default/hypr/apps/bitwarden.conf
|
||||
source = /usr/share/omarchy/default/hypr/apps/browser.conf
|
||||
source = /usr/share/omarchy/default/hypr/apps/hyprshot.conf
|
||||
source = /usr/share/omarchy/default/hypr/apps/jetbrains.conf
|
||||
source = /usr/share/omarchy/default/hypr/apps/localsend.conf
|
||||
source = /usr/share/omarchy/default/hypr/apps/pip.conf
|
||||
source = /usr/share/omarchy/default/hypr/apps/qemu.conf
|
||||
source = /usr/share/omarchy/default/hypr/apps/retroarch.conf
|
||||
source = /usr/share/omarchy/default/hypr/apps/steam.conf
|
||||
source = /usr/share/omarchy/default/hypr/apps/system.conf
|
||||
source = /usr/share/omarchy/default/hypr/apps/terminals.conf
|
||||
source = /usr/share/omarchy/default/hypr/apps/walker.conf
|
||||
source = /usr/share/omarchy/default/hypr/apps/webcam-overlay.conf
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
# Fixing popup size issue
|
||||
windowrule = size 50% 50%, class:(.*jetbrains.*)$, title:^$,floating:1
|
||||
# JetBrains windows default size
|
||||
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 = 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
|
||||
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 = pin, tag:pip
|
||||
windowrule = size 600 338, tag:pip
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Floating windows
|
||||
windowrule = float, 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:(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:(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|.*wants to [open|save].*|[C|c]hoose.*)
|
||||
windowrule = float, class:org.gnome.Calculator
|
||||
|
||||
# Fullscreen screensaver
|
||||
@@ -12,3 +12,6 @@ windowrule = fullscreen, class:Screensaver
|
||||
|
||||
# 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)$
|
||||
|
||||
# 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 -- mako
|
||||
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 = uwsm-app -- elephant
|
||||
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, SLASH, Password manager, exec, $passwordManager
|
||||
|
||||
source = ~/.local/share/omarchy/default/hypr/bindings/media.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/bindings/tiling.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/bindings/utilities.conf
|
||||
source = /usr/share/omarchy/default/hypr/bindings/media.conf
|
||||
source = /usr/share/omarchy/default/hypr/bindings/tiling.conf
|
||||
source = /usr/share/omarchy/default/hypr/bindings/utilities.conf
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Copy / Paste
|
||||
bindd = SUPER, C, Copy, sendshortcut, CTRL, Insert,
|
||||
bindd = SUPER, V, Paste, sendshortcut, SHIFT, Insert,
|
||||
bindd = SUPER, X, Cut, sendshortcut, CTRL, X,
|
||||
bindd = SUPER CTRL, V, Clipboard, exec, omarchy-launch-walker -m clipboard
|
||||
bindd = SUPER, C, Universal copy, sendshortcut, CTRL, Insert,
|
||||
bindd = SUPER, V, Universal paste, sendshortcut, SHIFT, Insert,
|
||||
bindd = SUPER, X, Universal cut, sendshortcut, CTRL, X,
|
||||
bindd = SUPER CTRL, V, Clipboard manager, exec, omarchy-launch-walker -m clipboard
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
# Close windows
|
||||
bindd = SUPER, W, Close active window, killactive,
|
||||
bindd = CTRL ALT, DELETE, Close all Windows, exec, omarchy-hyprland-window-close-all
|
||||
bindd = SUPER, W, Close window, killactive,
|
||||
bindd = CTRL ALT, DELETE, Close all windows, exec, omarchy-hyprland-window-close-all
|
||||
|
||||
# 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, T, Toggle floating, togglefloating,
|
||||
bindd = SUPER, F, Force full screen, fullscreen, 0
|
||||
bindd = SUPER, T, Toggle window floating/tiling, togglefloating,
|
||||
bindd = SUPER, F, Full screen, fullscreen, 0
|
||||
bindd = SUPER CTRL, F, Tiled full screen, fullscreenstate, 0 2
|
||||
bindd = SUPER ALT, F, Full width, fullscreen, 1
|
||||
bindd = SUPER, O, Pop window out (float & pin), exec, omarchy-hyprland-window-pop
|
||||
|
||||
# Move focus with SUPER + arrow keys
|
||||
bindd = SUPER, LEFT, Move focus left, movefocus, l
|
||||
bindd = SUPER, RIGHT, Move focus right, movefocus, r
|
||||
bindd = SUPER, UP, Move focus up, movefocus, u
|
||||
bindd = SUPER, DOWN, Move focus down, movefocus, d
|
||||
bindd = SUPER, LEFT, Move window focus left, movefocus, l
|
||||
bindd = SUPER, RIGHT, Move window focus right, movefocus, r
|
||||
bindd = SUPER, UP, Move window focus up, movefocus, u
|
||||
bindd = SUPER, DOWN, Move window focus down, movefocus, d
|
||||
|
||||
# Switch workspaces with SUPER + [0-9]
|
||||
# Switch workspaces with SUPER + [1-9]
|
||||
bindd = SUPER, code:10, Switch to workspace 1, workspace, 1
|
||||
bindd = SUPER, code:11, Switch to workspace 2, workspace, 2
|
||||
bindd = SUPER, code:12, Switch to workspace 3, workspace, 3
|
||||
@@ -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:17, Switch to workspace 8, workspace, 8
|
||||
bindd = SUPER, code:18, Switch to workspace 9, workspace, 9
|
||||
bindd = SUPER, code:19, Switch to workspace 10, workspace, 10
|
||||
|
||||
# Move active window to a workspace with SUPER + SHIFT + [0-9]
|
||||
# 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:11, Move window to workspace 2, movetoworkspace, 2
|
||||
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:17, Move window to workspace 8, movetoworkspace, 8
|
||||
bindd = SUPER SHIFT, code:18, Move window to workspace 9, movetoworkspace, 9
|
||||
bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10
|
||||
|
||||
# Control scratchpad
|
||||
bindd = SUPER, S, Toggle scratchpad, togglespecialworkspace, scratchpad
|
||||
bindd = SUPER ALT, S, Move window to scratchpad, movetoworkspacesilent, special:scratchpad
|
||||
|
||||
# TAB between workspaces
|
||||
bindd = SUPER, TAB, Next workspace, workspace, e+1
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
# Do not make changes here, but bring them to tiling-v2.conf instead.
|
||||
|
||||
# Close windows
|
||||
bindd = SUPER, W, Close active window, killactive,
|
||||
bindd = CTRL ALT, DELETE, Close all Windows, exec, omarchy-hyprland-window-close-all
|
||||
bindd = SUPER, W, Close window, killactive,
|
||||
bindd = CTRL ALT, DELETE, Close all windows, exec, omarchy-hyprland-window-close-all
|
||||
|
||||
# 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 SHIFT, V, Toggle floating, togglefloating,
|
||||
bindd = SUPER SHIFT, V, Toggle window floating/tiling, togglefloating,
|
||||
bindd = SHIFT, F11, Force full screen, fullscreen, 0
|
||||
bindd = ALT, F11, Full width, fullscreen, 1
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
bindd = SUPER, SPACE, Launch apps, exec, omarchy-launch-walker
|
||||
bindd = SUPER CTRL, E, Emoji picker, exec, omarchy-launch-walker -m symbols
|
||||
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
|
||||
bindd = SUPER, K, Show key bindings, exec, omarchy-menu-keybindings
|
||||
bindd = , XF86Calculator, Calculator, exec, gnome-calculator
|
||||
@@ -10,7 +10,7 @@ bindd = , XF86Calculator, Calculator, exec, gnome-calculator
|
||||
# Aesthetics
|
||||
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 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 SHIFT, BACKSPACE, Toggle workspace gaps, exec, omarchy-hyprland-workspace-toggle-gaps
|
||||
|
||||
@@ -31,10 +31,10 @@ 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
|
||||
|
||||
# Captures
|
||||
bindd = , PRINT, Screenshot with Editing, exec, omarchy-cmd-screenshot
|
||||
bindd = SHIFT, PRINT, Screenshot to Clipboard, exec, omarchy-cmd-screenshot smart clipboard
|
||||
bindd = , PRINT, Screenshot with editing, exec, omarchy-cmd-screenshot
|
||||
bindd = SHIFT, PRINT, Screenshot to clipboard, exec, omarchy-cmd-screenshot smart clipboard
|
||||
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
|
||||
bindd = SUPER CTRL, S, Share, exec, omarchy-menu share
|
||||
|
||||
@@ -120,9 +120,17 @@ misc {
|
||||
disable_splash_rendering = true
|
||||
focus_on_activate = true
|
||||
anr_missed_pings = 3
|
||||
new_window_takes_over_fullscreen = 1
|
||||
}
|
||||
|
||||
# https://wiki.hypr.land/Configuring/Variables/#cursor
|
||||
cursor {
|
||||
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
|
||||
|
||||
# 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;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/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"}'
|
||||
else
|
||||
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
|
||||
2
etc/systemd/resolved.conf.d/20-docker-dns.conf
Normal file
2
etc/systemd/resolved.conf.d/20-docker-dns.conf
Normal file
@@ -0,0 +1,2 @@
|
||||
[Resolve]
|
||||
DNSStubListenerExtra=172.17.0.1
|
||||
2
etc/systemd/system.conf.d/10-faster-shutdown.conf
Normal file
2
etc/systemd/system.conf.d/10-faster-shutdown.conf
Normal file
@@ -0,0 +1,2 @@
|
||||
[Manager]
|
||||
DefaultTimeoutStopSec=5s
|
||||
2
etc/systemd/system/docker.service.d/no-block-boot.conf
Normal file
2
etc/systemd/system/docker.service.d/no-block-boot.conf
Normal file
@@ -0,0 +1,2 @@
|
||||
[Unit]
|
||||
DefaultDependencies=no
|
||||
31
install.sh
31
install.sh
@@ -4,14 +4,33 @@
|
||||
set -eEo pipefail
|
||||
|
||||
# Define Omarchy locations
|
||||
export OMARCHY_PATH="$HOME/.local/share/omarchy"
|
||||
export OMARCHY_PATH="/usr/share/omarchy"
|
||||
export OMARCHY_INSTALL="$OMARCHY_PATH/install"
|
||||
export OMARCHY_INSTALL_LOG_FILE="/var/log/omarchy-install.log"
|
||||
export PATH="$OMARCHY_PATH/bin:$PATH"
|
||||
|
||||
# Install
|
||||
source "$OMARCHY_INSTALL/helpers/all.sh"
|
||||
source "$OMARCHY_INSTALL/preflight/all.sh"
|
||||
# Load helpers
|
||||
source "$OMARCHY_INSTALL/helpers/chroot.sh"
|
||||
|
||||
# Simple script runner that outputs to stdout/stderr
|
||||
# archinstall captures all output in /var/log/archinstall/install.log
|
||||
run_logged() {
|
||||
local script="$1"
|
||||
local script_name=$(basename "$script")
|
||||
|
||||
echo "Running: $script_name"
|
||||
|
||||
source "$script"
|
||||
local exit_code=$?
|
||||
|
||||
if [ $exit_code -eq 0 ]; then
|
||||
echo "✓ Completed: $script_name"
|
||||
echo
|
||||
else
|
||||
echo "✗ Failed: $script_name (exit code: $exit_code)"
|
||||
return $exit_code
|
||||
fi
|
||||
}
|
||||
|
||||
# Run installation phases
|
||||
source "$OMARCHY_INSTALL/packaging/all.sh"
|
||||
source "$OMARCHY_INSTALL/config/all.sh"
|
||||
source "$OMARCHY_INSTALL/login/all.sh"
|
||||
|
||||
@@ -1,32 +1,20 @@
|
||||
run_logged $OMARCHY_INSTALL/config/config.sh
|
||||
run_logged $OMARCHY_INSTALL/config/theme.sh
|
||||
run_logged $OMARCHY_INSTALL/config/branding.sh
|
||||
run_logged $OMARCHY_INSTALL/config/git.sh
|
||||
run_logged $OMARCHY_INSTALL/config/gpg.sh
|
||||
run_logged $OMARCHY_INSTALL/config/timezones.sh
|
||||
run_logged $OMARCHY_INSTALL/config/increase-sudo-tries.sh
|
||||
run_logged $OMARCHY_INSTALL/config/increase-lockout-limit.sh
|
||||
run_logged $OMARCHY_INSTALL/config/ssh-flakiness.sh
|
||||
run_logged $OMARCHY_INSTALL/config/detect-keyboard-layout.sh
|
||||
run_logged $OMARCHY_INSTALL/config/xcompose.sh
|
||||
run_logged $OMARCHY_INSTALL/config/mise-work.sh
|
||||
run_logged $OMARCHY_INSTALL/config/fix-powerprofilesctl-shebang.sh
|
||||
run_logged $OMARCHY_INSTALL/config/docker.sh
|
||||
run_logged $OMARCHY_INSTALL/config/mimetypes.sh
|
||||
run_logged $OMARCHY_INSTALL/config/localdb.sh
|
||||
run_logged $OMARCHY_INSTALL/config/walker-elephant.sh
|
||||
run_logged $OMARCHY_INSTALL/config/fast-shutdown.sh
|
||||
run_logged $OMARCHY_INSTALL/config/sudoless-asdcontrol.sh
|
||||
run_logged $OMARCHY_INSTALL/config/hardware/network.sh
|
||||
run_logged $OMARCHY_INSTALL/config/hardware/set-wireless-regdom.sh
|
||||
run_logged $OMARCHY_INSTALL/config/hardware/fix-fkeys.sh
|
||||
run_logged $OMARCHY_INSTALL/config/hardware/bluetooth.sh
|
||||
run_logged $OMARCHY_INSTALL/config/hardware/printer.sh
|
||||
run_logged $OMARCHY_INSTALL/config/hardware/usb-autosuspend.sh
|
||||
run_logged $OMARCHY_INSTALL/config/hardware/ignore-power-button.sh
|
||||
run_logged $OMARCHY_INSTALL/config/hardware/nvidia.sh
|
||||
run_logged $OMARCHY_INSTALL/config/hardware/fix-f13-amd-audio-input.sh
|
||||
run_logged $OMARCHY_INSTALL/config/hardware/fix-bcm43xx.sh
|
||||
run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-spi-keyboard.sh
|
||||
run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-suspend-nvme.sh
|
||||
run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-t2.sh
|
||||
run_logged $OMARCHY_INSTALL/config/hardware/fix-surface-keyboard.sh
|
||||
|
||||
# Enable all services at the end to minimize daemon reloads
|
||||
run_logged $OMARCHY_INSTALL/config/enable-services.sh
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
# Allow the user to change the branding for fastfetch and screensaver
|
||||
mkdir -p ~/.config/omarchy/branding
|
||||
cp ~/.local/share/omarchy/icon.txt ~/.config/omarchy/branding/about.txt
|
||||
cp ~/.local/share/omarchy/logo.txt ~/.config/omarchy/branding/screensaver.txt
|
||||
@@ -1,6 +0,0 @@
|
||||
# Copy over Omarchy configs
|
||||
mkdir -p ~/.config
|
||||
cp -R ~/.local/share/omarchy/config/* ~/.config/
|
||||
|
||||
# Use default bashrc from Omarchy
|
||||
cp ~/.local/share/omarchy/default/bashrc ~/.bashrc
|
||||
@@ -1,32 +1,2 @@
|
||||
# Configure Docker daemon:
|
||||
# - limit log size to avoid running out of disk
|
||||
# - use host's DNS resolver
|
||||
sudo mkdir -p /etc/docker
|
||||
sudo tee /etc/docker/daemon.json >/dev/null <<'EOF'
|
||||
{
|
||||
"log-driver": "json-file",
|
||||
"log-opts": { "max-size": "10m", "max-file": "5" },
|
||||
"dns": ["172.17.0.1"],
|
||||
"bip": "172.17.0.1/16"
|
||||
}
|
||||
EOF
|
||||
|
||||
# Expose systemd-resolved to our Docker network
|
||||
sudo mkdir -p /etc/systemd/resolved.conf.d
|
||||
echo -e '[Resolve]\nDNSStubListenerExtra=172.17.0.1' | sudo tee /etc/systemd/resolved.conf.d/20-docker-dns.conf >/dev/null
|
||||
sudo systemctl restart systemd-resolved
|
||||
|
||||
# Start Docker automatically
|
||||
sudo systemctl enable docker
|
||||
|
||||
# Give this user privileged Docker access
|
||||
# Add user to docker group
|
||||
sudo usermod -aG docker ${USER}
|
||||
|
||||
# Prevent Docker from preventing boot for network-online.target
|
||||
sudo mkdir -p /etc/systemd/system/docker.service.d
|
||||
sudo tee /etc/systemd/system/docker.service.d/no-block-boot.conf <<'EOF'
|
||||
[Unit]
|
||||
DefaultDependencies=no
|
||||
EOF
|
||||
|
||||
sudo systemctl daemon-reload
|
||||
|
||||
27
install/config/enable-services.sh
Normal file
27
install/config/enable-services.sh
Normal file
@@ -0,0 +1,27 @@
|
||||
# Enable all Omarchy system services
|
||||
# This is run at the end of configuration to minimize daemon reloads
|
||||
# Note: sddm and ufw are enabled in their respective setup scripts (login/sddm.sh and first-run/firewall.sh)
|
||||
|
||||
# Networking
|
||||
chrootable_systemctl_enable iwd.service
|
||||
chrootable_systemctl_enable avahi-daemon.service
|
||||
|
||||
# Bluetooth
|
||||
chrootable_systemctl_enable bluetooth.service
|
||||
|
||||
# Printing
|
||||
chrootable_systemctl_enable cups.service
|
||||
chrootable_systemctl_enable cups-browsed.service
|
||||
|
||||
# Docker
|
||||
chrootable_systemctl_enable docker.service
|
||||
|
||||
# Prevent systemd-networkd-wait-online timeout on boot
|
||||
sudo systemctl disable systemd-networkd-wait-online.service
|
||||
sudo systemctl mask systemd-networkd-wait-online.service
|
||||
|
||||
# Single daemon-reload at the end
|
||||
sudo systemctl daemon-reload
|
||||
|
||||
# Restart systemd-resolved for Docker DNS configuration
|
||||
sudo systemctl restart systemd-resolved
|
||||
@@ -1,7 +0,0 @@
|
||||
sudo mkdir -p /etc/systemd/system.conf.d
|
||||
|
||||
cat <<EOF | sudo tee /etc/systemd/system.conf.d/10-faster-shutdown.conf
|
||||
[Manager]
|
||||
DefaultTimeoutStopSec=5s
|
||||
EOF
|
||||
sudo systemctl daemon-reload
|
||||
@@ -1,15 +1,3 @@
|
||||
# Ensure git settings live under ~/.config
|
||||
mkdir -p ~/.config/git
|
||||
touch ~/.config/git/config
|
||||
|
||||
# Set common git aliases
|
||||
git config --global alias.co checkout
|
||||
git config --global alias.br branch
|
||||
git config --global alias.ci commit
|
||||
git config --global alias.st status
|
||||
git config --global pull.rebase true
|
||||
git config --global init.defaultBranch master
|
||||
|
||||
# Set identification from install inputs
|
||||
if [[ -n "${OMARCHY_USER_NAME//[[:space:]]/}" ]]; then
|
||||
git config --global user.name "$OMARCHY_USER_NAME"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user