@sebastienrousseau/dotfiles 0.2.519 → 0.2.521
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +200 -0
- package/LICENSE-APACHE +190 -0
- package/{LICENSE → LICENSE-MIT} +1 -1
- package/README.md +1172 -166
- package/install.sh +77 -11
- package/package.json +8 -8
- package/tools/README.md +49 -0
- package/tools/ci/install-chezmoi-verified.sh +68 -0
- package/docs/.vitepress/reports/localization-readability-audit.md +0 -73
- package/docs/AI.md +0 -179
- package/docs/CNAME +0 -1
- package/docs/CONFIG_STRATEGY.md +0 -124
- package/docs/COPYRIGHT +0 -7
- package/docs/GOVERNANCE.md +0 -98
- package/docs/MAINTAINERS.md +0 -41
- package/docs/NAMING_CONVENTIONS.md +0 -102
- package/docs/OPENCODE.md +0 -127
- package/docs/README.md +0 -84
- package/docs/STRUCTURE.md +0 -102
- package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -118
- package/docs/adr/ADR-002-shell-performance.md +0 -130
- package/docs/adr/ADR-003-security-first.md +0 -158
- package/docs/adr/ADR-004-cli-architecture.md +0 -171
- package/docs/adr/ADR-005-chezmoi-choice.md +0 -99
- package/docs/adr/ADR-006-shell-selection.md +0 -124
- package/docs/adr/ADR-007-multi-shell-parity.md +0 -62
- package/docs/adr/ADR-008-alias-system-architecture.md +0 -95
- package/docs/adr/ADR-009-wallpaper-driven-theming.md +0 -131
- package/docs/adr/ADR-010-starship-transient-prompt.md +0 -144
- package/docs/adr/ADR-011-nushell-tier3-keep.md +0 -144
- package/docs/adr/ADR-012-ai-fleet-local-proxy.md +0 -79
- package/docs/adr/README.md +0 -40
- package/docs/architecture/AI_COST_OPTIMIZATION.md +0 -144
- package/docs/architecture/ARCHITECTURE.md +0 -117
- package/docs/architecture/INTEROP.md +0 -44
- package/docs/architecture/REPO_LAYOUT.md +0 -241
- package/docs/architecture/WALKTHROUGH.md +0 -86
- package/docs/architecture/fleet-deployment.md +0 -77
- package/docs/archive/EUXIS_2026_REVIEW.md +0 -127
- package/docs/archive/LEGACY_ROADMAP.md +0 -6
- package/docs/archive/MILESTONE_v0.2.493.md +0 -47
- package/docs/archive/PLAN.md +0 -199
- package/docs/archive/REPO_AUDIT.md +0 -31
- package/docs/articles/.pages +0 -6
- package/docs/articles/2026-07-05-custom-mkdocs-material-dark-theme.md +0 -216
- package/docs/articles/2026-07-05-fish-startup-abbr.md +0 -153
- package/docs/articles/2026-07-05-master-to-main-rename-runbook.md +0 -128
- package/docs/articles/index.md +0 -36
- package/docs/guides/INSTALL.md +0 -144
- package/docs/guides/NEOVIM_IDE_GUIDE.md +0 -61
- package/docs/guides/THEMING.md +0 -230
- package/docs/guides/TROUBLESHOOTING.md +0 -176
- package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +0 -792
- package/docs/index.md +0 -132
- package/docs/interop/A2A.md +0 -39
- package/docs/interop/POWERSHELL.md +0 -102
- package/docs/manual/00-introduction.md +0 -89
- package/docs/manual/01-concepts/01-architecture.md +0 -138
- package/docs/manual/01-concepts/02-trust-model.md +0 -183
- package/docs/manual/01-concepts/03-theme-engine.md +0 -186
- package/docs/manual/01-concepts/04-fleet.md +0 -148
- package/docs/manual/01-concepts/05-self-healing.md +0 -204
- package/docs/manual/02-tutorials/01-first-install.md +0 -197
- package/docs/manual/02-tutorials/02-add-wallpaper.md +0 -216
- package/docs/manual/02-tutorials/03-create-profile.md +0 -244
- package/docs/manual/02-tutorials/04-encrypt-secret.md +0 -281
- package/docs/manual/02-tutorials/05-deploy-fleet.md +0 -283
- package/docs/manual/03-reference/01-dot-cli.md +0 -450
- package/docs/manual/03-reference/02-config-files.md +0 -265
- package/docs/manual/03-reference/03-environment.md +0 -124
- package/docs/manual/03-reference/04-templates.md +0 -190
- package/docs/manual/03-reference/05-feature-flags.md +0 -187
- package/docs/manual/04-cookbook/01-recipes.md +0 -285
- package/docs/manual/04-cookbook/02-troubleshooting.md +0 -351
- package/docs/manual/04-cookbook/03-faq.md +0 -175
- package/docs/manual/05-appendices/A-platform-matrix.md +0 -101
- package/docs/manual/05-appendices/B-security-checklist.md +0 -85
- package/docs/manual/05-appendices/C-glossary.md +0 -40
- package/docs/manual/05-appendices/D-bibliography.md +0 -58
- package/docs/manual/05-appendices/E-license.md +0 -38
- package/docs/manual/_toc.yml +0 -58
- package/docs/manual/command-index.md +0 -155
- package/docs/manual/concept-index.md +0 -168
- package/docs/manual/index.md +0 -66
- package/docs/operations/ARCHITECTURE_ROADMAP.md +0 -7
- package/docs/operations/ATTESTATION.md +0 -44
- package/docs/operations/CI_CADENCE.md +0 -107
- package/docs/operations/CI_COMPOSITES.md +0 -156
- package/docs/operations/COMPLETIONS.md +0 -123
- package/docs/operations/COVERAGE.md +0 -204
- package/docs/operations/DRIFT.md +0 -107
- package/docs/operations/HARD_AUDIT_2026.md +0 -631
- package/docs/operations/MAINTENANCE.md +0 -63
- package/docs/operations/MANIFEST.md +0 -127
- package/docs/operations/MIGRATION.md +0 -109
- package/docs/operations/OPERATIONS.md +0 -188
- package/docs/operations/PERFORMANCE.md +0 -133
- package/docs/operations/REGISTRY.md +0 -90
- package/docs/operations/RELEASE_PIPELINE.md +0 -128
- package/docs/operations/RELIABILITY.md +0 -122
- package/docs/operations/RFC_v0_2_503_reorganization.md +0 -280
- package/docs/operations/ROADMAP.md +0 -10
- package/docs/operations/ROADMAP_2026.md +0 -7
- package/docs/operations/ROADMAP_V0_2_503.md +0 -10
- package/docs/operations/TESTING.md +0 -216
- package/docs/operations/TRACEABILITY.md +0 -43
- package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +0 -65
- package/docs/operations/VERSION_SYNC.md +0 -393
- package/docs/reference/ALIASES.md +0 -131
- package/docs/reference/ALIASES_CHEATSHEET.md +0 -32
- package/docs/reference/ALIASES_DEPRECATIONS.md +0 -13
- package/docs/reference/FEATURES.md +0 -66
- package/docs/reference/FONTS.md +0 -112
- package/docs/reference/POWERSHELL_PARITY.md +0 -82
- package/docs/reference/PROFILES.md +0 -69
- package/docs/reference/SCREENSHOTS.md +0 -121
- package/docs/reference/SCRIPTS.md +0 -71
- package/docs/reference/SUPPORT_MATRIX.md +0 -80
- package/docs/reference/THEMES.md +0 -117
- package/docs/reference/TOOLS.md +0 -110
- package/docs/reference/UTILS.md +0 -242
- package/docs/registry.json +0 -6
- package/docs/schema/dot-env-v1.json +0 -110
- package/docs/schema/dot-registry-v1.json +0 -33
- package/docs/security/AI_ACT_COMPLIANCE.md +0 -94
- package/docs/security/AUDIT_BYPASS.md +0 -103
- package/docs/security/AUTOMATION_SECRETS.md +0 -26
- package/docs/security/CI_EGRESS_ALLOWLIST.md +0 -127
- package/docs/security/CI_PINNING.md +0 -129
- package/docs/security/COMMIT_SIGNING.md +0 -138
- package/docs/security/COMPLIANCE.md +0 -458
- package/docs/security/DEPS_DEV_EXCEPTIONS.md +0 -86
- package/docs/security/DISCLOSURE.md +0 -130
- package/docs/security/ENCRYPTION.md +0 -57
- package/docs/security/FMEA.md +0 -159
- package/docs/security/FUZZING.md +0 -114
- package/docs/security/HISTORY_FILTERING.md +0 -132
- package/docs/security/INCIDENT_RESPONSE.md +0 -579
- package/docs/security/INSTALL_VERIFICATION.md +0 -122
- package/docs/security/KEYS.md +0 -49
- package/docs/security/KEY_ROTATION.md +0 -303
- package/docs/security/MCP_POLICY.md +0 -78
- package/docs/security/POLICY_RELEASES.md +0 -37
- package/docs/security/README.md +0 -28
- package/docs/security/SCORECARD.md +0 -195
- package/docs/security/SECRETS.md +0 -158
- package/docs/security/SECURITY.md +0 -45
- package/docs/security/SECURITY_CHECKLIST.md +0 -55
- package/docs/security/SHELL_EXEMPTIONS.md +0 -145
- package/docs/security/SOUP_REGISTER.md +0 -36
- package/docs/security/THREAT_MODEL.md +0 -130
- package/docs/security/VERIFICATION_VALIDATION.md +0 -228
- package/docs/security/VERIFY_RELEASE.md +0 -201
- package/docs/security/security-pubkey.asc +0 -15
- package/docs/stylesheets/extra.css +0 -444
- package/docs/themes/README.md +0 -10
- package/docs/themes/VISUAL_INTEGRITY_REPORT.md +0 -30
- package/docs/themes/hero-shot.svg +0 -78
- package/scripts/README.md +0 -123
- package/scripts/ci/check-copyright-headers.sh +0 -8
- package/scripts/ci/check-shell-preamble.sh +0 -8
- package/scripts/ci/guard-gitleaks-checkout.sh +0 -8
- package/scripts/demo/record.sh +0 -43
- package/scripts/diagnostics/a2a-conformance.sh +0 -163
- package/scripts/diagnostics/alias-governance.sh +0 -138
- package/scripts/diagnostics/aliases-cheatsheet.sh +0 -74
- package/scripts/diagnostics/aliases-manifest.sh +0 -77
- package/scripts/diagnostics/benchmark.sh +0 -408
- package/scripts/diagnostics/conflicts.sh +0 -73
- package/scripts/diagnostics/doctor-unified.sh +0 -39
- package/scripts/diagnostics/doctor.sh +0 -751
- package/scripts/diagnostics/drift-dashboard.sh +0 -202
- package/scripts/diagnostics/health.sh +0 -623
- package/scripts/diagnostics/history-analysis.sh +0 -86
- package/scripts/diagnostics/mcp-doctor.sh +0 -582
- package/scripts/diagnostics/perf.sh +0 -453
- package/scripts/diagnostics/scorecard.sh +0 -119
- package/scripts/diagnostics/secret-governance.sh +0 -65
- package/scripts/diagnostics/security-score.sh +0 -467
- package/scripts/diagnostics/smoke-test.sh +0 -88
- package/scripts/diagnostics/snapshot.sh +0 -90
- package/scripts/diagnostics/verify.sh +0 -108
- package/scripts/diagnostics/verify_state.sh +0 -73
- package/scripts/diagnostics/version-locks.sh +0 -94
- package/scripts/diagnostics/workstation-attestation.sh +0 -187
- package/scripts/dot/commands/agent.sh +0 -485
- package/scripts/dot/commands/agents.sh +0 -336
- package/scripts/dot/commands/ai.sh +0 -587
- package/scripts/dot/commands/aliases.sh +0 -277
- package/scripts/dot/commands/appearance.sh +0 -110
- package/scripts/dot/commands/completion.sh +0 -134
- package/scripts/dot/commands/core.sh +0 -217
- package/scripts/dot/commands/diagnostics.sh +0 -265
- package/scripts/dot/commands/env-emit.sh +0 -203
- package/scripts/dot/commands/fleet.sh +0 -688
- package/scripts/dot/commands/init.sh +0 -185
- package/scripts/dot/commands/lint.sh +0 -208
- package/scripts/dot/commands/manual.sh +0 -169
- package/scripts/dot/commands/meta.sh +0 -333
- package/scripts/dot/commands/patterns.sh +0 -55
- package/scripts/dot/commands/registry.sh +0 -419
- package/scripts/dot/commands/restore.sh +0 -232
- package/scripts/dot/commands/secrets.sh +0 -296
- package/scripts/dot/commands/security.sh +0 -102
- package/scripts/dot/commands/tools.sh +0 -556
- package/scripts/dot/data/alias-deprecations.tsv +0 -2
- package/scripts/dot/powershell/Dot.psm1 +0 -319
- package/scripts/fonts/install-nerd-fonts.sh +0 -75
- package/scripts/fonts/patch-fonts.sh +0 -36
- package/scripts/git-hooks/install.sh +0 -12
- package/scripts/git-hooks/pre-commit +0 -12
- package/scripts/git-hooks/pre-commit-audit.sh +0 -146
- package/scripts/git-hooks/pre-push +0 -105
- package/scripts/git-hooks/prepare-commit-msg +0 -29
- package/scripts/lib/secrets_provider.sh +0 -185
- package/scripts/ops/ai-setup.sh +0 -71
- package/scripts/ops/bundle.sh +0 -104
- package/scripts/ops/chaos.sh +0 -50
- package/scripts/ops/chezmoi-apply.sh +0 -333
- package/scripts/ops/chezmoi-diff.sh +0 -16
- package/scripts/ops/chezmoi-remove.sh +0 -46
- package/scripts/ops/chezmoi-update.sh +0 -63
- package/scripts/ops/heal-chezmoi.sh +0 -87
- package/scripts/ops/heal-system.sh +0 -129
- package/scripts/ops/heal-tools.sh +0 -297
- package/scripts/ops/heal.sh +0 -223
- package/scripts/ops/post-apply-repair.sh +0 -107
- package/scripts/ops/prewarm.sh +0 -128
- package/scripts/ops/release.sh +0 -262
- package/scripts/ops/rollback.sh +0 -604
- package/scripts/ops/setup.sh +0 -138
- package/scripts/ops/teleport.sh +0 -34
- package/scripts/qa/check-version-consistency.sh +0 -124
- package/scripts/qa/coverage-baseline.sh +0 -61
- package/scripts/qa/docs-coverage.sh +0 -112
- package/scripts/qa/examples-coverage.sh +0 -94
- package/scripts/qa/powershell-contract.ps1 +0 -95
- package/scripts/qa/reliability-audit.sh +0 -139
- package/scripts/qa/scorecard-snapshot.sh +0 -128
- package/scripts/qa/traceability-coverage.sh +0 -117
- package/scripts/qa/validate-examples.sh +0 -27
- package/scripts/qa/wsl-contract.sh +0 -12
- package/scripts/secrets/age-init.sh +0 -82
- package/scripts/secrets/create-secrets-file.sh +0 -46
- package/scripts/secrets/encrypt-ssh-key.sh +0 -44
- package/scripts/security/backup.sh +0 -58
- package/scripts/security/check-disclosure-key-expiry.sh +0 -111
- package/scripts/security/dns-doh.sh +0 -52
- package/scripts/security/encryption-check.sh +0 -55
- package/scripts/security/enforce-policies.sh +0 -335
- package/scripts/security/firewall.sh +0 -91
- package/scripts/security/lock-configs.sh +0 -67
- package/scripts/security/lock-screen.sh +0 -56
- package/scripts/security/manage-secrets.sh +0 -429
- package/scripts/security/ssh-cert.sh +0 -204
- package/scripts/security/telemetry-kill.sh +0 -51
- package/scripts/security/usb-safety.sh +0 -52
- package/scripts/theme/apply-gnome-theme.sh +0 -333
- package/scripts/theme/extract-heic-frames.sh +0 -115
- package/scripts/theme/extract-theme.py +0 -742
- package/scripts/theme/install-boot-logo.sh +0 -63
- package/scripts/theme/install-catppuccin-themes.sh +0 -371
- package/scripts/theme/install-cursors.sh +0 -26
- package/scripts/theme/install-file-icons.sh +0 -27
- package/scripts/theme/install-grub-theme.sh +0 -62
- package/scripts/theme/install-lock-icon.sh +0 -31
- package/scripts/theme/merge-wallpaper.sh +0 -146
- package/scripts/theme/rebuild-themes.sh +0 -544
- package/scripts/theme/switch.sh +0 -449
- package/scripts/theme/wallpaper-rotate.sh +0 -137
- package/scripts/theme/wallpaper-sync.sh +0 -690
- package/scripts/tools/cmatrix.sh +0 -22
- package/scripts/tools/detect-collisions.py +0 -103
- package/scripts/tools/emoji-picker.sh +0 -49
- package/scripts/tools/figlet-banner.sh +0 -19
- package/scripts/tools/log-rotate.sh +0 -31
- package/scripts/tools/lolcat-wrap.sh +0 -20
- package/scripts/tools/pipes.sh +0 -49
- package/scripts/tuning/linux.sh +0 -186
- package/scripts/tuning/macos.sh +0 -56
- package/scripts/uninstall.sh +0 -86
- package/scripts/version-sync.sh +0 -654
- package/templates/chezmoi-data/geekom-a9.toml.example +0 -21
- package/templates/chezmoi-data/mac-m1.toml.example +0 -16
- package/templates/chezmoi-data/mac-t2-linux.toml.example +0 -21
- package/templates/chezmoi-data/surface-pro-7p.toml.example +0 -21
- package/templates/projects/go/.github/workflows/ci.yml +0 -31
- package/templates/projects/go/README.md +0 -7
- package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +0 -8
- package/templates/projects/go/go.mod +0 -3
- package/templates/projects/go/go.sum +0 -0
- package/templates/projects/molecule/README.md +0 -7
- package/templates/projects/molecule/converge.yml +0 -7
- package/templates/projects/molecule/molecule.yml +0 -16
- package/templates/projects/node/.github/workflows/ci.yml +0 -30
- package/templates/projects/node/README.md +0 -7
- package/templates/projects/node/package-lock.json +0 -12
- package/templates/projects/node/package.json +0 -10
- package/templates/projects/node/src/index.js +0 -3
- package/templates/projects/packer/README.md +0 -15
- package/templates/projects/packer/main.pkr.hcl +0 -15
- package/templates/projects/python/.github/workflows/ci.yml +0 -34
- package/templates/projects/python/README.md +0 -7
- package/templates/projects/python/pyproject.toml +0 -25
- package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +0 -2
- package/templates/projects/python/tests/test_basic.py +0 -3
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# SPDX-License-Identifier: MIT
|
|
3
|
-
# Copyright (c) 2015-2026 Sebastien Rousseau
|
|
4
|
-
set -euo pipefail
|
|
5
|
-
|
|
6
|
-
logo_path="${DOTFILES_BOOT_LOGO:-$HOME/.config/dotfiles/boot/logo.png}"
|
|
7
|
-
APPLY=0
|
|
8
|
-
|
|
9
|
-
for arg in "$@"; do
|
|
10
|
-
case "$arg" in
|
|
11
|
-
--apply) APPLY=1 ;;
|
|
12
|
-
esac
|
|
13
|
-
done
|
|
14
|
-
|
|
15
|
-
if [[ "$(uname -s)" != "Linux" ]]; then
|
|
16
|
-
echo "Boot logo customization is Linux-only." >&2
|
|
17
|
-
exit 0
|
|
18
|
-
fi
|
|
19
|
-
|
|
20
|
-
if [[ ! -f "$logo_path" ]]; then
|
|
21
|
-
echo "Boot logo not found: $logo_path" >&2
|
|
22
|
-
echo "Place a PNG at that path or set DOTFILES_BOOT_LOGO." >&2
|
|
23
|
-
exit 1
|
|
24
|
-
fi
|
|
25
|
-
|
|
26
|
-
if [[ $APPLY -ne 1 ]]; then
|
|
27
|
-
echo "Dry run. Use --apply to install the boot logo." >&2
|
|
28
|
-
exit 0
|
|
29
|
-
fi
|
|
30
|
-
|
|
31
|
-
if [[ $EUID -ne 0 ]]; then
|
|
32
|
-
echo "Please run with sudo for boot logo install." >&2
|
|
33
|
-
exit 1
|
|
34
|
-
fi
|
|
35
|
-
|
|
36
|
-
if command -v plymouth-set-default-theme >/dev/null; then
|
|
37
|
-
theme_dir="/usr/share/plymouth/themes/dotfiles"
|
|
38
|
-
mkdir -p "$theme_dir"
|
|
39
|
-
cp "$logo_path" "$theme_dir/logo.png"
|
|
40
|
-
cat >"$theme_dir/dotfiles.plymouth" <<PLY
|
|
41
|
-
[Plymouth Theme]
|
|
42
|
-
Name=Dotfiles
|
|
43
|
-
Description=Dotfiles boot splash
|
|
44
|
-
ModuleName=script
|
|
45
|
-
|
|
46
|
-
[script]
|
|
47
|
-
ImageDir=$theme_dir
|
|
48
|
-
ScriptFile=$theme_dir/dotfiles.script
|
|
49
|
-
PLY
|
|
50
|
-
|
|
51
|
-
cat >"$theme_dir/dotfiles.script" <<'SCRIPT'
|
|
52
|
-
# Simple Plymouth script
|
|
53
|
-
image = Image("logo.png");
|
|
54
|
-
image.SetPosition(Window.GetX() + Window.GetWidth()/2 - image.GetWidth()/2,
|
|
55
|
-
Window.GetY() + Window.GetHeight()/2 - image.GetHeight()/2);
|
|
56
|
-
SCRIPT
|
|
57
|
-
|
|
58
|
-
plymouth-set-default-theme -R dotfiles
|
|
59
|
-
echo "Boot logo installed via Plymouth."
|
|
60
|
-
else
|
|
61
|
-
echo "Plymouth not found. Install plymouth to apply boot logo." >&2
|
|
62
|
-
exit 1
|
|
63
|
-
fi
|
|
@@ -1,371 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# SPDX-License-Identifier: MIT
|
|
3
|
-
# Copyright (c) 2015-2026 Sebastien Rousseau
|
|
4
|
-
## Catppuccin Theme Installer — Install Catppuccin themes for GNOME.
|
|
5
|
-
##
|
|
6
|
-
## Downloads and installs GTK themes, icon themes, cursor themes,
|
|
7
|
-
## GNOME Shell themes, and wallpapers from Catppuccin repositories.
|
|
8
|
-
##
|
|
9
|
-
## # Requirements
|
|
10
|
-
## - git: For cloning theme repositories
|
|
11
|
-
## - curl: For downloading assets
|
|
12
|
-
## - gnome-tweaks (optional): For applying themes
|
|
13
|
-
## - gnome-extensions (optional): For shell themes
|
|
14
|
-
##
|
|
15
|
-
## # Usage
|
|
16
|
-
## install-catppuccin-themes.sh # Install all components
|
|
17
|
-
## install-catppuccin-themes.sh gtk # GTK themes only
|
|
18
|
-
## install-catppuccin-themes.sh icons # Icon themes only
|
|
19
|
-
## install-catppuccin-themes.sh cursors # Cursor themes only
|
|
20
|
-
## install-catppuccin-themes.sh shell # GNOME Shell themes only
|
|
21
|
-
## install-catppuccin-themes.sh wallpapers # Wallpapers only
|
|
22
|
-
## install-catppuccin-themes.sh refresh # Refresh theme cache
|
|
23
|
-
##
|
|
24
|
-
## # Platform Notes
|
|
25
|
-
## - Linux/GNOME: Full support
|
|
26
|
-
## - Other DEs: GTK themes may work, shell themes require GNOME
|
|
27
|
-
|
|
28
|
-
set -euo pipefail
|
|
29
|
-
|
|
30
|
-
THEME_DIR="$HOME/.themes"
|
|
31
|
-
ICON_DIR="$HOME/.icons"
|
|
32
|
-
TEMP_DIR="$(umask 077 && mktemp -d)"
|
|
33
|
-
|
|
34
|
-
# Colors for output (respect NO_COLOR: https://no-color.org)
|
|
35
|
-
if [[ -z "${NO_COLOR:-}" ]] && [[ -t 1 ]]; then
|
|
36
|
-
RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m'
|
|
37
|
-
BLUE='\033[0;34m' NC='\033[0m'
|
|
38
|
-
else
|
|
39
|
-
RED='' GREEN='' YELLOW='' BLUE='' NC=''
|
|
40
|
-
fi
|
|
41
|
-
|
|
42
|
-
log() {
|
|
43
|
-
printf '%b\n' "${BLUE}[INFO]${NC} $1"
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
warn() {
|
|
47
|
-
printf '%b\n' "${YELLOW}[WARN]${NC} $1"
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
error() {
|
|
51
|
-
printf '%b\n' "${RED}[ERROR]${NC} $1"
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
success() {
|
|
55
|
-
printf '%b\n' "${GREEN}[SUCCESS]${NC} $1"
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
# Create directories
|
|
59
|
-
mkdir -p "$THEME_DIR" "$ICON_DIR"
|
|
60
|
-
trap 'rm -rf "$TEMP_DIR"' EXIT
|
|
61
|
-
|
|
62
|
-
# Check if git is available
|
|
63
|
-
if ! command -v git &>/dev/null; then
|
|
64
|
-
error "git is required but not installed."
|
|
65
|
-
exit 1
|
|
66
|
-
fi
|
|
67
|
-
|
|
68
|
-
# Function to install GTK themes
|
|
69
|
-
install_gtk_themes() {
|
|
70
|
-
log "Installing Catppuccin GTK themes..."
|
|
71
|
-
|
|
72
|
-
cd "$TEMP_DIR" || return 1
|
|
73
|
-
|
|
74
|
-
if [ ! -d "catppuccin-gtk" ]; then
|
|
75
|
-
git clone https://github.com/catppuccin/gtk.git catppuccin-gtk
|
|
76
|
-
else
|
|
77
|
-
git -C catppuccin-gtk pull
|
|
78
|
-
fi
|
|
79
|
-
|
|
80
|
-
cd catppuccin-gtk || return 1
|
|
81
|
-
|
|
82
|
-
# Install all variants
|
|
83
|
-
for variant in Latte Frappe Macchiato Mocha; do
|
|
84
|
-
for accent in Blue Lavender; do # Blue as primary, Lavender as alternative
|
|
85
|
-
theme_name="Catppuccin-$variant-Standard-$accent"
|
|
86
|
-
if [ "$variant" = "Latte" ]; then
|
|
87
|
-
theme_name="$theme_name-Light"
|
|
88
|
-
else
|
|
89
|
-
theme_name="$theme_name-Dark"
|
|
90
|
-
fi
|
|
91
|
-
|
|
92
|
-
log "Installing $theme_name..."
|
|
93
|
-
if [ -d "themes/$theme_name" ]; then
|
|
94
|
-
cp -r "themes/$theme_name" "$THEME_DIR/"
|
|
95
|
-
success "Installed $theme_name"
|
|
96
|
-
else
|
|
97
|
-
warn "Theme $theme_name not found in repository"
|
|
98
|
-
fi
|
|
99
|
-
done
|
|
100
|
-
done
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
# Function to install Papirus icon theme
|
|
104
|
-
install_papirus_icons() {
|
|
105
|
-
log "Installing Papirus icon themes..."
|
|
106
|
-
|
|
107
|
-
cd "$TEMP_DIR" || return 1
|
|
108
|
-
|
|
109
|
-
if [ ! -d "papirus-icon-theme" ]; then
|
|
110
|
-
git clone https://github.com/PapirusDevelopmentTeam/papirus-icon-theme.git
|
|
111
|
-
else
|
|
112
|
-
git -C papirus-icon-theme pull
|
|
113
|
-
fi
|
|
114
|
-
|
|
115
|
-
cd papirus-icon-theme || return 1
|
|
116
|
-
|
|
117
|
-
# Install Papirus variants
|
|
118
|
-
for variant in Papirus Papirus-Dark Papirus-Light; do
|
|
119
|
-
if [ -d "$variant" ]; then
|
|
120
|
-
log "Installing $variant icons..."
|
|
121
|
-
cp -r "$variant" "$ICON_DIR/"
|
|
122
|
-
success "Installed $variant"
|
|
123
|
-
fi
|
|
124
|
-
done
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
# Function to install Catppuccin cursors
|
|
128
|
-
install_catppuccin_cursors() {
|
|
129
|
-
log "Installing Catppuccin cursor themes..."
|
|
130
|
-
|
|
131
|
-
cd "$TEMP_DIR" || return 1
|
|
132
|
-
|
|
133
|
-
if [ ! -d "catppuccin-cursors" ]; then
|
|
134
|
-
git clone https://github.com/catppuccin/cursors.git catppuccin-cursors
|
|
135
|
-
else
|
|
136
|
-
git -C catppuccin-cursors pull
|
|
137
|
-
fi
|
|
138
|
-
|
|
139
|
-
cd catppuccin-cursors || return 1
|
|
140
|
-
|
|
141
|
-
# Install cursor themes for each variant
|
|
142
|
-
for variant in Catppuccin-Latte-* Catppuccin-Frappe-* Catppuccin-Macchiato-* Catppuccin-Mocha-*; do
|
|
143
|
-
if [ -d "cursors/$variant" ]; then
|
|
144
|
-
log "Installing cursor theme $variant..."
|
|
145
|
-
cp -r "cursors/$variant" "$ICON_DIR/"
|
|
146
|
-
success "Installed cursor theme $variant"
|
|
147
|
-
fi
|
|
148
|
-
done
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
# Function to install GNOME Shell themes
|
|
152
|
-
install_shell_themes() {
|
|
153
|
-
log "Installing GNOME Shell themes..."
|
|
154
|
-
|
|
155
|
-
# Check if user-themes extension is available
|
|
156
|
-
if command -v gnome-extensions &>/dev/null; then
|
|
157
|
-
if ! gnome-extensions list | grep -q "user-theme"; then
|
|
158
|
-
warn "User Themes extension not found. Install it from GNOME Extensions."
|
|
159
|
-
warn "Run: gnome-extensions install user-theme@gnome-shell-extensions.gcampax.github.com"
|
|
160
|
-
fi
|
|
161
|
-
fi
|
|
162
|
-
|
|
163
|
-
cd "$TEMP_DIR" || return 1
|
|
164
|
-
|
|
165
|
-
if [ ! -d "catppuccin-gnome-shell" ]; then
|
|
166
|
-
git clone https://github.com/catppuccin/gnome.git catppuccin-gnome-shell
|
|
167
|
-
else
|
|
168
|
-
git -C catppuccin-gnome-shell pull
|
|
169
|
-
fi
|
|
170
|
-
|
|
171
|
-
cd catppuccin-gnome-shell || return 1
|
|
172
|
-
|
|
173
|
-
# Install shell themes (use explicit names for portability)
|
|
174
|
-
for variant in Latte Frappe Macchiato Mocha; do
|
|
175
|
-
theme_name="Catppuccin-${variant}"
|
|
176
|
-
if [ -d "themes/$theme_name" ]; then
|
|
177
|
-
log "Installing GNOME Shell theme $theme_name..."
|
|
178
|
-
cp -r "themes/$theme_name" "$THEME_DIR/"
|
|
179
|
-
success "Installed GNOME Shell theme $theme_name"
|
|
180
|
-
fi
|
|
181
|
-
done
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
# Function to install wallpapers
|
|
185
|
-
install_wallpapers() {
|
|
186
|
-
log "Installing Catppuccin wallpapers..."
|
|
187
|
-
|
|
188
|
-
local wallpaper_dir="/usr/share/backgrounds/catppuccin"
|
|
189
|
-
local user_wallpaper_dir="$HOME/.local/share/backgrounds/catppuccin"
|
|
190
|
-
|
|
191
|
-
# Try system directory first, fallback to user directory
|
|
192
|
-
if [ -w "/usr/share/backgrounds" ] || sudo -n true 2>/dev/null; then
|
|
193
|
-
sudo mkdir -p "$wallpaper_dir" 2>/dev/null || {
|
|
194
|
-
warn "Cannot create system wallpaper directory, using user directory"
|
|
195
|
-
wallpaper_dir="$user_wallpaper_dir"
|
|
196
|
-
mkdir -p "$wallpaper_dir"
|
|
197
|
-
}
|
|
198
|
-
else
|
|
199
|
-
wallpaper_dir="$user_wallpaper_dir"
|
|
200
|
-
mkdir -p "$wallpaper_dir"
|
|
201
|
-
fi
|
|
202
|
-
|
|
203
|
-
cd "$TEMP_DIR" || return 1
|
|
204
|
-
|
|
205
|
-
if [ ! -d "catppuccin-wallpapers" ]; then
|
|
206
|
-
git clone https://github.com/catppuccin/wallpapers.git catppuccin-wallpapers
|
|
207
|
-
else
|
|
208
|
-
git -C catppuccin-wallpapers pull
|
|
209
|
-
fi
|
|
210
|
-
|
|
211
|
-
cd catppuccin-wallpapers || return 1
|
|
212
|
-
|
|
213
|
-
# Copy wallpapers
|
|
214
|
-
for variant in latte frappe macchiato mocha; do
|
|
215
|
-
for image in os/*.png misc/*.png; do
|
|
216
|
-
if [[ "$image" == *"$variant"* ]]; then
|
|
217
|
-
log "Installing wallpaper: $(basename "$image")"
|
|
218
|
-
if [ -w "$wallpaper_dir" ]; then
|
|
219
|
-
cp "$image" "$wallpaper_dir/cat_$variant.png"
|
|
220
|
-
else
|
|
221
|
-
sudo cp "$image" "$wallpaper_dir/cat_$variant.png"
|
|
222
|
-
fi
|
|
223
|
-
fi
|
|
224
|
-
done
|
|
225
|
-
done
|
|
226
|
-
|
|
227
|
-
success "Installed Catppuccin wallpapers to $wallpaper_dir"
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
# Function to apply GTK theme refresh
|
|
231
|
-
refresh_gtk() {
|
|
232
|
-
log "Refreshing GTK theme cache..."
|
|
233
|
-
|
|
234
|
-
# Update GTK icon cache
|
|
235
|
-
if command -v gtk-update-icon-cache &>/dev/null; then
|
|
236
|
-
for theme_dir in "$ICON_DIR"/*; do
|
|
237
|
-
if [ -d "$theme_dir" ] && [ -f "$theme_dir/index.theme" ]; then
|
|
238
|
-
gtk-update-icon-cache -f "$theme_dir" 2>/dev/null || true
|
|
239
|
-
fi
|
|
240
|
-
done
|
|
241
|
-
fi
|
|
242
|
-
|
|
243
|
-
# Reload GNOME Shell (if running)
|
|
244
|
-
if [ "$XDG_CURRENT_DESKTOP" = "GNOME" ] && command -v gnome-shell &>/dev/null; then
|
|
245
|
-
log "Reloading GNOME Shell..."
|
|
246
|
-
# Alt+F2, r, Enter - but we'll use dbus for safety
|
|
247
|
-
if command -v busctl &>/dev/null; then
|
|
248
|
-
busctl --user call org.gnome.Shell /org/gnome/Shell org.gnome.Shell Eval s 'Meta.restart("Themes updated")' 2>/dev/null || true
|
|
249
|
-
fi
|
|
250
|
-
fi
|
|
251
|
-
|
|
252
|
-
success "GTK theme cache refreshed"
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
# Function to provide installation summary
|
|
256
|
-
show_summary() {
|
|
257
|
-
echo ""
|
|
258
|
-
echo "=== Installation Summary ==="
|
|
259
|
-
echo ""
|
|
260
|
-
echo "Installed themes are now available in:"
|
|
261
|
-
echo " GTK Themes: $THEME_DIR"
|
|
262
|
-
echo " Icon Themes: $ICON_DIR"
|
|
263
|
-
echo " Wallpapers: $wallpaper_dir"
|
|
264
|
-
echo ""
|
|
265
|
-
echo "To apply themes:"
|
|
266
|
-
echo " 1. Use GNOME Tweaks or Extensions app"
|
|
267
|
-
echo " 2. Or use the dot theme switcher:"
|
|
268
|
-
echo " dot theme set catppuccin-mocha"
|
|
269
|
-
echo " dot theme set catppuccin-latte"
|
|
270
|
-
echo ""
|
|
271
|
-
echo "Available Catppuccin themes:"
|
|
272
|
-
echo " - catppuccin-latte (light)"
|
|
273
|
-
echo " - catppuccin-frappe (dark - muted)"
|
|
274
|
-
echo " - catppuccin-macchiato (dark - balanced)"
|
|
275
|
-
echo " - catppuccin-mocha (dark - rich)"
|
|
276
|
-
echo ""
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
# Function to check dependencies
|
|
280
|
-
check_dependencies() {
|
|
281
|
-
local missing_deps=()
|
|
282
|
-
|
|
283
|
-
# Check required commands
|
|
284
|
-
for cmd in git curl; do
|
|
285
|
-
if ! command -v "$cmd" &>/dev/null; then
|
|
286
|
-
missing_deps+=("$cmd")
|
|
287
|
-
fi
|
|
288
|
-
done
|
|
289
|
-
|
|
290
|
-
# Check optional commands
|
|
291
|
-
for cmd in gnome-tweaks gnome-extensions; do
|
|
292
|
-
if ! command -v "$cmd" &>/dev/null; then
|
|
293
|
-
warn "Optional dependency missing: $cmd"
|
|
294
|
-
fi
|
|
295
|
-
done
|
|
296
|
-
|
|
297
|
-
if [ ${#missing_deps[@]} -gt 0 ]; then
|
|
298
|
-
error "Missing required dependencies: ${missing_deps[*]}"
|
|
299
|
-
echo "Please install them and run this script again."
|
|
300
|
-
exit 1
|
|
301
|
-
fi
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
# Main execution
|
|
305
|
-
main() {
|
|
306
|
-
echo "=== Catppuccin GNOME Theme Installer ==="
|
|
307
|
-
echo ""
|
|
308
|
-
|
|
309
|
-
check_dependencies
|
|
310
|
-
|
|
311
|
-
log "Starting Catppuccin theme installation..."
|
|
312
|
-
|
|
313
|
-
install_gtk_themes
|
|
314
|
-
install_papirus_icons
|
|
315
|
-
install_catppuccin_cursors
|
|
316
|
-
install_shell_themes
|
|
317
|
-
install_wallpapers
|
|
318
|
-
refresh_gtk
|
|
319
|
-
|
|
320
|
-
show_summary
|
|
321
|
-
|
|
322
|
-
success "Catppuccin theme installation completed!"
|
|
323
|
-
|
|
324
|
-
# Cleanup
|
|
325
|
-
log "Cleaning up temporary files..."
|
|
326
|
-
rm -rf "$TEMP_DIR"
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
# Handle script arguments
|
|
330
|
-
case "${1:-install}" in
|
|
331
|
-
install | "")
|
|
332
|
-
main
|
|
333
|
-
;;
|
|
334
|
-
gtk)
|
|
335
|
-
install_gtk_themes
|
|
336
|
-
refresh_gtk
|
|
337
|
-
;;
|
|
338
|
-
icons)
|
|
339
|
-
install_papirus_icons
|
|
340
|
-
refresh_gtk
|
|
341
|
-
;;
|
|
342
|
-
cursors)
|
|
343
|
-
install_catppuccin_cursors
|
|
344
|
-
;;
|
|
345
|
-
shell)
|
|
346
|
-
install_shell_themes
|
|
347
|
-
;;
|
|
348
|
-
wallpapers)
|
|
349
|
-
install_wallpapers
|
|
350
|
-
;;
|
|
351
|
-
refresh)
|
|
352
|
-
refresh_gtk
|
|
353
|
-
;;
|
|
354
|
-
help)
|
|
355
|
-
echo "Usage: $0 [install|gtk|icons|cursors|shell|wallpapers|refresh|help]"
|
|
356
|
-
echo ""
|
|
357
|
-
echo " install Install all Catppuccin theme components (default)"
|
|
358
|
-
echo " gtk Install only GTK themes"
|
|
359
|
-
echo " icons Install only icon themes"
|
|
360
|
-
echo " cursors Install only cursor themes"
|
|
361
|
-
echo " shell Install only GNOME Shell themes"
|
|
362
|
-
echo " wallpapers Install only wallpapers"
|
|
363
|
-
echo " refresh Refresh theme cache"
|
|
364
|
-
echo " help Show this help message"
|
|
365
|
-
;;
|
|
366
|
-
*)
|
|
367
|
-
error "Unknown option: $1"
|
|
368
|
-
echo "Use '$0 help' for usage information."
|
|
369
|
-
exit 1
|
|
370
|
-
;;
|
|
371
|
-
esac
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# SPDX-License-Identifier: MIT
|
|
3
|
-
# Copyright (c) 2015-2026 Sebastien Rousseau
|
|
4
|
-
set -euo pipefail
|
|
5
|
-
|
|
6
|
-
THEME="${DOTFILES_CURSOR_THEME:-Bibata-Modern-Ice}"
|
|
7
|
-
SIZE="${DOTFILES_CURSOR_SIZE:-24}"
|
|
8
|
-
|
|
9
|
-
case "$(uname -s)" in
|
|
10
|
-
Darwin)
|
|
11
|
-
echo "Cursor theming is not supported via script on macOS." >&2
|
|
12
|
-
exit 0
|
|
13
|
-
;;
|
|
14
|
-
Linux)
|
|
15
|
-
if command -v gsettings >/dev/null; then
|
|
16
|
-
gsettings set org.gnome.desktop.interface cursor-theme "$THEME" || true
|
|
17
|
-
gsettings set org.gnome.desktop.interface cursor-size "$SIZE" || true
|
|
18
|
-
echo "Set GNOME cursor theme to $THEME ($SIZE)."
|
|
19
|
-
else
|
|
20
|
-
echo "gsettings not found. Set cursor theme in your DE settings." >&2
|
|
21
|
-
fi
|
|
22
|
-
;;
|
|
23
|
-
*)
|
|
24
|
-
echo "Unsupported OS for cursor theming." >&2
|
|
25
|
-
;;
|
|
26
|
-
esac
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# SPDX-License-Identifier: MIT
|
|
3
|
-
# Copyright (c) 2015-2026 Sebastien Rousseau
|
|
4
|
-
set -euo pipefail
|
|
5
|
-
|
|
6
|
-
THEME="${DOTFILES_ICON_THEME:-Papirus}"
|
|
7
|
-
|
|
8
|
-
case "$(uname -s)" in
|
|
9
|
-
Darwin)
|
|
10
|
-
if command -v fileicon >/dev/null; then
|
|
11
|
-
echo "Use: fileicon set <path> <icon.icns> to apply custom icons."
|
|
12
|
-
else
|
|
13
|
-
echo "fileicon not found. Install it via brew (brew install fileicon)." >&2
|
|
14
|
-
fi
|
|
15
|
-
;;
|
|
16
|
-
Linux)
|
|
17
|
-
if command -v gsettings >/dev/null; then
|
|
18
|
-
gsettings set org.gnome.desktop.interface icon-theme "$THEME" || true
|
|
19
|
-
echo "Set GNOME icon theme to $THEME."
|
|
20
|
-
else
|
|
21
|
-
echo "gsettings not found. Set icon theme in your DE settings." >&2
|
|
22
|
-
fi
|
|
23
|
-
;;
|
|
24
|
-
*)
|
|
25
|
-
echo "Unsupported OS for icon theming." >&2
|
|
26
|
-
;;
|
|
27
|
-
esac
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# SPDX-License-Identifier: MIT
|
|
3
|
-
# Copyright (c) 2015-2026 Sebastien Rousseau
|
|
4
|
-
set -euo pipefail
|
|
5
|
-
|
|
6
|
-
# Cross-platform sed in-place (BSD vs GNU)
|
|
7
|
-
sed_in_place() {
|
|
8
|
-
if sed --version >/dev/null 2>&1; then
|
|
9
|
-
sed -i "$@" # GNU
|
|
10
|
-
else
|
|
11
|
-
sed -i '' "$@" # BSD (macOS)
|
|
12
|
-
fi
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
THEME_SRC="${DOTFILES_GRUB_THEME_DIR:-$HOME/.config/dotfiles/grub/theme}"
|
|
16
|
-
THEME_NAME="${DOTFILES_GRUB_THEME_NAME:-dotfiles}"
|
|
17
|
-
APPLY=0
|
|
18
|
-
|
|
19
|
-
for arg in "$@"; do
|
|
20
|
-
case "$arg" in
|
|
21
|
-
--apply) APPLY=1 ;;
|
|
22
|
-
esac
|
|
23
|
-
done
|
|
24
|
-
|
|
25
|
-
if [[ "$(uname -s)" != "Linux" ]]; then
|
|
26
|
-
echo "GRUB theming is Linux-only." >&2
|
|
27
|
-
exit 0
|
|
28
|
-
fi
|
|
29
|
-
|
|
30
|
-
if [[ ! -d "$THEME_SRC" ]]; then
|
|
31
|
-
echo "Theme directory not found: $THEME_SRC" >&2
|
|
32
|
-
echo "Place a GRUB theme there or set DOTFILES_GRUB_THEME_DIR." >&2
|
|
33
|
-
exit 1
|
|
34
|
-
fi
|
|
35
|
-
|
|
36
|
-
if [[ $APPLY -ne 1 ]]; then
|
|
37
|
-
echo "Dry run. Use --apply to install the theme." >&2
|
|
38
|
-
exit 0
|
|
39
|
-
fi
|
|
40
|
-
|
|
41
|
-
if [[ $EUID -ne 0 ]]; then
|
|
42
|
-
echo "Please run with sudo for GRUB theme install." >&2
|
|
43
|
-
exit 1
|
|
44
|
-
fi
|
|
45
|
-
|
|
46
|
-
THEME_DST="/boot/grub/themes/$THEME_NAME"
|
|
47
|
-
mkdir -p "$THEME_DST"
|
|
48
|
-
cp -R "$THEME_SRC/." "$THEME_DST"
|
|
49
|
-
|
|
50
|
-
if grep -q '^GRUB_THEME=' /etc/default/grub; then
|
|
51
|
-
sed_in_place "s|^GRUB_THEME=.*|GRUB_THEME=\"$THEME_DST/theme.txt\"|" /etc/default/grub
|
|
52
|
-
else
|
|
53
|
-
echo "GRUB_THEME=\"$THEME_DST/theme.txt\"" >>/etc/default/grub
|
|
54
|
-
fi
|
|
55
|
-
|
|
56
|
-
if command -v update-grub >/dev/null; then
|
|
57
|
-
update-grub
|
|
58
|
-
elif command -v grub-mkconfig >/dev/null; then
|
|
59
|
-
grub-mkconfig -o /boot/grub/grub.cfg
|
|
60
|
-
fi
|
|
61
|
-
|
|
62
|
-
echo "GRUB theme installed: $THEME_DST"
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# SPDX-License-Identifier: MIT
|
|
3
|
-
# Copyright (c) 2015-2026 Sebastien Rousseau
|
|
4
|
-
set -euo pipefail
|
|
5
|
-
|
|
6
|
-
icon_path="${DOTFILES_LOCK_ICON:-$HOME/.config/dotfiles/lock/icon.png}"
|
|
7
|
-
|
|
8
|
-
if [[ ! -f "$icon_path" ]]; then
|
|
9
|
-
echo "Lock icon not found: $icon_path" >&2
|
|
10
|
-
echo "Place a PNG at that path or set DOTFILES_LOCK_ICON." >&2
|
|
11
|
-
exit 1
|
|
12
|
-
fi
|
|
13
|
-
|
|
14
|
-
case "$(uname -s)" in
|
|
15
|
-
Darwin)
|
|
16
|
-
echo "Lock icon customization is not supported via script on macOS." >&2
|
|
17
|
-
exit 0
|
|
18
|
-
;;
|
|
19
|
-
Linux)
|
|
20
|
-
if command -v swaylock >/dev/null; then
|
|
21
|
-
echo "Use: swaylock --image '$icon_path'"
|
|
22
|
-
elif command -v i3lock >/dev/null; then
|
|
23
|
-
echo "Use: i3lock -i '$icon_path'"
|
|
24
|
-
else
|
|
25
|
-
echo "No supported lock screen tool found (swaylock/i3lock)." >&2
|
|
26
|
-
fi
|
|
27
|
-
;;
|
|
28
|
-
*)
|
|
29
|
-
echo "Unsupported OS for lock icon." >&2
|
|
30
|
-
;;
|
|
31
|
-
esac
|