mirror of
https://github.com/basecamp/omarchy.git
synced 2026-02-17 15:25:37 +00:00
Compare commits
85 Commits
refactor-p
...
revert-333
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d76589ba65 | ||
|
|
cac2b5728f | ||
|
|
279259d547 | ||
|
|
9b849fc824 | ||
|
|
bea57919b6 | ||
|
|
03cbbd2f7f | ||
|
|
8840af8df9 | ||
|
|
a54ec3a9cb | ||
|
|
42f47195ea | ||
|
|
89b1029588 | ||
|
|
29aae9a93e | ||
|
|
a6d49196d0 | ||
|
|
b7989ac89b | ||
|
|
3c19e4e12c | ||
|
|
94f29f3cba | ||
|
|
2fcc4e9c47 | ||
|
|
d81f6de211 | ||
|
|
e97ae0d842 | ||
|
|
2290152fb9 | ||
|
|
f364ee1167 | ||
|
|
6e1f1cae1b | ||
|
|
e354df3143 | ||
|
|
c981dda55a | ||
|
|
b6ba588fa3 | ||
|
|
bf3a5b0a36 | ||
|
|
9e1a70488b | ||
|
|
a43d090596 | ||
|
|
fceb7106d9 | ||
|
|
d2aeb520fc | ||
|
|
61678986fc | ||
|
|
2425f4d3e0 | ||
|
|
c6918e637b | ||
|
|
6f334868d6 | ||
|
|
79207160e6 | ||
|
|
a9d6a77ee6 | ||
|
|
a304b32cc1 | ||
|
|
3a744e0f78 | ||
|
|
88b13e6899 | ||
|
|
70d15921b9 | ||
|
|
283a41c494 | ||
|
|
3d10b38054 | ||
|
|
d33e947b99 | ||
|
|
79d48b4d8a | ||
|
|
4d3c02c69d | ||
|
|
e96bd085a5 | ||
|
|
64e581e5aa | ||
|
|
694c83f518 | ||
|
|
49308eb12a | ||
|
|
26d37ca2e0 | ||
|
|
c92362937a | ||
|
|
7a0fa07454 | ||
|
|
917279bff7 | ||
|
|
8350b84eee | ||
|
|
d9acd35ef4 | ||
|
|
044e826bb7 | ||
|
|
57e726f0c5 | ||
|
|
06fc4db4db | ||
|
|
15b5ee92d7 | ||
|
|
f6aa97350e | ||
|
|
5192c9b687 | ||
|
|
e263b5d00a | ||
|
|
26821c9b34 | ||
|
|
7cd5661f89 | ||
|
|
6cdf4a3790 | ||
|
|
c92a7eab81 | ||
|
|
8aa2d295e5 | ||
|
|
5fb29c199a | ||
|
|
962aca303d | ||
|
|
870356ecc3 | ||
|
|
cb03d7d84b | ||
|
|
7a0bdaafa4 | ||
|
|
638e35fcac | ||
|
|
904d253b4d | ||
|
|
a40ff463c9 | ||
|
|
8e210088c1 | ||
|
|
bf26366be4 | ||
|
|
4391df6853 | ||
|
|
2498216a4f | ||
|
|
33dde26902 | ||
|
|
b1b6e5d2a7 | ||
|
|
fc8e4c0400 | ||
|
|
f9557177dc | ||
|
|
3065ca9f2a | ||
|
|
ba5343ca11 | ||
|
|
1388a2558a |
@@ -1,21 +0,0 @@
|
|||||||
[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
|
|
||||||
@@ -62,7 +62,7 @@ start_screenrecording() {
|
|||||||
# Merge audio tracks into one - separate tracks only play one at a time in most players
|
# Merge audio tracks into one - separate tracks only play one at a time in most players
|
||||||
[[ "$AUDIO" == "true" ]] && audio_args="-a default_output|default_input"
|
[[ "$AUDIO" == "true" ]] && audio_args="-a default_output|default_input"
|
||||||
|
|
||||||
gpu-screen-recorder -w "$@" -f 60 -c mp4 -o "$filename" $audio_args &
|
gpu-screen-recorder -w "$@" -f 60 -c mp4 $audio_args -ac aac -o "$filename" &
|
||||||
toggle_screenrecording_indicator
|
toggle_screenrecording_indicator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
screensaver_in_focus() {
|
screensaver_in_focus() {
|
||||||
hyprctl activewindow -j | jq -e '.class == "Screensaver"' >/dev/null 2>&1
|
hyprctl activewindow -j | jq -e '.class == "com.omarchy.Screensaver"' >/dev/null 2>&1
|
||||||
}
|
}
|
||||||
|
|
||||||
exit_screensaver() {
|
exit_screensaver() {
|
||||||
hyprctl keyword cursor:invisible false
|
hyprctl keyword cursor:invisible false
|
||||||
pkill -x tte 2>/dev/null
|
pkill -x tte 2>/dev/null
|
||||||
pkill -f "alacritty --class Screensaver" 2>/dev/null
|
pkill -f com.omarchy.Screensaver 2>/dev/null
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ hyprctl keyword cursor:invisible true &>/dev/null
|
|||||||
while true; do
|
while true; do
|
||||||
effect=$(tte 2>&1 | grep -oP '{\K[^}]+' | tr ',' ' ' | tr ' ' '\n' | sed -n '/^beams$/,$p' | sort -u | shuf -n1)
|
effect=$(tte 2>&1 | grep -oP '{\K[^}]+' | tr ',' ' ' | tr ' ' '\n' | sed -n '/^beams$/,$p' | sort -u | shuf -n1)
|
||||||
tte -i ~/.config/omarchy/branding/screensaver.txt \
|
tte -i ~/.config/omarchy/branding/screensaver.txt \
|
||||||
--frame-rate 240 --canvas-width 0 --canvas-height $(($(tput lines) - 2)) --anchor-canvas c --anchor-text c \
|
--frame-rate 240 --canvas-width 0 --canvas-height 0 --anchor-canvas c --anchor-text c --no-eol \
|
||||||
"$effect" &
|
"$effect" &
|
||||||
|
|
||||||
while pgrep -x tte >/dev/null; do
|
while pgrep -x tte >/dev/null; do
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# FIXME: Update behavior
|
|
||||||
cd ~/.local/share/omarchy
|
cd ~/.local/share/omarchy
|
||||||
migration_file="$HOME/.local/share/omarchy/migrations/$(git log -1 --format=%cd --date=unix).sh"
|
migration_file="$HOME/.local/share/omarchy/migrations/$(git log -1 --format=%cd --date=unix).sh"
|
||||||
touch $migration_file
|
touch $migration_file
|
||||||
|
|||||||
@@ -1,344 +0,0 @@
|
|||||||
#!/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()
|
|
||||||
@@ -18,6 +18,7 @@ if [[ -n "$font_name" && "$font_name" != "CNCLD" ]]; then
|
|||||||
pkill -SIGUSR2 ghostty
|
pkill -SIGUSR2 ghostty
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
sed -i "s/font_family = .*/font_family = $font_name/g" ~/.config/hypr/hyprlock.conf
|
||||||
sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/waybar/style.css
|
sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/waybar/style.css
|
||||||
sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/swayosd/style.css
|
sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/swayosd/style.css
|
||||||
xmlstarlet ed -L \
|
xmlstarlet ed -L \
|
||||||
@@ -29,6 +30,10 @@ if [[ -n "$font_name" && "$font_name" != "CNCLD" ]]; then
|
|||||||
omarchy-restart-swayosd
|
omarchy-restart-swayosd
|
||||||
omarchy-restart-walker
|
omarchy-restart-walker
|
||||||
|
|
||||||
|
if pgrep -x ghostty; then
|
||||||
|
notify-send " You must restart Ghostty to see font change"
|
||||||
|
fi
|
||||||
|
|
||||||
omarchy-hook font-set "$font_name"
|
omarchy-hook font-set "$font_name"
|
||||||
else
|
else
|
||||||
echo "Font '$font_name' not found."
|
echo "Font '$font_name' not found."
|
||||||
|
|||||||
@@ -1,258 +0,0 @@
|
|||||||
#!/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()
|
|
||||||
@@ -50,6 +50,7 @@ ruby)
|
|||||||
omarchy-pkg-add libyaml
|
omarchy-pkg-add libyaml
|
||||||
mise use --global ruby@latest
|
mise use --global ruby@latest
|
||||||
mise settings add idiomatic_version_file_enable_tools ruby
|
mise settings add idiomatic_version_file_enable_tools ruby
|
||||||
|
echo "gem: --no-document" > ~/.gemrc
|
||||||
mise x ruby -- gem install rails --no-document
|
mise x ruby -- gem install rails --no-document
|
||||||
echo -e "\nYou can now run: rails new myproject"
|
echo -e "\nYou can now run: rails new myproject"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,110 +0,0 @@
|
|||||||
#!/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
|
|
||||||
@@ -9,16 +9,10 @@ package="$1"
|
|||||||
|
|
||||||
# Map package name to desktop entry ID
|
# Map package name to desktop entry ID
|
||||||
case "$package" in
|
case "$package" in
|
||||||
alacritty)
|
alacritty) desktop_id="Alacritty.desktop" ;;
|
||||||
desktop_id="Alacritty.desktop"
|
ghostty) desktop_id="com.mitchellh.ghostty.desktop" ;;
|
||||||
;;
|
kitty) desktop_id="kitty.desktop" ;;
|
||||||
ghostty)
|
*)
|
||||||
desktop_id="com.mitchellh.ghostty.desktop"
|
|
||||||
;;
|
|
||||||
kitty)
|
|
||||||
desktop_id="kitty.desktop"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Unknown terminal: $package"
|
echo "Unknown terminal: $package"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
@@ -26,14 +20,32 @@ esac
|
|||||||
|
|
||||||
# Install package
|
# Install package
|
||||||
if omarchy-pkg-add $package; then
|
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
|
|
||||||
|
|
||||||
# Copy custom desktop entry for alacritty with X-TerminalArg* keys
|
# Copy custom desktop entry for alacritty with X-TerminalArg* keys
|
||||||
if [ "$package" = "alacritty" ]; then
|
if [[ $package == "alacritty" ]]; then
|
||||||
mkdir -p ~/.local/share/applications
|
mkdir -p ~/.local/share/applications
|
||||||
cp "$OMARCHY_PATH/applications/Alacritty.desktop" ~/.local/share/applications/
|
cat > ~/.local/share/applications/Alacritty.desktop << EOF
|
||||||
|
[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
|
||||||
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Update xdg-terminals.list to prioritize the proper terminal
|
# Update xdg-terminals.list to prioritize the proper terminal
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ fi
|
|||||||
|
|
||||||
WINDOW_PATTERN="$1"
|
WINDOW_PATTERN="$1"
|
||||||
LAUNCH_COMMAND="${2:-"uwsm-app -- $WINDOW_PATTERN"}"
|
LAUNCH_COMMAND="${2:-"uwsm-app -- $WINDOW_PATTERN"}"
|
||||||
WINDOW_ADDRESS=$(hyprctl clients -j | jq -r --arg p "$WINDOW_PATTERN" '.[]|select((.class|test("\\b" + $p + "\\b";"i")) or (.title|test("\\b" + $p + "\\b";"i")))|.address' | head -n1)
|
WINDOW_ADDRESS=$(hyprctl clients -j | jq -r --arg p "^$WINDOW_PATTERN$" '.[]|select((.class|test("\\b" + $p + "\\b";"i")) or (.title|test("\\b" + $p + "\\b";"i")))|.address' | head -n1)
|
||||||
|
|
||||||
if [[ -n $WINDOW_ADDRESS ]]; then
|
if [[ -n $WINDOW_ADDRESS ]]; then
|
||||||
hyprctl dispatch focuswindow "address:$WINDOW_ADDRESS"
|
hyprctl dispatch focuswindow "address:$WINDOW_ADDRESS"
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ if ! command -v tte &>/dev/null; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Exit early if screensave is already running
|
# Exit early if screensave is already running
|
||||||
pgrep -f "alacritty --class Screensaver" && exit 0
|
pgrep -f com.omarchy.Screensaver && exit 0
|
||||||
|
|
||||||
# Allow screensaver to be turned off but also force started
|
# Allow screensaver to be turned off but also force started
|
||||||
if [[ -f ~/.local/state/omarchy/toggles/screensaver-off ]] && [[ $1 != "force" ]]; then
|
if [[ -f ~/.local/state/omarchy/toggles/screensaver-off ]] && [[ $1 != "force" ]]; then
|
||||||
@@ -14,15 +14,34 @@ if [[ -f ~/.local/state/omarchy/toggles/screensaver-off ]] && [[ $1 != "force" ]
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
focused=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')
|
focused=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')
|
||||||
|
terminal=$(xdg-terminal-exec --print-id)
|
||||||
|
|
||||||
for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
|
for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
|
||||||
hyprctl dispatch focusmonitor $m
|
hyprctl dispatch focusmonitor $m
|
||||||
|
|
||||||
# FIXME: Find a way to make this generic where we it can work for kitty + ghostty
|
case $terminal in
|
||||||
|
*Alacritty*)
|
||||||
hyprctl dispatch exec -- \
|
hyprctl dispatch exec -- \
|
||||||
alacritty --class Screensaver \
|
alacritty --class=com.omarchy.Screensaver \
|
||||||
--config-file ~/.local/share/omarchy/default/alacritty/screensaver.toml \
|
--config-file ~/.local/share/omarchy/default/alacritty/screensaver.toml \
|
||||||
-e omarchy-cmd-screensaver
|
-e omarchy-cmd-screensaver
|
||||||
|
;;
|
||||||
|
*ghostty*)
|
||||||
|
hyprctl dispatch exec -- \
|
||||||
|
ghostty --class=com.omarchy.Screensaver \
|
||||||
|
--font-size=18 \
|
||||||
|
-e omarchy-cmd-screensaver
|
||||||
|
;;
|
||||||
|
*kitty*)
|
||||||
|
hyprctl dispatch exec -- \
|
||||||
|
kitty --class=com.omarchy.Screensaver \
|
||||||
|
--override font_size=18 \
|
||||||
|
-e omarchy-cmd-screensaver
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
notify-send "✋ Screensaver only runs in Alacritty, Ghostty, or Kitty"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
hyprctl dispatch focusmonitor $focused
|
hyprctl dispatch focusmonitor $focused
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
browser=$(xdg-settings get default-web-browser)
|
browser=$(xdg-settings get default-web-browser)
|
||||||
|
|
||||||
case $browser in
|
case $browser in
|
||||||
google-chrome* | brave-browser* | microsoft-edge* | opera* | vivaldi* | helium-browser*) ;;
|
google-chrome* | brave-browser* | microsoft-edge* | opera* | vivaldi* | helium*) ;;
|
||||||
*) browser="chromium.desktop" ;;
|
*) browser="chromium.desktop" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
exec setsid uwsm-app -- xdg-terminal-exec --app-id=com.omarchy.Impala -e impala "$@"
|
exec setsid omarchy-launch-or-focus com.omarchy.Impala "uwsm-app -- xdg-terminal-exec --app-id=com.omarchy.Impala -e impala"
|
||||||
|
|||||||
@@ -9,4 +9,4 @@ if pgrep -x "1password" >/dev/null; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Avoid running screensaver when locked
|
# Avoid running screensaver when locked
|
||||||
pkill -f "alacritty --class Screensaver"
|
pkill -f com.omarchy.Screensaver
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ menu() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "$options" | omarchy-launch-walker --dmenu --width 295 --minheight 1 --maxheight 600 -p "$prompt…" "${args[@]}" 2>/dev/null
|
echo -e "$options" | omarchy-launch-walker --dmenu --width 295 --minheight 1 --maxheight 630 -p "$prompt…" "${args[@]}" 2>/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
terminal() {
|
terminal() {
|
||||||
@@ -124,7 +124,7 @@ show_screenrecord_menu() {
|
|||||||
|
|
||||||
show_share_menu() {
|
show_share_menu() {
|
||||||
case $(menu "Share" " Clipboard\n File \n Folder") in
|
case $(menu "Share" " Clipboard\n File \n Folder") in
|
||||||
*Clipboard*) terminal bash -c "omarchy-cmd-share clipboard" ;;
|
*Clipboard*) omarchy-cmd-share clipboard ;;
|
||||||
*File*) terminal bash -c "omarchy-cmd-share file" ;;
|
*File*) terminal bash -c "omarchy-cmd-share file" ;;
|
||||||
*Folder*) terminal bash -c "omarchy-cmd-share folder" ;;
|
*Folder*) terminal bash -c "omarchy-cmd-share folder" ;;
|
||||||
*) back_to show_trigger_menu ;;
|
*) back_to show_trigger_menu ;;
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ dynamic_bindings() {
|
|||||||
jq -r '.[] | {modmask, key, keycode, description, dispatcher, arg} | "\(.modmask),\(.key)@\(.keycode),\(.description),\(.dispatcher),\(.arg)"' |
|
jq -r '.[] | {modmask, key, keycode, description, dispatcher, arg} | "\(.modmask),\(.key)@\(.keycode),\(.description),\(.dispatcher),\(.arg)"' |
|
||||||
sed -r \
|
sed -r \
|
||||||
-e 's/null//' \
|
-e 's/null//' \
|
||||||
|
-e 's,~/.local/share/omarchy/bin/,,' \
|
||||||
-e 's,uwsm app -- ,,' \
|
-e 's,uwsm app -- ,,' \
|
||||||
-e 's,uwsm-app -- ,,' \
|
-e 's,uwsm-app -- ,,' \
|
||||||
-e 's/@0//' \
|
-e 's/@0//' \
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ mkdir -p "$STATE_DIR"
|
|||||||
mkdir -p "$STATE_DIR/skipped"
|
mkdir -p "$STATE_DIR/skipped"
|
||||||
|
|
||||||
# Run any pending migrations
|
# Run any pending migrations
|
||||||
for file in /usr/share/omarchy/migrations/*.sh; do
|
for file in ~/.local/share/omarchy/migrations/*.sh; do
|
||||||
filename=$(basename "$file")
|
filename=$(basename "$file")
|
||||||
|
|
||||||
if [[ ! -f "$STATE_DIR/$filename" && ! -f "$STATE_DIR/skipped/$filename" ]]; then
|
if [[ ! -f "$STATE_DIR/$filename" && ! -f "$STATE_DIR/skipped/$filename" ]]; then
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
# Copy and sync icon files
|
# Copy and sync icon files
|
||||||
mkdir -p ~/.local/share/icons/hicolor/48x48/apps/
|
mkdir -p ~/.local/share/icons/hicolor/48x48/apps/
|
||||||
cp /usr/share/omarchy/applications/icons/*.png ~/.local/share/icons/hicolor/48x48/apps/
|
cp ~/.local/share/omarchy/applications/icons/*.png ~/.local/share/icons/hicolor/48x48/apps/
|
||||||
gtk-update-icon-cache ~/.local/share/icons/hicolor &>/dev/null
|
gtk-update-icon-cache ~/.local/share/icons/hicolor &>/dev/null
|
||||||
|
|
||||||
# Copy .desktop declarations
|
# Copy .desktop declarations
|
||||||
mkdir -p ~/.local/share/applications
|
mkdir -p ~/.local/share/applications
|
||||||
cp /usr/share/omarchy/applications/*.desktop ~/.local/share/applications/
|
cp ~/.local/share/omarchy/applications/*.desktop ~/.local/share/applications/
|
||||||
cp /usr/share/omarchy/applications/hidden/*.desktop ~/.local/share/applications/
|
cp ~/.local/share/omarchy/applications/hidden/*.desktop ~/.local/share/applications/
|
||||||
|
|
||||||
update-desktop-database ~/.local/share/applications
|
update-desktop-database ~/.local/share/applications
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# This script deploys /etc/skel/.config/X/Y/Z -> ~/.config/X/Y/Z
|
# This script deploys ~/.local/share/omarchy/config/X/Y/Z -> ~/.config/X/Y/Z
|
||||||
config_file=$1
|
config_file=$1
|
||||||
|
|
||||||
if [[ -z "$config_file" ]]; then
|
if [[ -z "$config_file" ]]; then
|
||||||
@@ -8,7 +8,7 @@ if [[ -z "$config_file" ]]; then
|
|||||||
Usage: $0 [config_file]
|
Usage: $0 [config_file]
|
||||||
|
|
||||||
Must provide a file path from the .config directory to be refreshed.
|
Must provide a file path from the .config directory to be refreshed.
|
||||||
To copy /etc/skel/.config/hypr/hyprlock.conf to ~/.config/hypr/hyprlock.conf
|
To copy ~/.local/share/omarchy/config/hypr/hyprlock.conf to ~/.config/hypr/hyprlock.conf
|
||||||
|
|
||||||
$0 hypr/hyprlock.conf
|
$0 hypr/hyprlock.conf
|
||||||
USAGE
|
USAGE
|
||||||
@@ -17,7 +17,7 @@ fi
|
|||||||
|
|
||||||
# Backup the destination file (with timestamp) to avoid clobbering (Ex: hyprlock.conf.bak.1753817951)
|
# Backup the destination file (with timestamp) to avoid clobbering (Ex: hyprlock.conf.bak.1753817951)
|
||||||
user_config_file="${HOME}/.config/$config_file"
|
user_config_file="${HOME}/.config/$config_file"
|
||||||
default_config_file="/etc/skel/.config/$config_file"
|
default_config_file="${HOME}/.local/share/omarchy/config/$config_file"
|
||||||
backup_config_file="$user_config_file.bak.$(date +%s)"
|
backup_config_file="$user_config_file.bak.$(date +%s)"
|
||||||
|
|
||||||
if [[ -f "$user_config_file" ]]; then
|
if [[ -f "$user_config_file" ]]; then
|
||||||
|
|||||||
@@ -2,6 +2,6 @@
|
|||||||
|
|
||||||
omarchy-refresh-config hypr/autostart.conf
|
omarchy-refresh-config hypr/autostart.conf
|
||||||
omarchy-refresh-config hypr/bindings.conf
|
omarchy-refresh-config hypr/bindings.conf
|
||||||
omarchy-refresh-config hypr/envs.conf
|
|
||||||
omarchy-refresh-config hypr/input.conf
|
omarchy-refresh-config hypr/input.conf
|
||||||
|
omarchy-refresh-config hypr/looknfeel.conf
|
||||||
omarchy-refresh-config hypr/hyprland.conf
|
omarchy-refresh-config hypr/hyprland.conf
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
sudo cp -f /usr/share/omarchy/default/pacman/mirrorlist /etc/pacman.d/mirrorlist
|
if [[ $1 == "edge" ]]; then
|
||||||
|
sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist-edge /etc/pacman.d/mirrorlist
|
||||||
|
else
|
||||||
|
sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist-stable /etc/pacman.d/mirrorlist
|
||||||
|
fi
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
sudo cp /usr/share/omarchy/default/plymouth/* /usr/share/plymouth/themes/omarchy/
|
sudo cp ~/.local/share/omarchy/default/plymouth/* /usr/share/plymouth/themes/omarchy/
|
||||||
sudo plymouth-set-default-theme omarchy
|
sudo plymouth-set-default-theme omarchy
|
||||||
|
|
||||||
if command -v limine-mkinitcpio &>/dev/null; then
|
if command -v limine-mkinitcpio &>/dev/null; then
|
||||||
|
|||||||
@@ -10,15 +10,19 @@ 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"
|
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
|
if gum confirm "Are you sure you want to reinstall and lose all config changes?"; then
|
||||||
echo "Reinstalling Omarchy Package"
|
echo "Resetting Omarchy repository"
|
||||||
sudo pacman -Syu --noconfirm --needed omarchy
|
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 missing Omarchy packages"
|
echo "Reinstalling missing Omarchy packages"
|
||||||
mapfile -t packages < <(grep -v '^#' "$OMARCHY_PATH/install/omarchy-base.packages" | grep -v '^$')
|
mapfile -t packages < <(grep -v '^#' "$OMARCHY_PATH/install/omarchy-base.packages" | grep -v '^$')
|
||||||
sudo pacman -Syu --noconfirm --needed "${packages[@]}"
|
sudo pacman -Syu --noconfirm --needed "${packages[@]}"
|
||||||
|
|
||||||
echo "Resetting all Omarchy configs"
|
echo "Resetting all Omarchy configs"
|
||||||
cp -R /etc/skel/.config/* ~/.config/
|
cp -R ~/.local/share/omarchy/config/* ~/.config/
|
||||||
|
cp ~/.local/share/omarchy/default/bashrc ~/.bashrc
|
||||||
|
echo '[[ -f ~/.bashrc ]] && . ~/.bashrc' | tee ~/.bash_profile >/dev/null
|
||||||
|
|
||||||
$(bash $OMARCHY_PATH/install/config/theme.sh)
|
$(bash $OMARCHY_PATH/install/config/theme.sh)
|
||||||
$(bash $OMARCHY_PATH/install/config/git.sh)
|
$(bash $OMARCHY_PATH/install/config/git.sh)
|
||||||
|
|||||||
@@ -4,5 +4,10 @@ if [[ -f ~/.config/alacritty/alacritty.toml ]]; then
|
|||||||
touch ~/.config/alacritty/alacritty.toml
|
touch ~/.config/alacritty/alacritty.toml
|
||||||
fi
|
fi
|
||||||
|
|
||||||
killall -SIGUSR1 kitty
|
if pgrep -x kitty; then
|
||||||
killall -SIGUSR2 ghostty
|
killall -SIGUSR1 kitty
|
||||||
|
fi
|
||||||
|
|
||||||
|
if pgrep -x ghostty; then
|
||||||
|
killall -SIGUSR2 ghostty
|
||||||
|
fi
|
||||||
@@ -1,32 +1,21 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
pkill elephant
|
||||||
|
pkill walker
|
||||||
|
|
||||||
# Detect if we're running as root (from pacman hook)
|
# Detect if we're running as root (from pacman hook)
|
||||||
if [[ $EUID -eq 0 ]]; then
|
if [[ $EUID -eq 0 ]]; then
|
||||||
# Find all logged-in users running Hyprland
|
# Get the owner of this script to determine which user to run as
|
||||||
for user_runtime in /run/user/*/; do
|
SCRIPT_OWNER=$(stat -c '%U' "$0")
|
||||||
USER_UID=$(basename "$user_runtime")
|
USER_UID=$(id -u "$SCRIPT_OWNER")
|
||||||
USER_NAME=$(id -un "$USER_UID" 2>/dev/null)
|
|
||||||
|
|
||||||
# Skip if we can't resolve the username or if no Hyprland session
|
# Restart services as the script owner
|
||||||
[[ -z "$USER_NAME" ]] && continue
|
systemd-run --uid="$SCRIPT_OWNER" --setenv=XDG_RUNTIME_DIR="/run/user/$USER_UID" \
|
||||||
[[ ! -S "${user_runtime}hypr/"*"/.socket.sock" ]] && continue
|
|
||||||
|
|
||||||
# Kill existing processes for this user
|
|
||||||
pkill -u "$USER_NAME" elephant
|
|
||||||
pkill -u "$USER_NAME" walker
|
|
||||||
|
|
||||||
# Restart services as this user
|
|
||||||
systemd-run --uid="$USER_NAME" --setenv=XDG_RUNTIME_DIR="/run/user/$USER_UID" \
|
|
||||||
bash -c "
|
bash -c "
|
||||||
setsid uwsm-app -- elephant &
|
setsid uwsm-app -- elephant &
|
||||||
setsid uwsm-app -- walker --gapplication-service &
|
setsid uwsm-app -- walker --gapplication-service &
|
||||||
"
|
"
|
||||||
done
|
|
||||||
else
|
else
|
||||||
# Running as user directly
|
|
||||||
pkill elephant
|
|
||||||
pkill walker
|
|
||||||
|
|
||||||
setsid uwsm-app -- elephant &
|
setsid uwsm-app -- elephant &
|
||||||
wait 2
|
wait 2
|
||||||
setsid uwsm-app -- walker --gapplication-service &
|
setsid uwsm-app -- walker --gapplication-service &
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Track active Omarchy user for package migrations
|
|
||||||
echo "$USER:$HOME:$XDG_RUNTIME_DIR" > /tmp/omarchy-active-user
|
|
||||||
@@ -51,6 +51,16 @@ EOF
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
add_hyprlock_fingerprint_icon() {
|
||||||
|
print_info "Adding fingerprint icon to hyprlock placeholder text..."
|
||||||
|
sed -i 's/placeholder_text = .*/placeholder_text = <span> Enter Password <\/span>/' ~/.config/hypr/hyprlock.conf
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_hyprlock_fingerprint_icon() {
|
||||||
|
print_info "Removing fingerprint icon from hyprlock placeholder text..."
|
||||||
|
sed -i 's/placeholder_text = .*/placeholder_text = Enter Password/' ~/.config/hypr/hyprlock.conf
|
||||||
|
}
|
||||||
|
|
||||||
remove_pam_config() {
|
remove_pam_config() {
|
||||||
# Remove from sudo
|
# Remove from sudo
|
||||||
if grep -q pam_fprintd.so /etc/pam.d/sudo; then
|
if grep -q pam_fprintd.so /etc/pam.d/sudo; then
|
||||||
@@ -71,6 +81,9 @@ if [[ "--remove" == "$1" ]]; then
|
|||||||
# Remove PAM configuration
|
# Remove PAM configuration
|
||||||
remove_pam_config
|
remove_pam_config
|
||||||
|
|
||||||
|
# Remove fingerprint icon from hyprlock placeholder text
|
||||||
|
remove_hyprlock_fingerprint_icon
|
||||||
|
|
||||||
# Uninstall packages
|
# Uninstall packages
|
||||||
print_info "Removing fingerprint packages..."
|
print_info "Removing fingerprint packages..."
|
||||||
sudo pacman -Rns --noconfirm fprintd
|
sudo pacman -Rns --noconfirm fprintd
|
||||||
@@ -90,6 +103,9 @@ else
|
|||||||
# Configure PAM
|
# Configure PAM
|
||||||
setup_pam_config
|
setup_pam_config
|
||||||
|
|
||||||
|
# Add fingerprint icon to hyprlock placeholder text
|
||||||
|
add_hyprlock_fingerprint_icon
|
||||||
|
|
||||||
# Enroll first fingerprint
|
# Enroll first fingerprint
|
||||||
print_success "\nLet's setup your right index finger as the first fingerprint."
|
print_success "\nLet's setup your right index finger as the first fingerprint."
|
||||||
print_info "Keep moving the finger around on sensor until the process completes.\n"
|
print_info "Keep moving the finger around on sensor until the process completes.\n"
|
||||||
|
|||||||
@@ -2,6 +2,6 @@
|
|||||||
|
|
||||||
clear
|
clear
|
||||||
echo -e "\033[32m"
|
echo -e "\033[32m"
|
||||||
cat < /usr/share/omarchy/logo.txt
|
cat <~/.local/share/omarchy/logo.txt
|
||||||
echo -e "\033[0m"
|
echo -e "\033[0m"
|
||||||
echo
|
echo
|
||||||
|
|||||||
@@ -28,12 +28,12 @@ if pgrep -x waybar >/dev/null; then
|
|||||||
omarchy-restart-waybar
|
omarchy-restart-waybar
|
||||||
fi
|
fi
|
||||||
omarchy-restart-swayosd
|
omarchy-restart-swayosd
|
||||||
|
omarchy-restart-terminal
|
||||||
hyprctl reload
|
hyprctl reload
|
||||||
pkill -SIGUSR2 btop
|
pkill -SIGUSR2 btop
|
||||||
makoctl reload
|
makoctl reload
|
||||||
|
|
||||||
# Change gnome, browser, vscode, cursor themes
|
# Change gnome, browser, vscode, cursor themes
|
||||||
omarchy-theme-set-terminal
|
|
||||||
omarchy-theme-set-gnome
|
omarchy-theme-set-gnome
|
||||||
omarchy-theme-set-browser
|
omarchy-theme-set-browser
|
||||||
omarchy-theme-set-vscode
|
omarchy-theme-set-vscode
|
||||||
|
|||||||
@@ -391,7 +391,7 @@ extract_theme_data() {
|
|||||||
readarray -t color_slots < <(fill_color_slots "${unique_colors[@]}" | tr ' ' '\n')
|
readarray -t color_slots < <(fill_color_slots "${unique_colors[@]}" | tr ' ' '\n')
|
||||||
|
|
||||||
# Extract fonts
|
# Extract fonts
|
||||||
local monospace_font="CaskaydiaMono Nerd Font"
|
local monospace_font="JetBrainsMono Nerd Font"
|
||||||
local ui_font="Liberation Sans"
|
local ui_font="Liberation Sans"
|
||||||
|
|
||||||
if [ -f "$CURRENT_THEME_DIR/alacritty.toml" ]; then
|
if [ -f "$CURRENT_THEME_DIR/alacritty.toml" ]; then
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ if [ "$#" -ne 4 ]; then
|
|||||||
APP_NAME=$(gum input --prompt "Name> " --placeholder "My TUI")
|
APP_NAME=$(gum input --prompt "Name> " --placeholder "My TUI")
|
||||||
APP_EXEC=$(gum input --prompt "Launch Command> " --placeholder "lazydocker or bash -c 'dust; read -n 1 -s'")
|
APP_EXEC=$(gum input --prompt "Launch Command> " --placeholder "lazydocker or bash -c 'dust; read -n 1 -s'")
|
||||||
WINDOW_STYLE=$(gum choose --header "Window style" float tile)
|
WINDOW_STYLE=$(gum choose --header "Window style" float tile)
|
||||||
ICON_URL=$(gum input --prompt "Icon URL> " --placeholder "See https://dashboardicons.com (must use PNG!)")
|
ICON_URL=$(gum input --prompt "Icon URL> " --placeholder "See https://dashboardicons.com (must use PNG or SVG!)")
|
||||||
else
|
else
|
||||||
APP_NAME="$1"
|
APP_NAME="$1"
|
||||||
APP_EXEC="$2"
|
APP_EXEC="$2"
|
||||||
@@ -43,7 +43,7 @@ cat >"$DESKTOP_FILE" <<EOF
|
|||||||
Version=1.0
|
Version=1.0
|
||||||
Name=$APP_NAME
|
Name=$APP_NAME
|
||||||
Comment=$APP_NAME
|
Comment=$APP_NAME
|
||||||
Exec=\$TERMINAL --class=$APP_CLASS -e $APP_EXEC
|
Exec=xdg-terminal-exec --app-id=$APP_CLASS -e $APP_EXEC
|
||||||
Terminal=false
|
Terminal=false
|
||||||
Type=Application
|
Type=Application
|
||||||
Icon=$ICON_PATH
|
Icon=$ICON_PATH
|
||||||
|
|||||||
@@ -4,7 +4,8 @@ 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
|
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
|
if omarchy-update-confirm; then
|
||||||
omarchy-snapshot create || [ $? -eq 127 ]
|
omarchy-snapshot create || [ $? -eq 127 ]
|
||||||
omarchy-update-git
|
omarchy-update-git
|
||||||
omarchy-update-perform
|
omarchy-update-perform
|
||||||
|
fi
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
gum style --border normal --border-foreground 6 --padding "1 2" \
|
gum style --border normal --border-foreground 6 --padding "1 2" \
|
||||||
"Ready to update Omarchy?" \
|
"Ready to update Omarchy?" \
|
||||||
"" \
|
"" \
|
||||||
@@ -10,5 +8,5 @@ gum style --border normal --border-foreground 6 --padding "1 2" \
|
|||||||
|
|
||||||
if ! gum confirm "Continue with update?"; then
|
if ! gum confirm "Continue with update?"; then
|
||||||
echo "Update cancelled"
|
echo "Update cancelled"
|
||||||
exit 0
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -327,7 +327,7 @@ To stop: omarchy-windows-vm stop"
|
|||||||
"$LIFECYCLE"
|
"$LIFECYCLE"
|
||||||
|
|
||||||
# Detect display scale from Hyprland
|
# Detect display scale from Hyprland
|
||||||
HYPR_SCALE=$(hyprctl monitors -j | jq -r '.[0].scale')
|
HYPR_SCALE=$(hyprctl monitors -j | jq -r '.[] | select (.focused == true) | .scale')
|
||||||
SCALE_PERCENT=$(echo "$HYPR_SCALE" | awk '{print int($1 * 100)}')
|
SCALE_PERCENT=$(echo "$HYPR_SCALE" | awk '{print int($1 * 100)}')
|
||||||
|
|
||||||
RDP_SCALE=""
|
RDP_SCALE=""
|
||||||
|
|||||||
19
boot.sh
19
boot.sh
@@ -19,4 +19,21 @@ echo -e "\n$ansi_art\n"
|
|||||||
|
|
||||||
sudo pacman -Syu --noconfirm --needed git
|
sudo pacman -Syu --noconfirm --needed git
|
||||||
|
|
||||||
# FIXME: Update behavior or remove
|
# 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
|
||||||
|
|||||||
Binary file not shown.
@@ -4,9 +4,9 @@ general.import = [ "~/.config/omarchy/current/theme/alacritty.toml" ]
|
|||||||
TERM = "xterm-256color"
|
TERM = "xterm-256color"
|
||||||
|
|
||||||
[font]
|
[font]
|
||||||
normal = { family = "CaskaydiaMono Nerd Font", style = "Regular" }
|
normal = { family = "JetBrainsMono Nerd Font", style = "Regular" }
|
||||||
bold = { family = "CaskaydiaMono Nerd Font", style = "Bold" }
|
bold = { family = "JetBrainsMono Nerd Font", style = "Bold" }
|
||||||
italic = { family = "CaskaydiaMono Nerd Font", style = "Italic" }
|
italic = { family = "JetBrainsMono Nerd Font", style = "Italic" }
|
||||||
size = 9
|
size = 9
|
||||||
|
|
||||||
[window]
|
[window]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
--ozone-platform=wayland
|
--ozone-platform=wayland
|
||||||
--ozone-platform-hint=wayland
|
--ozone-platform-hint=wayland
|
||||||
--enable-features=TouchpadOverscrollHistoryNavigation
|
--enable-features=TouchpadOverscrollHistoryNavigation
|
||||||
--load-extension=/usr/share/omarchy/default/chromium/extensions/copy-url
|
--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url
|
||||||
# Chromium crash workaround for Wayland color management on Hyprland - see https://github.com/hyprwm/Hyprland/issues/11957
|
# Chromium crash workaround for Wayland color management on Hyprland - see https://github.com/hyprwm/Hyprland/issues/11957
|
||||||
--disable-features=WaylandWpColorManagerV1
|
--disable-features=WaylandWpColorManagerV1
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
<string>monospace</string>
|
<string>monospace</string>
|
||||||
</test>
|
</test>
|
||||||
<edit name="family" mode="assign" binding="strong">
|
<edit name="family" mode="assign" binding="strong">
|
||||||
<string>CaskaydiaMono Nerd Font</string>
|
<string>JetBrainsMono Nerd Font</string>
|
||||||
</edit>
|
</edit>
|
||||||
</match>
|
</match>
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
config-file = ?"~/.config/omarchy/current/theme/ghostty.conf"
|
config-file = ?"~/.config/omarchy/current/theme/ghostty.conf"
|
||||||
|
|
||||||
# Font
|
# Font
|
||||||
font-family = "CaskaydiaMono Nerd Font"
|
font-family = "JetBrainsMono Nerd Font"
|
||||||
font-style = Regular
|
font-style = Regular
|
||||||
font-size = 9
|
font-size = 9
|
||||||
|
|
||||||
@@ -25,3 +25,6 @@ shell-integration-features = no-cursor,ssh-env
|
|||||||
# Keyboard bindings
|
# Keyboard bindings
|
||||||
keybind = shift+insert=paste_from_clipboard
|
keybind = shift+insert=paste_from_clipboard
|
||||||
keybind = control+insert=copy_to_clipboard
|
keybind = control+insert=copy_to_clipboard
|
||||||
|
|
||||||
|
# Slowdown mouse scrolling
|
||||||
|
mouse-scroll-multiplier = 0.95
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
$terminal = uwsm-app -- xdg-terminal-exec
|
$terminal = uwsm-app -- xdg-terminal-exec
|
||||||
$browser = omarchy-launch-browser
|
$browser = omarchy-launch-browser
|
||||||
|
|
||||||
bindd = SUPER, RETURN, Terminal, exec, $terminal --working-directory="$(omarchy-cmd-terminal-cwd)"
|
bindd = SUPER, RETURN, Terminal, exec, $terminal --dir="$(omarchy-cmd-terminal-cwd)"
|
||||||
bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window
|
bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window
|
||||||
bindd = SUPER SHIFT, B, Browser, exec, $browser
|
bindd = SUPER SHIFT, B, Browser, exec, $browser
|
||||||
bindd = SUPER SHIFT ALT, B, Browser (private), exec, $browser --private
|
bindd = SUPER SHIFT ALT, B, Browser (private), exec, $browser --private
|
||||||
@@ -11,7 +11,7 @@ bindd = SUPER SHIFT, N, Editor, exec, omarchy-launch-editor
|
|||||||
bindd = SUPER SHIFT, T, Activity, exec, $terminal -e btop
|
bindd = SUPER SHIFT, T, Activity, exec, $terminal -e btop
|
||||||
bindd = SUPER SHIFT, D, Docker, exec, $terminal -e lazydocker
|
bindd = SUPER SHIFT, D, Docker, exec, $terminal -e lazydocker
|
||||||
bindd = SUPER SHIFT, G, Signal, exec, omarchy-launch-or-focus signal "uwsm-app -- signal-desktop"
|
bindd = SUPER SHIFT, G, Signal, exec, omarchy-launch-or-focus signal "uwsm-app -- signal-desktop"
|
||||||
bindd = SUPER SHIFT, O, Obsidian, exec, omarchy-launch-or-focus "^obsidian$" "uwsm-app -- obsidian -disable-gpu --enable-wayland-ime"
|
bindd = SUPER SHIFT, O, Obsidian, exec, omarchy-launch-or-focus obsidian "uwsm-app -- obsidian -disable-gpu --enable-wayland-ime"
|
||||||
bindd = SUPER SHIFT, W, Typora, exec, uwsm-app -- typora --enable-wayland-ime
|
bindd = SUPER SHIFT, W, Typora, exec, uwsm-app -- typora --enable-wayland-ime
|
||||||
bindd = SUPER SHIFT, SLASH, Passwords, exec, uwsm-app -- 1password
|
bindd = SUPER SHIFT, SLASH, Passwords, exec, uwsm-app -- 1password
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
# Extra env variables
|
|
||||||
# env = MY_GLOBAL_ENV,setting
|
|
||||||
@@ -1,22 +1,21 @@
|
|||||||
# Learn how to configure Hyprland: https://wiki.hyprland.org/Configuring/
|
# Learn how to configure Hyprland: https://wiki.hyprland.org/Configuring/
|
||||||
|
|
||||||
# Use defaults Omarchy defaults (but don't edit these directly!)
|
# Use defaults Omarchy defaults (but don't edit these directly!)
|
||||||
source = /usr/share/omarchy/default/hypr/autostart.conf
|
source = ~/.local/share/omarchy/default/hypr/autostart.conf
|
||||||
source = /usr/share/omarchy/default/hypr/bindings/media.conf
|
source = ~/.local/share/omarchy/default/hypr/bindings/media.conf
|
||||||
source = /usr/share/omarchy/default/hypr/bindings/clipboard.conf
|
source = ~/.local/share/omarchy/default/hypr/bindings/clipboard.conf
|
||||||
source = /usr/share/omarchy/default/hypr/bindings/tiling-v2.conf
|
source = ~/.local/share/omarchy/default/hypr/bindings/tiling-v2.conf
|
||||||
source = /usr/share/omarchy/default/hypr/bindings/utilities.conf
|
source = ~/.local/share/omarchy/default/hypr/bindings/utilities.conf
|
||||||
source = /usr/share/omarchy/default/hypr/envs.conf
|
source = ~/.local/share/omarchy/default/hypr/envs.conf
|
||||||
source = /usr/share/omarchy/default/hypr/looknfeel.conf
|
source = ~/.local/share/omarchy/default/hypr/looknfeel.conf
|
||||||
source = /usr/share/omarchy/default/hypr/input.conf
|
source = ~/.local/share/omarchy/default/hypr/input.conf
|
||||||
source = /usr/share/omarchy/default/hypr/windows.conf
|
source = ~/.local/share/omarchy/default/hypr/windows.conf
|
||||||
source = ~/.config/omarchy/current/theme/hyprland.conf
|
source = ~/.config/omarchy/current/theme/hyprland.conf
|
||||||
|
|
||||||
# Change your own setup in these files (and overwrite any settings from defaults!)
|
# Change your own setup in these files (and overwrite any settings from defaults!)
|
||||||
source = ~/.config/hypr/monitors.conf
|
source = ~/.config/hypr/monitors.conf
|
||||||
source = ~/.config/hypr/input.conf
|
source = ~/.config/hypr/input.conf
|
||||||
source = ~/.config/hypr/bindings.conf
|
source = ~/.config/hypr/bindings.conf
|
||||||
source = ~/.config/hypr/envs.conf
|
|
||||||
source = ~/.config/hypr/looknfeel.conf
|
source = ~/.config/hypr/looknfeel.conf
|
||||||
source = ~/.config/hypr/autostart.conf
|
source = ~/.config/hypr/autostart.conf
|
||||||
|
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ input-field {
|
|||||||
outer_color = $outer_color
|
outer_color = $outer_color
|
||||||
outline_thickness = 4
|
outline_thickness = 4
|
||||||
|
|
||||||
font_family = CaskaydiaMono Nerd Font Propo
|
font_family = JetBrainsMono Nerd Font
|
||||||
font_color = $font_color
|
font_color = $font_color
|
||||||
|
|
||||||
placeholder_text = Enter Password
|
placeholder_text = Enter Password
|
||||||
check_color = $check_color
|
check_color = $check_color
|
||||||
fail_text = <i>$FAIL ($ATTEMPTS)</i>
|
fail_text = <i>$FAIL ($ATTEMPTS)</i>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
input {
|
input {
|
||||||
# Use multiple keyboard layouts and switch between them with Left Alt + Right Alt
|
# Use multiple keyboard layouts and switch between them with Left Alt + Right Alt
|
||||||
# kb_layout = us,dk,eu
|
# kb_layout = us,dk,eu
|
||||||
kb_options = compose:caps # ,grp:shifts_toggle
|
kb_options = compose:caps # ,grp:alts_toggle
|
||||||
|
|
||||||
# Change speed of keyboard repeat
|
# Change speed of keyboard repeat
|
||||||
repeat_rate = 40
|
repeat_rate = 40
|
||||||
|
|||||||
@@ -1,2 +1,13 @@
|
|||||||
[binds]
|
[binds]
|
||||||
<Ctrl+p> = exec lp $imv_current_file
|
|
||||||
|
# Print the current image file
|
||||||
|
<Ctrl+p> = exec lp "$imv_current_file"
|
||||||
|
|
||||||
|
# Delete the current image and quit the viewer
|
||||||
|
<Ctrl+x> = exec rm "$imv_current_file"; quit
|
||||||
|
|
||||||
|
# Delete the current image and move to the next one
|
||||||
|
<Ctrl+Shift+X> = exec rm "$imv_current_file"; close
|
||||||
|
|
||||||
|
# Rotate the currently open image by 90 degrees
|
||||||
|
<Ctrl+r> = exec mogrify -rotate 90 "$imv_current_file"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
include ~/.config/omarchy/current/theme/kitty.conf
|
include ~/.config/omarchy/current/theme/kitty.conf
|
||||||
|
|
||||||
# Font
|
# Font
|
||||||
font_family CaskaydiaMono Nerd Font
|
font_family JetBrainsMono Nerd Font
|
||||||
bold_italic_font auto
|
bold_italic_font auto
|
||||||
font_size 9.0
|
font_size 9.0
|
||||||
|
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
[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;
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
██████████████████████████████████████████████████████
|
|
||||||
██████████████████████████████████████████████████████
|
|
||||||
████ ████ ████
|
|
||||||
████ ████ ████
|
|
||||||
████ █████████████████████ ████████ ████
|
|
||||||
████ █████████████████████ ████████ ████
|
|
||||||
████ ████ ████ ████
|
|
||||||
████ ████ ████ ████
|
|
||||||
████ ████ ████ ████
|
|
||||||
████ ████ ████ ████
|
|
||||||
████ ████ ████ ████
|
|
||||||
████ ████ ████ ████
|
|
||||||
████████████ ████ ████
|
|
||||||
████████████ ████ ████
|
|
||||||
████ ████ ████ ████
|
|
||||||
████ ████ ████ ████
|
|
||||||
████ ████ ████ ████
|
|
||||||
████ ████ ████ ████
|
|
||||||
████ ████ ████ ████
|
|
||||||
████ ████ ████ ████
|
|
||||||
████ ██████████████████████████████████████ ████
|
|
||||||
████ ██████████████████████████████████████ ████
|
|
||||||
████ ████ ████
|
|
||||||
████ ████ ████
|
|
||||||
█████████████████████████████ ████████████████████
|
|
||||||
█████████████████████████████ ████████████████████
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
▄▄▄
|
|
||||||
▄█████▄ ▄███████████▄ ▄███████ ▄███████ ▄███████ ▄█ █▄ ▄█ █▄
|
|
||||||
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
|
|
||||||
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ █▀ ███ ███ ███ ███
|
|
||||||
███ ███ ███ ███ ███ ▄███▄▄▄███ ▄███▄▄▄██▀ ███ ▄███▄▄▄███▄ ███▄▄▄███
|
|
||||||
███ ███ ███ ███ ███ ▀███▀▀▀███ ▀███▀▀▀▀ ███ ▀▀███▀▀▀███ ▀▀▀▀▀▀███
|
|
||||||
███ ███ ███ ███ ███ ███ ███ ██████████ ███ █▄ ███ ███ ▄██ ███
|
|
||||||
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
|
|
||||||
▀█████▀ ▀█ ███ █▀ ███ █▀ ███ ███ ███████▀ ███ █▀ ▀█████▀
|
|
||||||
███ █▀
|
|
||||||
@@ -9,7 +9,7 @@ window {
|
|||||||
}
|
}
|
||||||
|
|
||||||
label {
|
label {
|
||||||
font-family: 'CaskaydiaMono Nerd Font';
|
font-family: 'JetBrainsMono Nerd Font';
|
||||||
font-size: 11pt;
|
font-size: 11pt;
|
||||||
|
|
||||||
color: @label;
|
color: @label;
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
# Changes require a restart to take effect.
|
# Changes require a restart to take effect.
|
||||||
|
|
||||||
# Set default OMARCHY_PATH
|
# Ensure Omarchy bins are in the path
|
||||||
export OMARCHY_PATH=/usr/share/omarchy
|
export OMARCHY_PATH=$HOME/.local/share/omarchy
|
||||||
|
export PATH=$OMARCHY_PATH/bin:$PATH
|
||||||
|
|
||||||
# Set default terminal and editor
|
# Set default terminal and editor
|
||||||
source ~/.config/uwsm/default
|
source ~/.config/uwsm/default
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
force_keyboard_focus = true # forces keyboard forcus to stay in Walker
|
force_keyboard_focus = true # forces keyboard forcus to stay in Walker
|
||||||
selection_wrap = true # wrap list if at bottom or top
|
selection_wrap = true # wrap list if at bottom or top
|
||||||
theme = "omarchy-default" # theme to use
|
theme = "omarchy-default" # theme to use
|
||||||
|
additional_theme_location = "~/.local/share/omarchy/default/walker/themes/"
|
||||||
|
|
||||||
[placeholders]
|
[placeholders]
|
||||||
"default" = { input = " Search...", list = "No Results" } # placeholders for input and empty list, key is the providers name, so f.e. "desktopapplications" or "menus:other"
|
"default" = { input = " Search...", list = "No Results" } # placeholders for input and empty list, key is the providers name, so f.e. "desktopapplications" or "menus:other"
|
||||||
@@ -9,6 +10,7 @@ theme = "omarchy-default" # th
|
|||||||
quick_activate = []
|
quick_activate = []
|
||||||
|
|
||||||
[providers]
|
[providers]
|
||||||
|
max_results = 256 # 256 should be enough for everyone
|
||||||
default = [
|
default = [
|
||||||
"desktopapplications",
|
"desktopapplications",
|
||||||
"menus",
|
"menus",
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
border: none;
|
border: none;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
font-family: 'CaskaydiaMono Nerd Font';
|
font-family: 'JetBrainsMono Nerd Font';
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
3
config/xdg-terminals.list
Normal file
3
config/xdg-terminals.list
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Terminal emulator preference order for xdg-terminal-exec
|
||||||
|
# The first found and valid terminal will be used
|
||||||
|
com.mitchellh.ghostty.desktop
|
||||||
@@ -25,14 +25,21 @@ format-drive() {
|
|||||||
else
|
else
|
||||||
echo "WARNING: This will completely erase all data on $1 and label it '$2'."
|
echo "WARNING: This will completely erase all data on $1 and label it '$2'."
|
||||||
read -rp "Are you sure you want to continue? (y/N): " confirm
|
read -rp "Are you sure you want to continue? (y/N): " confirm
|
||||||
|
|
||||||
if [[ "$confirm" =~ ^[Yy]$ ]]; then
|
if [[ "$confirm" =~ ^[Yy]$ ]]; then
|
||||||
sudo wipefs -a "$1"
|
sudo wipefs -a "$1"
|
||||||
sudo dd if=/dev/zero of="$1" bs=1M count=100 status=progress
|
sudo dd if=/dev/zero of="$1" bs=1M count=100 status=progress
|
||||||
sudo parted -s "$1" mklabel gpt
|
sudo parted -s "$1" mklabel gpt
|
||||||
sudo parted -s "$1" mkpart primary ext4 1MiB 100%
|
sudo parted -s "$1" mkpart primary 1MiB 100%
|
||||||
sudo mkfs.ext4 -L "$2" "$([[ $1 == *"nvme"* ]] && echo "${1}p1" || echo "${1}1")"
|
|
||||||
sudo chmod -R 777 "/run/media/$USER/$2"
|
partition="$([[ $1 == *"nvme"* ]] && echo "${1}p1" || echo "${1}1")"
|
||||||
echo "Drive $1 formatted and labeled '$2'."
|
sudo partprobe "$1" || true
|
||||||
|
sudo udevadm settle || true
|
||||||
|
|
||||||
|
omarchy-pkg-add exfatprogs
|
||||||
|
sudo mkfs.exfat -n "$2" "$partition"
|
||||||
|
|
||||||
|
echo "Drive $1 formatted as exFAT and labeled '$2'."
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,10 @@ if command -v zoxide &> /dev/null; then
|
|||||||
eval "$(zoxide init bash)"
|
eval "$(zoxide init bash)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if command -v try &> /dev/null; then
|
||||||
|
eval "$(try init ~/Work/tries)"
|
||||||
|
fi
|
||||||
|
|
||||||
if command -v fzf &> /dev/null; then
|
if command -v fzf &> /dev/null; then
|
||||||
if [[ -f /usr/share/fzf/completion.bash ]]; then
|
if [[ -f /usr/share/fzf/completion.bash ]]; then
|
||||||
source /usr/share/fzf/completion.bash
|
source /usr/share/fzf/completion.bash
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
# Technicolor dreams
|
|
||||||
force_color_prompt=yes
|
|
||||||
color_prompt=yes
|
|
||||||
|
|
||||||
# Simple prompt with path in the window/pane title and caret for typing line
|
|
||||||
PS1=$'\uf0a9 '
|
|
||||||
PS1="\[\e]0;\w\a\]$PS1"
|
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
source /usr/share/omarchy/default/bash/shell
|
source ~/.local/share/omarchy/default/bash/shell
|
||||||
source /usr/share/omarchy/default/bash/aliases
|
source ~/.local/share/omarchy/default/bash/aliases
|
||||||
source /usr/share/omarchy/default/bash/functions
|
source ~/.local/share/omarchy/default/bash/functions
|
||||||
source /usr/share/omarchy/default/bash/prompt
|
source ~/.local/share/omarchy/default/bash/init
|
||||||
source /usr/share/omarchy/default/bash/init
|
source ~/.local/share/omarchy/default/bash/envs
|
||||||
source /usr/share/omarchy/default/bash/envs
|
[[ $- == *i* ]] && bind -f ~/.local/share/omarchy/default/bash/inputrc
|
||||||
[[ $- == *i* ]] && bind -f /usr/share/omarchy/default/bash/inputrc
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
# All the default Omarchy aliases and functions
|
# All the default Omarchy aliases and functions
|
||||||
# (don't mess with these directly, just overwrite them here!)
|
# (don't mess with these directly, just overwrite them here!)
|
||||||
source /usr/share/omarchy/default/bash/rc
|
source ~/.local/share/omarchy/default/bash/rc
|
||||||
|
|
||||||
# Add your own exports, aliases, and functions here.
|
# Add your own exports, aliases, and functions here.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
# App-specific tweaks
|
# App-specific tweaks
|
||||||
source = /usr/share/omarchy/default/hypr/apps/1password.conf
|
source = ~/.local/share/omarchy/default/hypr/apps/1password.conf
|
||||||
source = /usr/share/omarchy/default/hypr/apps/bitwarden.conf
|
source = ~/.local/share/omarchy/default/hypr/apps/bitwarden.conf
|
||||||
source = /usr/share/omarchy/default/hypr/apps/browser.conf
|
source = ~/.local/share/omarchy/default/hypr/apps/browser.conf
|
||||||
source = /usr/share/omarchy/default/hypr/apps/hyprshot.conf
|
source = ~/.local/share/omarchy/default/hypr/apps/hyprshot.conf
|
||||||
source = /usr/share/omarchy/default/hypr/apps/jetbrains.conf
|
source = ~/.local/share/omarchy/default/hypr/apps/jetbrains.conf
|
||||||
source = /usr/share/omarchy/default/hypr/apps/localsend.conf
|
source = ~/.local/share/omarchy/default/hypr/apps/localsend.conf
|
||||||
source = /usr/share/omarchy/default/hypr/apps/pip.conf
|
source = ~/.local/share/omarchy/default/hypr/apps/pip.conf
|
||||||
source = /usr/share/omarchy/default/hypr/apps/qemu.conf
|
source = ~/.local/share/omarchy/default/hypr/apps/qemu.conf
|
||||||
source = /usr/share/omarchy/default/hypr/apps/retroarch.conf
|
source = ~/.local/share/omarchy/default/hypr/apps/retroarch.conf
|
||||||
source = /usr/share/omarchy/default/hypr/apps/steam.conf
|
source = ~/.local/share/omarchy/default/hypr/apps/steam.conf
|
||||||
source = /usr/share/omarchy/default/hypr/apps/system.conf
|
source = ~/.local/share/omarchy/default/hypr/apps/system.conf
|
||||||
source = /usr/share/omarchy/default/hypr/apps/terminals.conf
|
source = ~/.local/share/omarchy/default/hypr/apps/terminals.conf
|
||||||
source = /usr/share/omarchy/default/hypr/apps/walker.conf
|
source = ~/.local/share/omarchy/default/hypr/apps/walker.conf
|
||||||
source = /usr/share/omarchy/default/hypr/apps/webcam-overlay.conf
|
source = ~/.local/share/omarchy/default/hypr/apps/webcam-overlay.conf
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
windowrule = noscreenshare, class:^(1Password)$
|
windowrule = noscreenshare, class:^(1[p|P]assword)$
|
||||||
|
windowrule = tag +floating-window, class:^(1[p|P]assword)$
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Browser types
|
# Browser types
|
||||||
windowrule = tag +chromium-based-browser, class:((google-)?[cC]hrom(e|ium)|[bB]rave-browser|Microsoft-edge|Vivaldi-stable|helium)
|
windowrule = tag +chromium-based-browser, class:((google-)?[cC]hrom(e|ium)|[bB]rave-browser|[mM]icrosoft-edge|Vivaldi-stable|helium)
|
||||||
windowrule = tag +firefox-based-browser, class:([fF]irefox|zen|librewolf)
|
windowrule = tag +firefox-based-browser, class:([fF]irefox|zen|librewolf)
|
||||||
|
|
||||||
# Force chromium-based browsers into a tile to deal with --app bug
|
# Force chromium-based browsers into a tile to deal with --app bug
|
||||||
|
|||||||
2
default/hypr/apps/davinci-resolve.conf
Normal file
2
default/hypr/apps/davinci-resolve.conf
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Focus floating DaVinci Resolve dialog windows
|
||||||
|
windowrule = stayfocused, class:.*[Rr]esolve.*, floating:1
|
||||||
@@ -1,9 +1,19 @@
|
|||||||
# JetBrains windows default size
|
# Fix splash screen showing in weird places and prevent annoying focus takeovers
|
||||||
windowrule = size 50% 50%, class:(.*jetbrains.*)$, title:^$
|
windowrule = tag +jetbrains-splash, class:^(jetbrains-.*)$, title:^(splash)$, floating:1
|
||||||
|
windowrule = center, tag:jetbrains-splash
|
||||||
|
windowrule = nofocus, tag:jetbrains-splash
|
||||||
|
windowrule = noborder, tag:jetbrains-splash
|
||||||
|
|
||||||
# Fix tab dragging (tab titles are just one space)
|
# Center popups/find windows
|
||||||
windowrule = noinitialfocus, class:^(.*jetbrains.*)$, title:^\\s$
|
windowrule = tag +jetbrains, class:^(jetbrains-.*), title:^()$, floating:1
|
||||||
|
windowrule = center, tag:jetbrains
|
||||||
|
|
||||||
# Allow dialogs (like "Send usage statistics") to be focusable and clickable
|
# Enabling this makes it possible to provide input in popup dialogs (search window, new file, etc.)
|
||||||
windowrule = unset,nofocus,class:^(.*jetbrains.*)$,title:^$
|
windowrule = stayfocused, tag:jetbrains
|
||||||
windowrule = unset,noinitialfocus,class:^(.*jetbrains.*)$,title:^$
|
windowrule = noborder, tag:jetbrains
|
||||||
|
|
||||||
|
# For some reason tag:jetbrains does not work for size rule
|
||||||
|
windowrule = size >50% >50%, class:^(jetbrains-.*), title:^()$, floating:1
|
||||||
|
|
||||||
|
# Disable window flicker when autocomplete or tooltips appear
|
||||||
|
windowrule = noinitialfocus, class:^(jetbrains-.*)$, title:^(win.*)$, floating:1
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ windowrule = tag +floating-window, class:(xdg-desktop-portal-gtk|sublime_text|De
|
|||||||
windowrule = float, class:org.gnome.Calculator
|
windowrule = float, class:org.gnome.Calculator
|
||||||
|
|
||||||
# Fullscreen screensaver
|
# Fullscreen screensaver
|
||||||
windowrule = fullscreen, class:Screensaver
|
windowrule = fullscreen, class:com.omarchy.Screensaver
|
||||||
|
|
||||||
# No transparency on media windows
|
# No transparency on media windows
|
||||||
windowrule = opacity 1 1, class:^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$
|
windowrule = opacity 1 1, class:^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
exec-once = omarchy-set-user
|
|
||||||
exec-once = uwsm-app -- hypridle
|
exec-once = uwsm-app -- hypridle
|
||||||
exec-once = uwsm-app -- mako
|
exec-once = uwsm-app -- mako
|
||||||
exec-once = uwsm-app -- waybar
|
exec-once = uwsm-app -- waybar
|
||||||
|
|||||||
@@ -11,6 +11,6 @@ bindd = SUPER, G, Messenger, exec, $messenger
|
|||||||
bindd = SUPER, O, Obsidian, exec, obsidian -disable-gpu
|
bindd = SUPER, O, Obsidian, exec, obsidian -disable-gpu
|
||||||
bindd = SUPER, SLASH, Password manager, exec, $passwordManager
|
bindd = SUPER, SLASH, Password manager, exec, $passwordManager
|
||||||
|
|
||||||
source = /usr/share/omarchy/default/hypr/bindings/media.conf
|
source = ~/.local/share/omarchy/default/hypr/bindings/media.conf
|
||||||
source = /usr/share/omarchy/default/hypr/bindings/tiling.conf
|
source = ~/.local/share/omarchy/default/hypr/bindings/tiling.conf
|
||||||
source = /usr/share/omarchy/default/hypr/bindings/utilities.conf
|
source = ~/.local/share/omarchy/default/hypr/bindings/utilities.conf
|
||||||
|
|||||||
@@ -48,6 +48,10 @@ bindd = SUPER, TAB, Next workspace, workspace, e+1
|
|||||||
bindd = SUPER SHIFT, TAB, Previous workspace, workspace, e-1
|
bindd = SUPER SHIFT, TAB, Previous workspace, workspace, e-1
|
||||||
bindd = SUPER CTRL, TAB, Former workspace, workspace, previous
|
bindd = SUPER CTRL, TAB, Former workspace, workspace, previous
|
||||||
|
|
||||||
|
# Move workspaces to other monitors
|
||||||
|
bindd = SUPER SHIFT ALT, LEFT, Move workspace to left monitor, movecurrentworkspacetomonitor, l
|
||||||
|
bindd = SUPER SHIFT ALT, RIGHT, Move workspace to right monitor, movecurrentworkspacetomonitor, r
|
||||||
|
|
||||||
# Swap active window with the one next to it with SUPER + SHIFT + arrow keys
|
# Swap active window with the one next to it with SUPER + SHIFT + arrow keys
|
||||||
bindd = SUPER SHIFT, LEFT, Swap window to the left, swapwindow, l
|
bindd = SUPER SHIFT, LEFT, Swap window to the left, swapwindow, l
|
||||||
bindd = SUPER SHIFT, RIGHT, Swap window to the right, swapwindow, r
|
bindd = SUPER SHIFT, RIGHT, Swap window to the right, swapwindow, r
|
||||||
@@ -87,14 +91,14 @@ bindd = SUPER ALT, DOWN, Move window to group on bottom, moveintogroup, d
|
|||||||
# Navigate a single set of grouped windows
|
# Navigate a single set of grouped windows
|
||||||
bindd = SUPER ALT, TAB, Next window in group, changegroupactive, f
|
bindd = SUPER ALT, TAB, Next window in group, changegroupactive, f
|
||||||
bindd = SUPER ALT SHIFT, TAB, Previous window in group, changegroupactive, b
|
bindd = SUPER ALT SHIFT, TAB, Previous window in group, changegroupactive, b
|
||||||
|
bindd = SUPER ALT, page_up, Next window in group, changegroupactive, f
|
||||||
# Scroll through a set of grouped windows with SUPER + ALT + scroll
|
bindd = SUPER ALT, page_down, Previous window in group, changegroupactive, b
|
||||||
bindd = SUPER ALT, mouse_down, Next window in group, changegroupactive, f
|
bindd = SUPER ALT, mouse_down, Next window in group, changegroupactive, f
|
||||||
bindd = SUPER ALT, mouse_up, Previous window in group, changegroupactive, b
|
bindd = SUPER ALT, mouse_up, Previous window in group, changegroupactive, b
|
||||||
|
|
||||||
# Activate window in a group by number
|
# Activate window in a group by number
|
||||||
bindd = SUPER ALT, 1, Switch to group window 1, changegroupactive, 1
|
bindd = SUPER ALT, code:10, Switch to group window 1, changegroupactive, 1
|
||||||
bindd = SUPER ALT, 2, Switch to group window 2, changegroupactive, 2
|
bindd = SUPER ALT, code:11, Switch to group window 2, changegroupactive, 2
|
||||||
bindd = SUPER ALT, 3, Switch to group window 3, changegroupactive, 3
|
bindd = SUPER ALT, code:12, Switch to group window 3, changegroupactive, 3
|
||||||
bindd = SUPER ALT, 4, Switch to group window 4, changegroupactive, 4
|
bindd = SUPER ALT, code:13, Switch to group window 4, changegroupactive, 4
|
||||||
bindd = SUPER ALT, 5, Switch to group window 5, changegroupactive, 5
|
bindd = SUPER ALT, code:14, Switch to group window 5, changegroupactive, 5
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ bindd = SUPER SHIFT, BACKSPACE, Toggle workspace gaps, exec, omarchy-hyprland-wo
|
|||||||
bindd = SUPER, COMMA, Dismiss last notification, exec, makoctl dismiss
|
bindd = SUPER, COMMA, Dismiss last notification, exec, makoctl dismiss
|
||||||
bindd = SUPER SHIFT, COMMA, Dismiss all notifications, exec, makoctl dismiss --all
|
bindd = SUPER SHIFT, COMMA, Dismiss all notifications, exec, makoctl dismiss --all
|
||||||
bindd = SUPER CTRL, COMMA, Toggle silencing notifications, exec, makoctl mode -t do-not-disturb && makoctl mode | grep -q 'do-not-disturb' && notify-send "Silenced notifications" || notify-send "Enabled notifications"
|
bindd = SUPER CTRL, COMMA, Toggle silencing notifications, exec, makoctl mode -t do-not-disturb && makoctl mode | grep -q 'do-not-disturb' && notify-send "Silenced notifications" || notify-send "Enabled notifications"
|
||||||
|
bindd = SUPER ALT, COMMA, Invoke last notification, exec, makoctl invoke
|
||||||
|
|
||||||
# Toggle idling
|
# Toggle idling
|
||||||
bindd = SUPER CTRL, I, Toggle locking on idle, exec, omarchy-toggle-idle
|
bindd = SUPER CTRL, I, Toggle locking on idle, exec, omarchy-toggle-idle
|
||||||
|
|||||||
@@ -14,3 +14,8 @@ input {
|
|||||||
natural_scroll = false
|
natural_scroll = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
misc {
|
||||||
|
key_press_enables_dpms = true # key press will trigger wake
|
||||||
|
mouse_move_enables_dpms = true # mouse move will trigger wake
|
||||||
|
}
|
||||||
|
|||||||
@@ -38,8 +38,11 @@ decoration {
|
|||||||
# https://wiki.hyprland.org/Configuring/Variables/#blur
|
# https://wiki.hyprland.org/Configuring/Variables/#blur
|
||||||
blur {
|
blur {
|
||||||
enabled = true
|
enabled = true
|
||||||
size = 3
|
size = 2
|
||||||
passes = 3
|
passes = 2
|
||||||
|
special = true
|
||||||
|
brightness = 0.60
|
||||||
|
contrast = 0.75
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,4 +8,4 @@ windowrule = opacity 0.97 0.9, class:.*
|
|||||||
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
|
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
|
||||||
|
|
||||||
# App-specific tweaks
|
# App-specific tweaks
|
||||||
source = /usr/share/omarchy/default/hypr/apps.conf
|
source = ~/.local/share/omarchy/default/hypr/apps.conf
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
Server = https://mirror.omarchy.org/$repo/os/$arch
|
|
||||||
Server = https://mirror.rackspace.com/archlinux/$repo/os/$arch
|
|
||||||
Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch
|
|
||||||
1
default/pacman/mirrorlist-edge
Normal file
1
default/pacman/mirrorlist-edge
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Server = https://mirror.omarchy.org/$repo/os/$arch
|
||||||
1
default/pacman/mirrorlist-stable
Normal file
1
default/pacman/mirrorlist-stable
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Server = https://stable-mirror.omarchy.org/$repo/os/$arch
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
@import "../../../omarchy/current/theme/walker.css";
|
@import "../../../../../../../.config/omarchy/current/theme/walker.css";
|
||||||
|
|
||||||
* {
|
* {
|
||||||
all: unset;
|
all: unset;
|
||||||
|
|||||||
@@ -1,750 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"log-driver": "json-file",
|
|
||||||
"log-opts": { "max-size": "10m", "max-file": "5" },
|
|
||||||
"dns": ["172.17.0.1"],
|
|
||||||
"bip": "172.17.0.1/16"
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
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 +0,0 @@
|
|||||||
options usbcore autosuspend=-1
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
[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
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
[Daemon]
|
|
||||||
Theme=omarchy
|
|
||||||
ShowDelay=0
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
# 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 +0,0 @@
|
|||||||
%wheel ALL=(ALL) NOPASSWD: /usr/bin/asdcontrol
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Defaults passwd_tries=10
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
%wheel ALL=(root) NOPASSWD: /usr/bin/tzupdate, /usr/bin/timedatectl
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
net.ipv4.tcp_mtu_probing=1
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
# Disable shutting system down on power button
|
|
||||||
# This allows binding the power button to a custom power menu in Hyprland
|
|
||||||
[Login]
|
|
||||||
HandlePowerKey=ignore
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
# Disable multicast DNS in systemd-resolved
|
|
||||||
# Avahi will provide mDNS instead for better network printer discovery
|
|
||||||
[Resolve]
|
|
||||||
MulticastDNS=no
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
[Resolve]
|
|
||||||
DNSStubListenerExtra=172.17.0.1
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
[Manager]
|
|
||||||
DefaultTimeoutStopSec=5s
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
DefaultDependencies=no
|
|
||||||
31
install.sh
31
install.sh
@@ -4,33 +4,14 @@
|
|||||||
set -eEo pipefail
|
set -eEo pipefail
|
||||||
|
|
||||||
# Define Omarchy locations
|
# Define Omarchy locations
|
||||||
export OMARCHY_PATH="/usr/share/omarchy"
|
export OMARCHY_PATH="$HOME/.local/share/omarchy"
|
||||||
export OMARCHY_INSTALL="$OMARCHY_PATH/install"
|
export OMARCHY_INSTALL="$OMARCHY_PATH/install"
|
||||||
|
export OMARCHY_INSTALL_LOG_FILE="/var/log/omarchy-install.log"
|
||||||
|
export PATH="$OMARCHY_PATH/bin:$PATH"
|
||||||
|
|
||||||
# Load helpers
|
# Install
|
||||||
source "$OMARCHY_INSTALL/helpers/chroot.sh"
|
source "$OMARCHY_INSTALL/helpers/all.sh"
|
||||||
|
source "$OMARCHY_INSTALL/preflight/all.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/packaging/all.sh"
|
||||||
source "$OMARCHY_INSTALL/config/all.sh"
|
source "$OMARCHY_INSTALL/config/all.sh"
|
||||||
source "$OMARCHY_INSTALL/login/all.sh"
|
source "$OMARCHY_INSTALL/login/all.sh"
|
||||||
|
|||||||
@@ -1,13 +1,29 @@
|
|||||||
|
run_logged $OMARCHY_INSTALL/config/config.sh
|
||||||
run_logged $OMARCHY_INSTALL/config/theme.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/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/detect-keyboard-layout.sh
|
||||||
run_logged $OMARCHY_INSTALL/config/xcompose.sh
|
run_logged $OMARCHY_INSTALL/config/xcompose.sh
|
||||||
run_logged $OMARCHY_INSTALL/config/mise-work.sh
|
run_logged $OMARCHY_INSTALL/config/mise-work.sh
|
||||||
run_logged $OMARCHY_INSTALL/config/fix-powerprofilesctl-shebang.sh
|
run_logged $OMARCHY_INSTALL/config/fix-powerprofilesctl-shebang.sh
|
||||||
run_logged $OMARCHY_INSTALL/config/docker.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/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/set-wireless-regdom.sh
|
||||||
run_logged $OMARCHY_INSTALL/config/hardware/fix-fkeys.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/nvidia.sh
|
||||||
run_logged $OMARCHY_INSTALL/config/hardware/fix-f13-amd-audio-input.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-bcm43xx.sh
|
||||||
@@ -15,6 +31,3 @@ 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-suspend-nvme.sh
|
||||||
run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-t2.sh
|
run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-t2.sh
|
||||||
run_logged $OMARCHY_INSTALL/config/hardware/fix-surface-keyboard.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
|
|
||||||
|
|||||||
4
install/config/branding.sh
Normal file
4
install/config/branding.sh
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# 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
|
||||||
6
install/config/config.sh
Normal file
6
install/config/config.sh
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# 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,2 +1,32 @@
|
|||||||
# Add user to docker group
|
# 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
|
||||||
sudo usermod -aG docker ${USER}
|
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
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user