Compare commits

...

246 Commits

Author SHA1 Message Date
d826cb0439 chore: remove unused log function 2025-08-28 20:31:47 +02:00
44abd5c932 chore: remove comments 2025-08-28 20:30:21 +02:00
25026672b7 roleback: open webapps with chromium instead with default browser 2025-08-28 20:25:53 +02:00
583d3f15e4 feat: improve lockscreen 2025-08-27 09:38:06 +02:00
1d1bdddb85 feat: make boot logo smaller 2025-08-27 08:36:08 +02:00
d7d82ae30c feat: add gimp and inkscape 2025-08-27 08:35:50 +02:00
97a72e9dc8 feat: improve monitor toggle 2025-08-27 07:57:57 +02:00
a64a298181 feat: update boot logo 2025-08-26 21:25:22 +02:00
19cc257a21 feat: add git cred helper 2025-08-26 21:09:58 +02:00
6fc1fb122d feat: monitors n stuff 2025-08-26 20:55:40 +02:00
3d30f7a4ca feat: add jj 2025-08-26 15:18:08 +02:00
6f7becc90a fix: autostart commands 2025-08-26 14:25:00 +02:00
4c8abc7aba feat: add autostart 2025-08-26 14:04:20 +02:00
ae97d900ac feat: add zen-browser support and netflix webapp 2025-08-26 13:51:04 +02:00
adaaf14bce feat: switch to dark 2025-08-26 13:17:09 +02:00
411ca42d29 add npm and zen 2025-08-26 12:49:27 +02:00
b27d1fa5fa feat: improve keybindings and hardcode repo url 2025-08-26 12:21:03 +02:00
b7e56a0d57 feat: add keepass and rustup 2025-08-26 11:18:57 +02:00
cca3c51031 feat: make all plugged in monitors left appended 2025-08-26 11:17:15 +02:00
105164c1e4 feat: set theme and wallpaper 2025-08-26 11:13:21 +02:00
965ceba9d2 feat: some adjustments 2025-08-26 10:54:02 +02:00
David Heinemeier Hansson
d5a340f6b7
Merge pull request #1103 from meerzulee/master
fix: typo at waybar/config.jsonc
2025-08-26 09:14:42 +02:00
Meerzulee
f0a12463a6
fixing typo at config.jsonc
Fixing `nospacing` to `spacing`. 

There is no such a config as `nospacing` in Waybar source code.
2025-08-26 10:01:24 +06:00
David Heinemeier Hansson
acc1e2f757
Merge pull request #1064 from basecamp/dev
Omarchy 2.0
2025-08-25 16:10:15 +02:00
David Heinemeier Hansson
51f877ca1f Left over styles from status indicators 2025-08-25 15:26:35 +02:00
David Heinemeier Hansson
8167633824 Left-over from the status indicators removal 2025-08-25 15:25:29 +02:00
David Heinemeier Hansson
922acfd706 Claude is only on AUR 2025-08-25 14:11:43 +02:00
David Heinemeier Hansson
b136cc5653 Remember remember 2025-08-25 14:04:49 +02:00
David Heinemeier Hansson
52d1ac215d No sudo with yay 2025-08-25 14:03:31 +02:00
David Heinemeier Hansson
838d0ca27b Dropbox elements are on AUR
Let's fix that
2025-08-25 14:02:53 +02:00
David Heinemeier Hansson
f4ea58bdd0 Doesn't work with yay 2025-08-25 13:55:01 +02:00
David Heinemeier Hansson
6c656766f8 Fix migration too 2025-08-25 13:53:33 +02:00
David Heinemeier Hansson
06e3cb4e71 Also allow yay updates without sudo 2025-08-25 13:52:53 +02:00
David Heinemeier Hansson
1506b98fe1 Fix path 2025-08-25 13:51:24 +02:00
David Heinemeier Hansson
2a8155cc68 Revert "Tweak colors"
This reverts commit 0eda27a3bc38fc50b8f710fa57824aac521a1d9c.
2025-08-25 13:49:33 +02:00
David Heinemeier Hansson
35b7f44c7e Revert "Another color tweak"
This reverts commit 4b707052526c91e2785a918de55ca5ae1c580bcd.
2025-08-25 13:49:07 +02:00
David Heinemeier Hansson
4b70705252 Another color tweak 2025-08-25 13:46:41 +02:00
David Heinemeier Hansson
0eda27a3bc Tweak colors 2025-08-25 13:44:27 +02:00
David Heinemeier Hansson
c48f370924 Allow multi select to remove webapps
Closes #1052
2025-08-25 13:33:39 +02:00
David Heinemeier Hansson
dcfbd7a2e5
Suddenly the status indicators were busted on new installations (#1061)
Don't have time to debug this now, so will have to wait until next
release
2025-08-25 13:28:54 +02:00
Luca Pattocchio
dde702a4c3
Use Omarchy as head of new block in FastFetch (#1056) 2025-08-25 13:02:23 +02:00
David Heinemeier Hansson
9e0c638b84 Flipped abort message
Co-authored-by: @nbw
Closes #1058
2025-08-25 13:00:50 +02:00
David Heinemeier Hansson
4e389007f1 Ensure time is updated before we sync this for the first time 2025-08-25 12:37:58 +02:00
David Heinemeier Hansson
258b151935 Refresh them here 2025-08-25 12:31:15 +02:00
David Heinemeier Hansson
b80e4ce908 Combine these 2025-08-25 12:26:28 +02:00
David Heinemeier Hansson
31dbf49a1f Didn't need that here 2025-08-25 12:24:51 +02:00
David Heinemeier Hansson
185807b771 Just the flakiness part now 2025-08-25 12:18:33 +02:00
David Heinemeier Hansson
d8ddc5046f Not using the service for now 2025-08-25 12:17:37 +02:00
David Heinemeier Hansson
5c6c880b0b Fix path here too 2025-08-25 12:17:03 +02:00
David Heinemeier Hansson
122bdd7837 Fix path (again!) 2025-08-25 12:16:21 +02:00
David Heinemeier Hansson
59088800ad Fix path and dependencies 2025-08-25 12:15:37 +02:00
David Heinemeier Hansson
561ffcfb56 Fix path 2025-08-25 12:13:46 +02:00
David Heinemeier Hansson
b44661a0ad Wording 2025-08-25 12:10:41 +02:00
David Heinemeier Hansson
a50041721c Just sync time together with timezone 2025-08-25 12:09:49 +02:00
David Heinemeier Hansson
88303d81fd New kernel detection is flaky, yank 2025-08-25 12:07:08 +02:00
David Heinemeier Hansson
e99bab272f Manually remove yay-bin-debug too 2025-08-25 12:05:37 +02:00
David Heinemeier Hansson
b5ced14972 In case one package doesn't want to go, do it yourself 2025-08-25 12:02:38 +02:00
David Heinemeier Hansson
e3bda8a970 Ensure time has been synced before updating so we don't get SSL errors 2025-08-25 11:58:19 +02:00
David Heinemeier Hansson
d031237b42 Sync clock before doing an update 2025-08-25 11:57:01 +02:00
David Heinemeier Hansson
0b48f08674 Replace AUR yay with OPR yay 2025-08-25 11:54:58 +02:00
David Heinemeier Hansson
63081e141a Replace buggy Zoom native app with webapp 2025-08-25 11:54:10 +02:00
David Heinemeier Hansson
249612bf67 Take it down to add the rule 2025-08-25 11:49:24 +02:00
David Heinemeier Hansson
468a84b5cc Ensure directory is there 2025-08-25 11:45:30 +02:00
David Heinemeier Hansson
42ee87ad65 Correct path 2025-08-25 11:44:41 +02:00
David Heinemeier Hansson
f2844964c4 Sync the db too 2025-08-25 11:42:14 +02:00
David Heinemeier Hansson
b38e864f08 Fix path 2025-08-25 11:41:36 +02:00
David Heinemeier Hansson
b4f6bbda4d No longer used 2025-08-25 11:40:25 +02:00
David Heinemeier Hansson
e806080c4d Start in dark mode 2025-08-25 11:28:12 +02:00
David Heinemeier Hansson
fe2dd66f91 Separate packages that need AUR and call those out 2025-08-25 11:22:27 +02:00
David Heinemeier Hansson
062c6b3dce Tweaks 2025-08-25 11:11:08 +02:00
David Heinemeier Hansson
68a51c18a8 Start splitting up the big config folder 2025-08-25 11:09:15 +02:00
David Heinemeier Hansson
5a98771e5b Will switch to Walker 1.0 before this is back 2025-08-25 11:06:02 +02:00
David Heinemeier Hansson
77863a4c12 Try again 2025-08-25 11:05:35 +02:00
David Heinemeier Hansson
5b59aee51e Reduce number of concepts 2025-08-25 11:04:28 +02:00
David Heinemeier Hansson
fdaa126aee Fix sudo access permission 2025-08-25 10:57:29 +02:00
David Heinemeier Hansson
4f0dfcc865 Fix hanging 2025-08-25 10:52:42 +02:00
David Heinemeier Hansson
2635534778 Correct autostart command 2025-08-25 10:24:42 +02:00
David Heinemeier Hansson
5bb7b66dee Bring back tte celebration at the end 2025-08-25 09:49:45 +02:00
David Heinemeier Hansson
b8f4a10056 Time of install critical here 2025-08-25 09:45:05 +02:00
David Heinemeier Hansson
86b03357d0 yay is no longer special 2025-08-25 09:43:16 +02:00
David Heinemeier Hansson
186912ca1d Last yays 2025-08-25 09:39:24 +02:00
David Heinemeier Hansson
c7d9581d7b Correct setting of server 2025-08-25 09:39:20 +02:00
David Heinemeier Hansson
03503364cc Doesn't belong here 2025-08-25 09:33:09 +02:00
David Heinemeier Hansson
44529a7a25 No yay 2025-08-25 09:33:05 +02:00
David Heinemeier Hansson
705b6858dc Order 2025-08-25 09:31:07 +02:00
David Heinemeier Hansson
b9758a9c8c Part of repository setup 2025-08-25 09:30:36 +02:00
David Heinemeier Hansson
0a0843c7ec Follow convention 2025-08-25 09:30:28 +02:00
David Heinemeier Hansson
ec0af90c98 Not needed for build 2025-08-25 09:24:56 +02:00
David Heinemeier Hansson
37f0c18b78 All packages in one place 2025-08-25 09:22:55 +02:00
David Heinemeier Hansson
1ec6ba61dc Fix paths for first-run permissions removal 2025-08-25 09:20:04 +02:00
David Heinemeier Hansson
066ec7ffff Fix file path 2025-08-25 09:11:32 +02:00
David Heinemeier Hansson
c73c1c90bf Extra all packages into a single master manifest 2025-08-25 09:04:13 +02:00
David Heinemeier Hansson
256a49ee53 Fix conditional 2025-08-25 08:47:27 +02:00
David Heinemeier Hansson
39e0cf3a37 Fix path 2025-08-25 08:38:07 +02:00
David Heinemeier Hansson
e8f932b0f6 Make sure we don't get stuck in a loop 2025-08-25 08:36:37 +02:00
David Heinemeier Hansson
55daa135a7 Allow pacman -Sy without sudo to easier installs 2025-08-25 08:34:41 +02:00
David Heinemeier Hansson
a428208077 Wrong exit code 2025-08-25 08:26:08 +02:00
David Heinemeier Hansson
2d848338e6 More restrictive sudoless setup for first-run 2025-08-25 07:49:16 +02:00
David Heinemeier Hansson
925a2906e5 Explain purposes 2025-08-25 07:43:07 +02:00
David Heinemeier Hansson
f98899e4e2 Setup real first-run install 2025-08-25 07:37:46 +02:00
David Heinemeier Hansson
e565768bed Make all the install files executable 2025-08-25 07:37:34 +02:00
David Heinemeier Hansson
661eed2640 Prepare for firewall to be setup on first run 2025-08-25 07:28:59 +02:00
David Heinemeier Hansson
28ba0bff7a Prepare for battery monitor to be installed on first run 2025-08-25 07:26:25 +02:00
David Heinemeier Hansson
bdfc0fad5d Explain purpose 2025-08-25 07:26:12 +02:00
David Heinemeier Hansson
ec17b3f012 We should always have the firewall commands available 2025-08-25 07:20:07 +02:00
David Heinemeier Hansson
9cd70e9aff No need to maintain this separately 2025-08-25 07:17:12 +02:00
David Heinemeier Hansson
51f5bed286 Tighten up 2025-08-25 07:15:49 +02:00
David Heinemeier Hansson
9a98782342 Run first so app directory is there 2025-08-25 07:15:45 +02:00
David Heinemeier Hansson
c0a091e293 Move over to where it belongs 2025-08-25 07:14:20 +02:00
David Heinemeier Hansson
d7fa8181fa Reinstall all the old AUR packages from OPR 2025-08-25 07:09:51 +02:00
David Heinemeier Hansson
dfda4f895a Rip out the last remnants of AUR 2025-08-25 07:04:43 +02:00
David Heinemeier Hansson
a67fc717c1 One fewer package we don't need to get from AUR 2025-08-24 22:36:43 +02:00
David Heinemeier Hansson
599b58f9a1 Prepare for tte's imminent return! 2025-08-24 22:24:42 +02:00
David Heinemeier Hansson
f14810e80d We will have tte back in a iffy so let's not bother with this 2025-08-24 22:23:12 +02:00
David Heinemeier Hansson
3bf51d30ff 1password has moved to the OPR 2025-08-24 22:22:11 +02:00
David Heinemeier Hansson
39dccccb1a Bare mode is dead in 2.0
Uninstall whatever you want yourself now that we have multi-tab
uninstalls
2025-08-24 22:21:25 +02:00
David Heinemeier Hansson
46f8b522f1 Can't set that this early 2025-08-24 21:53:25 +02:00
David Heinemeier Hansson
1576c4e5c6 Update Hypridle to prevent flash of unlocked screen after sleep 2025-08-24 21:14:29 +02:00
Mathias Remshardt
f39dc9a269
fix: delay supsend until screen is locked (#1041) 2025-08-24 21:13:28 +02:00
David Heinemeier Hansson
ff6802830c Correct the path 2025-08-24 21:04:52 +02:00
David Heinemeier Hansson
af9ab9069f Only remove orphans if there are any 2025-08-24 20:53:24 +02:00
David Heinemeier Hansson
3363fe0544 Just remove orphans 2025-08-24 20:50:53 +02:00
David Heinemeier Hansson
1577620344 Migrate AUR packages to new OPR or Arch official repos 2025-08-24 20:50:30 +02:00
David Heinemeier Hansson
d183daff1a Wrong flip! 2025-08-24 20:36:51 +02:00
David Heinemeier Hansson
5ed08ef5b9 Attempt to set chromium theme before first launch 2025-08-24 20:34:53 +02:00
David Heinemeier Hansson
ae8c76f582 Refresh chaotic-AUR 2025-08-24 20:24:52 +02:00
Jarek
93ef034a5c
Use Quad9 as fallback DNS for better privacy (#1046)
Replace Google DNS fallback with Quad9 (9.9.9.9, 149.112.112.112)
for better privacy consistency. Users choosing Cloudflare likely
value privacy, so Quad9 is a more appropriate fallback than Google.

As discussed in #752 and approved by @dhh in #1043.
2025-08-24 20:22:54 +02:00
David Heinemeier Hansson
fc43706190 Add chaotic aur despite getting yay from OPR 2025-08-24 20:19:26 +02:00
David Heinemeier Hansson
fc853ffe96 Combine repository setups 2025-08-24 20:10:43 +02:00
David Heinemeier Hansson
a8c3d1a2bd Right now we are just built for online installer 2025-08-24 20:10:03 +02:00
David Heinemeier Hansson
b09c625ac0 Make it green! 2025-08-24 20:09:18 +02:00
David Heinemeier Hansson
4d28721682 omarchy-chromium is now on the OPR 2025-08-24 20:05:13 +02:00
David Heinemeier Hansson
5ad441e539 Refresh indexes before taking a look at what's there 2025-08-24 20:03:37 +02:00
David Heinemeier Hansson
78e81d7534 Don't need to show anything 2025-08-24 19:39:53 +02:00
David Heinemeier Hansson
00ce49a4ac Don't use yay here 2025-08-24 19:35:36 +02:00
David Heinemeier Hansson
78719b0552 Now coming from OPR 2025-08-24 19:34:57 +02:00
David Heinemeier Hansson
8a5bca3807 No longer needed from AUR 2025-08-24 19:33:52 +02:00
David Heinemeier Hansson
78aeb91e5f Use OPR walker 2025-08-24 19:32:31 +02:00
David Heinemeier Hansson
83b67d0d6b Now we have walker-bin in OPR 2025-08-24 19:32:26 +02:00
David Heinemeier Hansson
ed9edab8ed Add OPR as early as possible 2025-08-24 19:32:19 +02:00
David Heinemeier Hansson
115e9c5af8 Add Omarchy repository first 2025-08-24 19:28:02 +02:00
David Heinemeier Hansson
00cc8315a6 Separate installing packages from AUR 2025-08-24 19:15:12 +02:00
David Heinemeier Hansson
1d915c6583 Use consistent naming scheme for backgrounds 2025-08-24 19:05:29 +02:00
David Heinemeier Hansson
dd493b0cdf Also apply light/dark via new chromium flags 2025-08-24 19:03:07 +02:00
Guilherme Nandi Tiscoski
1f4723ae33
Add more backgrounds to rose-pine (#1023)
* Add more backgrounds to rose-pine

* Reduce sizes

* Reduce sizes to be < 2mb
2025-08-24 18:58:01 +02:00
David Heinemeier Hansson
478b166ae7 Can't use tte at the moment here 2025-08-24 18:37:54 +02:00
Jarek
c0770fc7a3
Ensure network interfaces respect DNS configuration (#1043)
Implements DHH's requirement to ensure wlan0 and ethernet interfaces
respect the DNS configuration while excluding docker/loop interfaces.

When using Cloudflare or Custom DNS:
- Sets UseDNS=no in DHCPv4 sections
- Sets UseDNS=no in IPv6AcceptRA sections
- Only configures primary interfaces (en*, eth*, wl*)
- Restarts both systemd-networkd and systemd-resolved

When using DHCP:
- Removes UseDNS=no to allow DHCP provided DNS
- Restores default behavior for all interfaces

Script size increased from 58 to 89 lines to properly handle all
network interfaces as requested.
2025-08-24 18:33:32 +02:00
David Heinemeier Hansson
846b2e2595 Need walker-bin here for a moment until we self-host 2025-08-24 18:30:50 +02:00
David Heinemeier Hansson
d8a4640010 jq test failing 2025-08-24 18:11:59 +02:00
David Heinemeier Hansson
ee5f4eb925 I think these are the last spots 2025-08-24 18:08:17 +02:00
David Heinemeier Hansson
cb22afdb93 Another quarantine 2025-08-24 18:03:18 +02:00
David Heinemeier Hansson
d2bd1b47b6 This doesn't need yay 2025-08-24 18:02:09 +02:00
David Heinemeier Hansson
02134df8ee Quarantine AUR installs 2025-08-24 18:01:39 +02:00
David Heinemeier Hansson
cd39a145e8 More pacman 2025-08-24 18:00:28 +02:00
David Heinemeier Hansson
a0c3a435fc Protect from AUR outage 2025-08-24 18:00:23 +02:00
David Heinemeier Hansson
f0a77e65cd More pacman swaps 2025-08-24 17:53:42 +02:00
David Heinemeier Hansson
4de9f5fda3 Extra resilience for on-demand installation 2025-08-24 17:53:33 +02:00
David Heinemeier Hansson
1efe4a819f More pacman 2025-08-24 17:49:31 +02:00
David Heinemeier Hansson
a29237e070 More resilience here too 2025-08-24 17:49:26 +02:00
David Heinemeier Hansson
9834a40796 Fix bad replace 2025-08-24 17:46:48 +02:00
David Heinemeier Hansson
edf0bb3128 Give it a few tries 2025-08-24 17:46:01 +02:00
David Heinemeier Hansson
960cbbd591 We have those from the pacman runner 2025-08-24 17:44:01 +02:00
David Heinemeier Hansson
c974c3dbc4 Language 2025-08-24 17:42:41 +02:00
David Heinemeier Hansson
f1af28f10d Simplify guard against an unavailable AUR 2025-08-24 17:41:41 +02:00
David Heinemeier Hansson
673cea1644 Also on removes 2025-08-24 17:36:02 +02:00
David Heinemeier Hansson
9d739faf2b Switch to pacman to make it clear when we are not depending on AUR 2025-08-24 17:35:24 +02:00
David Heinemeier Hansson
69afedf380 Separate out AUR installs with yay 2025-08-24 17:28:22 +02:00
David Heinemeier Hansson
57e14afca3 No yay 2025-08-24 17:28:12 +02:00
David Heinemeier Hansson
38d9961622 Install AUR packages if its available 2025-08-24 17:25:45 +02:00
David Heinemeier Hansson
57b1180c67 Remove orphan system packages after omarchy-update
Co-authored-by: @abenz1267
2025-08-24 17:22:45 +02:00
David Heinemeier Hansson
664fb7c51a Separate pacman setup from aur and make aur optional 2025-08-24 17:20:13 +02:00
David Heinemeier Hansson
09a90e3cf2 Keep AUR separate 2025-08-24 17:15:37 +02:00
David Heinemeier Hansson
6dd95e71bf No AUR stuff allowed in xtras 2025-08-24 17:15:29 +02:00
David Heinemeier Hansson
22769caa8c Will install chromium by default and then bring our fork in through other means 2025-08-24 17:15:14 +02:00
David Heinemeier Hansson
448be1317f Move tte to AUR quarantine install 2025-08-24 17:15:00 +02:00
David Heinemeier Hansson
7bd1d56399 Remove AUR font 2025-08-24 17:14:13 +02:00
David Heinemeier Hansson
b094557a97 Poor man's screensaver without tte 2025-08-24 17:13:55 +02:00
David Heinemeier Hansson
3f895969c7 Allow screensaver to display logo if tte is not there 2025-08-24 17:07:28 +02:00
David Heinemeier Hansson
da7222f510 Move it inside where it is used 2025-08-24 16:57:41 +02:00
David Heinemeier Hansson
9d355091b5 No AUR dependency for wl-screenrec 2025-08-24 16:52:21 +02:00
David Heinemeier Hansson
a391b64e61 Install wl-screenrec as a just-in-time dependence 2025-08-24 16:51:20 +02:00
David Heinemeier Hansson
028c07d016 Install tzupdate on demand 2025-08-24 16:36:10 +02:00
David Heinemeier Hansson
4fd6a110ea Use non-AUR versions 2025-08-24 16:35:59 +02:00
David Heinemeier Hansson
92a491fd47 Need to install jq for the pkg-repos-accessible to work 2025-08-24 16:00:22 +02:00
Andreas Nigg
8b192c30e1
Fix installation command for ufw-docker (#1035) 2025-08-24 15:58:02 +02:00
David Heinemeier Hansson
6826cad95b Simplify it 2025-08-24 15:55:18 +02:00
David Heinemeier Hansson
1e46882fd8 Fix repo accessible check 2025-08-24 15:53:54 +02:00
Ryan Hughes
b0acd0b5e8 Update efibootmgr regex to match nvme + sata + vdisk 2025-08-24 15:50:50 +02:00
David Heinemeier Hansson
24682aea8c Add progressive backoffs to the repo retrying 2025-08-24 14:02:43 +02:00
Ryan Hughes
bb43d719e6
Fix fido2 and fprint auth flow (#635)
* Restructure fido2 / fprint to add to sudo and polkit

* Add migration

* Fix migration
2025-08-24 13:41:11 +02:00
Jarek
c4b32c047a
Add omarchy-setup-cloudflare-dns script (#752)
* Add omarchy-setup-cloudflare-dns script

Addresses issue #745 by providing user choice for DNS configuration.

Features:
- Makes Cloudflare DNS opt-in instead of forced default
- Preserves local development environments with DHCP option
- Includes custom DNS configuration support
- Provides backup/restore functionality
- Follows Omarchy naming conventions

Fixes #745

* Address DHH feedback on DNS configuration script

Changes based on maintainer review:
- Rename script to omarchy-setup-dns (more generic name)
- Remove /usr/local/bin installation (use PATH instead)
- Add migration to reset automatic Cloudflare DNS to DHCP
- Force DNS on physical interfaces only using systemd-networkd
- Exclude docker/virtual interfaces from forced DNS

Fixes local development environment issues while making Cloudflare DNS opt-in.

* Use timestamped backups and remove restore function

Follow Omarchy backup standards by using timestamped backup files
instead of fixed names. Remove restore function since backups now
have unpredictable names - users can manually restore if needed.

This matches the pattern used in omarchy-refresh-config.

* Add DNS over TLS support for enhanced security

Enable opportunistic DNS over TLS when using Cloudflare DNS. This
encrypts DNS queries when possible while falling back to regular DNS
if TLS isn't available, providing security without breaking compatibility.

Thanks to the suggestion in #696 for highlighting this improvement.

* Add certificate validation for DNS over TLS

The DNS servers now include their proper hostnames for certificate
validation (cloudflare-dns.com and dns.google). This ensures we're
actually talking to the real DNS servers when using encrypted DNS,
not some imposter.

Completes the implementation suggested in #696.

* Prevent backup file accumulation

Clean up old backup files before creating new ones to prevent the
accumulation of .bak.* files over time. Keeps only the most recent
backup while maintaining the timestamped naming pattern.

This ensures the system doesn't get cluttered with countless backup
files from repeated script runs.

* Simplify DNS setup script per review feedback

Reduced script complexity from 227 to 58 lines while maintaining core functionality.
Removed unnecessary backup system and systemd-networkd configuration.
Kept essential features: Cloudflare DNS with TLS, DHCP mode, and custom DNS option.
Script now follows established Omarchy conventions for simplicity and size.

* Allow setup from omarchy-menu

* Integrate into Omarchy Menu

* Align parameter

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-08-24 13:34:04 +02:00
David Heinemeier Hansson
f4ef8eca65 If it's going to be a while 2025-08-24 13:02:48 +02:00
Manuel
1d6d21e7b7
Changed Keybindings for resize active window to code syntax (#1029) 2025-08-24 12:52:24 +02:00
David Heinemeier Hansson
04fff555b8 Fixup the firewall install 2025-08-24 12:41:13 +02:00
David Heinemeier Hansson
aa32b147ad Ensure package repositories are available before installing or doing updates 2025-08-24 12:10:07 +02:00
David Heinemeier Hansson
6b3b93ded1 Add both arch mirror and AUR guard 2025-08-24 12:00:26 +02:00
David Heinemeier Hansson
9dbef029f6 Stronger AUR available guard 2025-08-24 11:57:23 +02:00
David Heinemeier Hansson
aaefc4f208 Add an availability shield for AUR 2025-08-24 11:54:19 +02:00
David Heinemeier Hansson
ccf13e5902 Don't need this update 2025-08-24 11:49:49 +02:00
David Heinemeier Hansson
9ed755b445 This will have to wait 2025-08-24 11:23:44 +02:00
David Heinemeier Hansson
42432ae462 Ensure we always unblock wifi/bluetooth when going to setup 2025-08-24 11:13:49 +02:00
David Heinemeier Hansson
438156e36f More protections 2025-08-24 11:10:06 +02:00
David Heinemeier Hansson
574d213c34 Ensure better trap behavior 2025-08-24 11:05:11 +02:00
David Heinemeier Hansson
7d61c19f69 Remove output for existing setups 2025-08-24 11:03:43 +02:00
David Heinemeier Hansson
69fe4ae997
Remove screen recording status until it is stable (#1032) 2025-08-24 11:00:30 +02:00
Richard Macklin
c3af4b9469
Default OMARCHY_REF to master in boot.sh (#1030)
This will allow us to change GitHub's default branch to `dev`, so that
PRs will target the correct branch by default, but new installations
will still default to using the stable `master` branch.
2025-08-24 10:40:47 +02:00
David Heinemeier Hansson
ffe8997fad Pinta install seems to work fine now 2025-08-24 09:31:42 +02:00
David Heinemeier Hansson
e2611d9bc4 Rearrange options 2025-08-24 09:28:08 +02:00
David Heinemeier Hansson
266767df5f Show dust disk usage in reverse 2025-08-24 09:26:06 +02:00
David Heinemeier Hansson
eb4172a486 We now have audio settings in the setup menu 2025-08-24 09:24:00 +02:00
David Heinemeier Hansson
ca115b9061 Can't install firewall in chroot, so move it into its own service for now 2025-08-24 09:12:51 +02:00
David Heinemeier Hansson
ab09446971 Can't use chroot trap 2025-08-24 09:06:24 +02:00
David Heinemeier Hansson
af0f459a1a Try skipping this efibootmgr munging for a second 2025-08-24 08:46:34 +02:00
David Heinemeier Hansson
fbf9a19574 Show installation env for debugging 2025-08-24 07:40:16 +02:00
David Heinemeier Hansson
95139164a3 Skip all of powerprofilectl setup during CHROOT 2025-08-24 07:26:24 +02:00
David Heinemeier Hansson
2ae973108d Extract error trapping to its own file 2025-08-24 07:21:49 +02:00
David Heinemeier Hansson
aa0b44b7f4 Missing shebang 2025-08-24 07:20:45 +02:00
David Heinemeier Hansson
d9424b2bff Document what's missing 2025-08-24 07:09:45 +02:00
David Heinemeier Hansson
36a30dd01d Skip the battery monitor during chroot install for now 2025-08-24 07:09:08 +02:00
Ryan Hughes
82467892a3
Merge pull request #1020 from ryanrhughes/limine-fixes
Minor Limine / Snapper Tweaks and Fixes
2025-08-24 01:09:02 +02:00
Ryan Hughes
e138f7e8eb Set config files first 2025-08-24 00:18:10 +02:00
Ryan Hughes
0a75644f2d Less aggressive check 2025-08-24 00:01:36 +02:00
Ryan Hughes
3725f2d3b6 Everyone can have UKI 2025-08-24 00:01:23 +02:00
Ryan Hughes
0ebd62a32e Define boot path 2025-08-23 23:25:33 +02:00
Taha
31d97335fc
Add Omarchy icon to waybar (#1017)
* Add Omarchy icon to waybar

* Add step to fonts.sh to install omarchy icon font

* Style and fixup

* Fixup installation of the omarchy font

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-08-23 23:22:50 +02:00
David Heinemeier Hansson
41a1fe6b21 Switch Zoom from shitty native app to better webapp
Have to compromise on 1080p but seems better than dealing with that
trash app.
2025-08-23 23:03:54 +02:00
David Heinemeier Hansson
91e686f1b2 Can't have nice things during arch-chroot for some reason! 2025-08-23 22:57:47 +02:00
David Heinemeier Hansson
75ac6910d4 Add back fastfetch which we lost when removing logging 2025-08-23 22:40:36 +02:00
David Heinemeier Hansson
b4b8788c14 Use something safe in the arch-chroot 2025-08-23 22:36:38 +02:00
David Heinemeier Hansson
76c94e2604 Breakup the omnibus config install 2025-08-23 22:31:42 +02:00
David Heinemeier Hansson
e59a98fb0b Don't fail if there 2025-08-23 22:21:56 +02:00
David Heinemeier Hansson
dee7e3e4a7 Ensure .config is there
Strange that this should be necessary for arch-chroot, but let's give it
a try
2025-08-23 22:21:28 +02:00
David Heinemeier Hansson
5a7b9292c8 Shorter 2025-08-23 21:41:15 +02:00
David Heinemeier Hansson
31ce6f689e Merge branch 'master' into dev 2025-08-23 21:29:49 +02:00
David Heinemeier Hansson
210481d758 Style 2025-08-23 21:21:00 +02:00
David Heinemeier Hansson
3bac37b21b Use the same state directory for status as everthing else 2025-08-23 21:21:00 +02:00
Ryan Hughes
1edbe89191
Merge pull request #1012 from ryanrhughes/limine-bios-support
Add Limine support for BIOS environments
2025-08-23 20:32:02 +02:00
Ryan Hughes
617e96234b
Merge pull request #1010 from ryanrhughes/update-omarchy-snapshot
Make omarchy-snapshot exit if you don't have Snapper but continue update
2025-08-23 20:31:51 +02:00
Ryan Hughes
5873980703 Add efi checks 2025-08-23 20:25:46 +02:00
Ryan Hughes
b8cc8d8bc3 Move update up in case something goes wrong 2025-08-23 20:25:04 +02:00
David Heinemeier Hansson
455fe890ec Just rely on the ISO autostart to set it instead of detecting it 2025-08-23 20:23:08 +02:00
David Heinemeier Hansson
ccc8aa87d0 Improve presentation of failed command 2025-08-23 19:42:31 +02:00
Ryan Hughes
193797393f Exit if you don't have snapper but continue update 2025-08-23 19:16:47 +02:00
David Heinemeier Hansson
7056a3903a No longer need gum or tte as preflights
No more identification up front, no toast during initial install
2025-08-23 19:04:20 +02:00
David Heinemeier Hansson
3880c49469
Logging is having issues, so let's skip until sorted (#1009) 2025-08-23 18:50:32 +02:00
Shawn Yeager
cc80782160
Add two new background images to theme catppuccin (#1008)
* add two new backgrounds with background color #181824

* replace 3rd background image
2025-08-23 16:50:49 +02:00
177 changed files with 1208 additions and 918 deletions

View File

@ -1,7 +0,0 @@
[Desktop Entry]
Name=Audio Settings
Comment=Using Wiremix
Exec=alacritty --class=Wiremix --title=Wiremix -e wiremix
Icon=audio-headphones
Type=Application
Terminal=false

View File

@ -1,12 +0,0 @@
[Desktop Entry]
Name=Zoom
Comment=Zoom Video Conference
Exec=env QT_SCALE_FACTOR=2 /usr/bin/zoom %U
Icon=Zoom
Terminal=false
Type=Application
Encoding=UTF-8
Categories=Network;Application;
StartupWMClass=zoom
MimeType=x-scheme-handler/zoommtg;x-scheme-handler/zoomus;x-scheme-handler/tel;x-scheme-handler/callto;x-scheme-handler/zoomphonecall;x-scheme-handler/zoomphonesms;x-scheme-handler/zoomcontactcentercall;application/x-zoom
X-KDE-Protocols=zoommtg;zoomus;tel;callto;zoomphonecall;zoomphonesms;zoomcontactcentercall;

View File

@ -0,0 +1,30 @@
#!/usr/bin/env bash
set -u
# internal monitor name - change if yours differs
INT="eDP-1"
output=$(hyprctl monitors 2>/dev/null) || {
echo "Error: hyprctl not found or command failed" >&2
exit 1
}
mapfile -t monitors < <(
grep -oP '(?<=^Monitor ).*?(?= \(ID )' <<<"$output"
)
len=${#monitors[@]}
if (( len == 2 )); then
hyprctl keyword monitor $INT, disable 2>/dev/null
hyprctl keyword workspace r[0-9] m[${monitors[1]}]
elif (( len == 3 )); then
hyprctl keyword monitor $INT, disable 2>/dev/null
hyprctl keyword workspace r[1-5] m[${monitors[1]}]
hyprctl keyword workspace r[6-9] m[${monitors[2]}]
hyprctl keyword workspace r[0] m[${monitors[2]}]
else
hyprctl keyword monitor $INT, preferred,auto,1.5 2>/dev/null
hyprctl reload 2>/dev/null
fi

12
bin/omarchy-cmd-first-run Executable file
View File

@ -0,0 +1,12 @@
#!/bin/bash
set -e
FIRST_RUN_MODE=~/.local/state/omarchy/first-run.mode
if [[ -f "$FIRST_RUN_MODE" ]]; then
rm -f "$FIRST_RUN_MODE"
$OMARCHY_PATH/install/first-run/battery-monitor.sh
$OMARCHY_PATH/install/first-run/firewall.sh
sudo rm -f /etc/sudoers.d/first-run
fi

View File

@ -1,20 +1,16 @@
#!/bin/bash #!/bin/bash
if command -v tte &>/dev/null; then 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 $(($(tput lines) - 2)) --anchor-canvas c --anchor-text c \ "$effect" &
"$effect" &
while pgrep -x tte >/dev/null; do while pgrep -x tte >/dev/null; do
if read -n 1 -t 0.01; then if read -n 1 -t 0.01; then
pkill -x tte 2>/dev/null pkill -x tte 2>/dev/null
pkill -f "alacritty --class Screensaver" 2>/dev/null pkill -f "alacritty --class Screensaver" 2>/dev/null
exit 0 exit 0
fi fi
done
done done
else done
gum spin --title "Can't find tte. Try: pip install terminaltexteffects" -- sleep 2
fi

View File

@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
sudo systemctl restart systemd-timesyncd
sudo tzupdate sudo tzupdate
new_timezone=$(timedatectl show -p Timezone --value) new_timezone=$(timedatectl show -p Timezone --value)
omarchy-restart-waybar omarchy-restart-waybar
notify-send "Timezone has been set to $new_timezone" notify-send "Time synced and timezone set to $new_timezone"

View File

@ -1,5 +0,0 @@
#!/bin/bash
if ! curl -s --connect-timeout 10 --head -A "omarchy-update" -o /dev/null "https://aur.archlinux.org/"; then
gum spin --spinner "globe" --title "The AUR package repository is currently unavailable, please try again later" -- sleep 2 && exit 1
fi

View File

@ -6,7 +6,7 @@ if [[ -z "$1" ]]; then
fi fi
install_php() { install_php() {
yay -Sy php composer php-sqlite --noconfirm sudo pacman -Sy php composer php-sqlite --noconfirm
# Install Path for Composer # Install Path for Composer
if [[ ":$PATH:" != *":$HOME/.config/composer/vendor/bin:"* ]]; then if [[ ":$PATH:" != *":$HOME/.config/composer/vendor/bin:"* ]]; then

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
options=("MariaDB" "MySQL" "Redis" "PostgreSQL" "MongoDB") options=("MySQL" "PostgreSQL" "Redis" "MongoDB" "MariaDB")
choices=$(printf "%s\n" "${options[@]}" | gum choose --no-limit --header "Select databases (space to select, return to install, esc to cancel)") || main_menu choices=$(printf "%s\n" "${options[@]}" | gum choose --no-limit --header "Select databases (space to select, return to install, esc to cancel)") || main_menu
if [[ -n "$choices" ]]; then if [[ -n "$choices" ]]; then

View File

@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
echo "Installing all dependencies..." # FIXME: Should not use AUR dependencies when we can avoid it
echo "Installing all dependencies [from AUR]..."
yay -S --noconfirm --needed \ yay -S --noconfirm --needed \
dropbox dropbox-cli libappindicator-gtk3 python-gpgme nautilus-dropbox dropbox dropbox-cli libappindicator-gtk3 python-gpgme nautilus-dropbox

View File

@ -5,5 +5,5 @@ sudo sed -i '/^\s*#\[multilib\]/,/^$/{s/^\s*#//}' /etc/pacman.conf
sudo pacman -Sy sudo pacman -Sy
echo "Now pick dependencies matching your graphics card" echo "Now pick dependencies matching your graphics card"
yay -S steam sudo pacman -S steam
setsid gtk-launch steam >/dev/null 2>&1 & setsid gtk-launch steam >/dev/null 2>&1 &

View File

@ -1,5 +1,10 @@
#!/bin/bash #!/bin/bash
# Exit early if we don't have the tte show
if ! command -v tte &>/dev/null; then
exit 1
fi
# Exit early if screensave is already running # Exit early if screensave is already running
pgrep -f "alacritty --class Screensaver" && exit 0 pgrep -f "alacritty --class Screensaver" && exit 0

View File

@ -35,15 +35,23 @@ edit_in_nvim() {
} }
install() { install() {
present_terminal "echo 'Installing $1...'; yay -Sy --noconfirm $2" present_terminal "echo 'Installing $1...'; sudo pacman -Sy --noconfirm $2"
} }
install_and_launch() { install_and_launch() {
present_terminal "echo 'Installing $1...'; yay -Sy --noconfirm $2 && setsid gtk-launch $3" present_terminal "echo 'Installing $1...'; sudo pacman -Sy --noconfirm $2 && setsid gtk-launch $3"
} }
install_font() { install_font() {
present_terminal "echo 'Installing $1...'; yay -Sy --noconfirm --needed $2 && sleep 2 && omarchy-font-set '$3'" present_terminal "echo 'Installing $1...'; sudo pacman -Sy --noconfirm --needed $2 && sleep 2 && omarchy-font-set '$3'"
}
aur_install() {
present_terminal "echo 'Installing $1 from AUR...'; yay -Sy --noconfirm $2"
}
aur_install_and_launch() {
present_terminal "echo 'Installing $1 from AUR...'; yay -Sy --noconfirm $2 && setsid gtk-launch $3"
} }
show_learn_menu() { show_learn_menu() {
@ -127,16 +135,23 @@ show_setup_menu() {
local options=" Audio\n Wifi\n󰂯 Bluetooth\n󱐋 Power Profile\n󰍹 Monitors" local options=" Audio\n Wifi\n󰂯 Bluetooth\n󱐋 Power Profile\n󰍹 Monitors"
[ -f ~/.config/hypr/bindings.conf ] && options="$options\n Keybindings" [ -f ~/.config/hypr/bindings.conf ] && options="$options\n Keybindings"
[ -f ~/.config/hypr/input.conf ] && options="$options\n Input" [ -f ~/.config/hypr/input.conf ] && options="$options\n Input"
options="$options\n Config\n󰈷 Fingerprint\n Fido2" options="$options\n󰱔 DNS\n Config\n󰈷 Fingerprint\n Fido2"
case $(menu "Setup" "$options") in case $(menu "Setup" "$options") in
*Audio*) alacritty --class=Wiremix -e wiremix ;; *Audio*) alacritty --class=Wiremix -e wiremix ;;
*Wifi*) alacritty --class=Impala -e bash -c "rfkill unblock wifi; impala" ;; *Wifi*)
*Bluetooth*) blueberry ;; rfkill unblock wifi
alacritty --class=Impala -e impala
;;
*Bluetooth*)
rfkill unblock bluetooth
blueberry
;;
*Power*) show_setup_power_menu ;; *Power*) show_setup_power_menu ;;
*Monitors*) edit_in_nvim ~/.config/hypr/monitors.conf ;; *Monitors*) edit_in_nvim ~/.config/hypr/monitors.conf ;;
*Keybindings*) edit_in_nvim ~/.config/hypr/bindings.conf ;; *Keybindings*) edit_in_nvim ~/.config/hypr/bindings.conf ;;
*Input*) edit_in_nvim ~/.config/hypr/input.conf ;; *Input*) edit_in_nvim ~/.config/hypr/input.conf ;;
*DNS*) present_terminal omarchy-setup-dns ;;
*Config*) show_setup_config_menu ;; *Config*) show_setup_config_menu ;;
*Fingerprint*) present_terminal omarchy-setup-fingerprint ;; *Fingerprint*) present_terminal omarchy-setup-fingerprint ;;
*Fido2*) present_terminal omarchy-setup-fido2 ;; *Fido2*) present_terminal omarchy-setup-fido2 ;;
@ -169,8 +184,9 @@ show_setup_config_menu() {
} }
show_install_menu() { show_install_menu() {
case $(menu "Install" "󰣇 Package\n Web App\n TUI\n Service\n Style\n󰵮 Development\n Editor\n󱚤 AI\n Gaming") in case $(menu "Install" "󰣇 Package\n󰣇 AUR\n Web App\n TUI\n Service\n Style\n󰵮 Development\n Editor\n󱚤 AI\n Gaming") in
*Package*) terminal omarchy-pkg-install ;; *Package*) terminal omarchy-pkg-install ;;
*AUR*) terminal omarchy-pkg-aur-install ;;
*Web*) present_terminal omarchy-webapp-install ;; *Web*) present_terminal omarchy-webapp-install ;;
*TUI*) present_terminal omarchy-tui-install ;; *TUI*) present_terminal omarchy-tui-install ;;
*Service*) show_install_service_menu ;; *Service*) show_install_service_menu ;;
@ -192,9 +208,9 @@ show_install_service_menu() {
} }
show_install_editor_menu() { show_install_editor_menu() {
case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix") in case $(menu "Install" " VSCode\n Cursor [AUR]\n Zed\n Sublime Text\n Helix") in
*VSCode*) install_and_launch "VSCode" "visual-studio-code-bin" "code" ;; *VSCode*) install_and_launch "VSCode" "visual-studio-code-bin" "code" ;;
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;; *Cursor*) aur_install_and_launch "Cursor" "cursor-bin" "cursor" ;;
*Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;; *Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;;
*Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;; *Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
*Helix*) install "Helix" "helix" ;; *Helix*) install "Helix" "helix" ;;
@ -203,21 +219,21 @@ show_install_editor_menu() {
} }
show_install_ai_menu() { show_install_ai_menu() {
case $(menu "Install" "󱚤 Claude Code\n󱚤 Gemini\n󱚤 LM Studio\n󱚤 Ollama\n󱚤 Crush\n󱚤 opencode") in case $(menu "Install" "󱚤 Claude Code [AUR]\n󱚤 Gemini\n󱚤 LM Studio [AUR]\n󱚤 Ollama\n󱚤 Crush [AUR]\n󱚤 opencode [AUR]") in
*Claude*) install "Claude Code" "claude-code" ;; *Claude*) aur_install "Claude Code" "claude-code" ;;
*Gemini*) install "Gemini" "gemini-cli-bin" ;; *Gemini*) install "Gemini" "gemini-cli" ;;
*Studio*) install "LM Studio" "lmstudio" ;; *Studio*) aur_install "LM Studio" "lmstudio" ;;
*Ollama*) install "Ollama" "ollama" ;; *Ollama*) install "Ollama" "ollama" ;;
*Crush*) install "Crush" "crush-bin" ;; *Crush*) aur_install "Crush" "crush-bin" ;;
*opencode*) install "opencode" "opencode-bin" ;; *opencode*) aur_install "opencode" "opencode-bin" ;;
*) show_install_menu ;; *) show_install_menu ;;
esac esac
} }
show_install_gaming_menu() { show_install_gaming_menu() {
case $(menu "Install" " Steam\n RetroArch\n󰍳 Minecraft") in case $(menu "Install" " Steam\n RetroArch [AUR]\n󰍳 Minecraft") in
*Steam*) present_terminal omarchy-install-steam ;; *Steam*) present_terminal omarchy-install-steam ;;
*RetroArch*) install_and_launch "RetroArch" "retroarch retroarch-assets libretro libretro-fbneo" "com.libretro.RetroArch.desktop" ;; *RetroArch*) aur_install_and_launch "RetroArch" "retroarch retroarch-assets libretro libretro-fbneo" "com.libretro.RetroArch.desktop" ;;
*Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;; *Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;;
*) show_install_menu ;; *) show_install_menu ;;
esac esac

4
bin/omarchy-pkg-aur-accessible Executable file
View File

@ -0,0 +1,4 @@
#!/bin/bash
curl -sf --connect-timeout 30 --retry 3 --retry-delay 3 -A "omarchy-update" \
"https://aur.archlinux.org/rpc/?v=5&type=info&arg=base" >/dev/null

24
bin/omarchy-pkg-aur-install Executable file
View File

@ -0,0 +1,24 @@
#!/bin/bash
set -e
fzf_args=(
--multi
--preview 'yay -Sii {1}'
--preview-label='alt-p: toggle description, alt-j/k: scroll, tab: multi-select, F11: maximize'
--preview-label-pos='bottom'
--preview-window 'down:65%:wrap'
--bind 'alt-p:toggle-preview'
--bind 'alt-d:preview-half-page-down,alt-u:preview-half-page-up'
--bind 'alt-k:preview-up,alt-j:preview-down'
--color 'pointer:green,marker:green'
)
pkg_names=$(yay -Slqa | fzf "${fzf_args[@]}")
if [[ -n "$pkg_names" ]]; then
# Convert newline-separated selections to space-separated for yay
echo "$pkg_names" | tr '\n' ' ' | xargs yay -Sy --noconfirm
sudo updatedb
omarchy-show-done
fi

View File

@ -4,7 +4,7 @@ set -e
fzf_args=( fzf_args=(
--multi --multi
--preview 'yay -Sii {1}' --preview 'pacman -Sii {1}'
--preview-label='alt-p: toggle description, alt-j/k: scroll, tab: multi-select, F11: maximize' --preview-label='alt-p: toggle description, alt-j/k: scroll, tab: multi-select, F11: maximize'
--preview-label-pos='bottom' --preview-label-pos='bottom'
--preview-window 'down:65%:wrap' --preview-window 'down:65%:wrap'
@ -14,11 +14,12 @@ fzf_args=(
--color 'pointer:green,marker:green' --color 'pointer:green,marker:green'
) )
pkg_names=$(yay -Slq | fzf "${fzf_args[@]}") sudo pacman -Sy
pkg_names=$(pacman -Slq | fzf "${fzf_args[@]}")
if [[ -n "$pkg_names" ]]; then if [[ -n "$pkg_names" ]]; then
# Convert newline-separated selections to space-separated for yay # Convert newline-separated selections to space-separated for yay
echo "$pkg_names" | tr '\n' ' ' | xargs yay -Sy --noconfirm echo "$pkg_names" | tr '\n' ' ' | xargs sudo pacman -Sy --noconfirm
sudo updatedb sudo updatedb
omarchy-show-done omarchy-show-done
fi fi

View File

@ -16,7 +16,7 @@ pkg_names=$(yay -Qqe | fzf "${fzf_args[@]}")
if [[ -n "$pkg_names" ]]; then if [[ -n "$pkg_names" ]]; then
# Convert newline-separated selections to space-separated for yay # Convert newline-separated selections to space-separated for yay
echo "$pkg_names" | tr '\n' ' ' | xargs yay -Rns --noconfirm echo "$pkg_names" | tr '\n' ' ' | xargs sudo pacman -Rns --noconfirm
sudo updatedb sudo updatedb
omarchy-show-done omarchy-show-done
fi fi

View File

@ -10,9 +10,4 @@ mkdir -p ~/.local/share/applications
cp ~/.local/share/omarchy/applications/*.desktop ~/.local/share/applications/ cp ~/.local/share/omarchy/applications/*.desktop ~/.local/share/applications/
cp ~/.local/share/omarchy/applications/hidden/*.desktop ~/.local/share/applications/ cp ~/.local/share/omarchy/applications/hidden/*.desktop ~/.local/share/applications/
# Only copy xtras if user is not in bare mode
if [[ ! -f ~/.local/state/omarchy/bare.mode ]] && [ -z "$OMARCHY_BARE" ]; then
cp ~/.local/share/omarchy/applications/xtras/*.desktop ~/.local/share/applications/
fi
update-desktop-database ~/.local/share/applications update-desktop-database ~/.local/share/applications

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
if [[ "$1" == "-y" ]] || gum confirm "Refresh Plymouth theme? This will replace your current startup screen with Omarchy defaults."; then if [[ "$1" == "-y" ]]; then
sudo cp ~/.local/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 -R omarchy sudo plymouth-set-default-theme -R omarchy
fi fi

89
bin/omarchy-setup-dns Executable file
View File

@ -0,0 +1,89 @@
#!/bin/bash
if [[ -z $1 ]]; then
dns=$(gum choose --height 5 --header "Select DNS provider" Cloudflare DHCP Custom)
else
dns=$1
fi
case "$dns" in
Cloudflare)
sudo tee /etc/systemd/resolved.conf >/dev/null <<'EOF'
[Resolve]
DNS=1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com
FallbackDNS=9.9.9.9 149.112.112.112
DNSOverTLS=opportunistic
EOF
# Ensure network interfaces don't override our DNS settings
for file in /etc/systemd/network/*.network; do
[[ -f "$file" ]] || continue
if ! grep -q "^\[DHCPv4\]" "$file"; then continue; fi
# Add UseDNS=no to DHCPv4 section if not present
if ! sed -n '/^\[DHCPv4\]/,/^\[/p' "$file" | grep -q "^UseDNS="; then
sudo sed -i '/^\[DHCPv4\]/a UseDNS=no' "$file"
fi
# Add UseDNS=no to IPv6AcceptRA section if present
if grep -q "^\[IPv6AcceptRA\]" "$file" && ! sed -n '/^\[IPv6AcceptRA\]/,/^\[/p' "$file" | grep -q "^UseDNS="; then
sudo sed -i '/^\[IPv6AcceptRA\]/a UseDNS=no' "$file"
fi
done
sudo systemctl restart systemd-networkd systemd-resolved
;;
DHCP)
sudo tee /etc/systemd/resolved.conf >/dev/null <<'EOF'
[Resolve]
DNS=
FallbackDNS=
DNSOverTLS=no
EOF
# Allow network interfaces to use DHCP DNS
for file in /etc/systemd/network/*.network; do
[[ -f "$file" ]] || continue
sudo sed -i '/^UseDNS=no/d' "$file"
done
sudo systemctl restart systemd-networkd systemd-resolved
;;
Custom)
echo "Enter your DNS servers (space-separated, e.g. '192.168.1.1 1.1.1.1'):"
read -r dns_servers
if [[ -z "$dns_servers" ]]; then
echo "Error: No DNS servers provided."
exit 1
fi
sudo tee /etc/systemd/resolved.conf >/dev/null <<EOF
[Resolve]
DNS=$dns_servers
FallbackDNS=9.9.9.9 149.112.112.112
EOF
# Ensure network interfaces don't override our DNS settings
for file in /etc/systemd/network/*.network; do
[[ -f "$file" ]] || continue
if ! grep -q "^\[DHCPv4\]" "$file"; then continue; fi
# Add UseDNS=no to DHCPv4 section if not present
if ! sed -n '/^\[DHCPv4\]/,/^\[/p' "$file" | grep -q "^UseDNS="; then
sudo sed -i '/^\[DHCPv4\]/a UseDNS=no' "$file"
fi
# Add UseDNS=no to IPv6AcceptRA section if present
if grep -q "^\[IPv6AcceptRA\]" "$file" && ! sed -n '/^\[IPv6AcceptRA\]/,/^\[/p' "$file" | grep -q "^UseDNS="; then
sudo sed -i '/^\[IPv6AcceptRA\]/a UseDNS=no' "$file"
fi
done
sudo systemctl restart systemd-networkd systemd-resolved
;;
esac

View File

@ -1,39 +1,127 @@
#!/bin/bash #!/bin/bash
if [[ "--remove" == "$1" ]]; then set -e
echo -e "\e[32mLet's remove your Fido2 device from sudo authentication.\n\e[0m"
yay -Rns --noconfirm libfido2 pam-u2f
sudo rm -rf /etc/fido2
sudo sed -i '\|^auth[[:space:]]\+sufficient[[:space:]]\+pam_u2f\.so[[:space:]]\+cue[[:space:]]\+authfile=/etc/fido2/fido2$|d' /etc/pam.d/sudo
echo -e "\e[32m\nYou've successfully removed the fido2 device setup.\e[0m"
else
echo -e "\e[32mLet's setup your Fido2 device for sudo authentication.\n\e[0m"
yay -S --noconfirm --needed libfido2 pam-u2f
tokens=$(fido2-token -L) GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
print_success() {
echo -e "${GREEN}$1${NC}"
}
print_error() {
echo -e "${RED}$1${NC}"
}
print_info() {
echo -e "${YELLOW}$1${NC}"
}
check_fido2_hardware() {
tokens=$(fido2-token -L 2>/dev/null)
if [ -z "$tokens" ]; then if [ -z "$tokens" ]; then
echo -e "\e[31m\nNo fido2 device detected. Plug it in, you may have to unlock it as well\e[0m" print_error "\nNo FIDO2 device detected. Please plug it in (you may need to unlock it as well)."
else return 1
# Create the pamu2fcfg file fi
if [ ! -f /etc/fido2/fido2 ]; then return 0
sudo mkdir -p /etc/fido2 }
echo -e "\e[32m\nLet's setup your device by confirming on the device now.\e[0m"
pamu2fcfg >/tmp/fido2 # This needs to run as the user setup_pam_config() {
if [ $? -ne 0 ]; then # Configure sudo
echo -e "\e[31m\nSomething went wrong. Maybe try again?\e[0m" if ! grep -q pam_u2f.so /etc/pam.d/sudo; then
exit 1 print_info "Configuring sudo for FIDO2 authentication..."
fi sudo sed -i '1i auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2' /etc/pam.d/sudo
fi
# Configure polkit
if [ -f /etc/pam.d/polkit-1 ] && ! grep -q 'pam_u2f.so' /etc/pam.d/polkit-1; then
print_info "Configuring polkit for FIDO2 authentication..."
sudo sed -i '1i auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2' /etc/pam.d/polkit-1
elif [ ! -f /etc/pam.d/polkit-1 ]; then
print_info "Creating polkit configuration with FIDO2 authentication..."
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2
auth required pam_unix.so
account required pam_unix.so
password required pam_unix.so
session required pam_unix.so
EOF
fi
}
remove_pam_config() {
# Remove from sudo
if grep -q pam_u2f.so /etc/pam.d/sudo; then
print_info "Removing FIDO2 authentication from sudo..."
sudo sed -i '/pam_u2f\.so/d' /etc/pam.d/sudo
fi
# Remove from polkit
if [ -f /etc/pam.d/polkit-1 ] && grep -Fq 'pam_u2f.so' /etc/pam.d/polkit-1; then
print_info "Removing FIDO2 authentication from polkit..."
sudo sed -i '/pam_u2f\.so/d' /etc/pam.d/polkit-1
fi
}
if [[ "--remove" == "$1" ]]; then
print_success "Removing FIDO2 device from authentication.\n"
# Remove PAM configuration
remove_pam_config
# Remove FIDO2 configuration
if [ -d /etc/fido2 ]; then
print_info "Removing FIDO2 configuration..."
sudo rm -rf /etc/fido2
fi
# Uninstall packages
print_info "Removing FIDO2 packages..."
sudo pacman -Rns --noconfirm libfido2 pam-u2f
print_success "FIDO2 authentication has been completely removed."
else
print_success "Setting up FIDO2 device for authentication.\n"
# Install required packages
print_info "Installing required packages..."
sudo pacman -S --noconfirm --needed libfido2 pam-u2f
if ! check_fido2_hardware; then
exit 1
fi
# Create the pamu2fcfg file
if [ ! -f /etc/fido2/fido2 ]; then
sudo mkdir -p /etc/fido2
print_success "\nLet's setup your device by confirming on the device now."
print_info "Touch your FIDO2 key when it lights up...\n"
if pamu2fcfg >/tmp/fido2; then
sudo mv /tmp/fido2 /etc/fido2/fido2 sudo mv /tmp/fido2 /etc/fido2/fido2
print_success "FIDO2 device registered successfully!"
else
print_error "\nFIDO2 registration failed. Please try again."
exit 1
fi fi
else
print_info "FIDO2 device already registered."
fi
# Add fido2 auth as an option for sudo # Configure PAM
if ! grep -q pam_u2f.so /etc/pam.d/sudo; then setup_pam_config
sudo sed -i '1i auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2' /etc/pam.d/sudo
fi
if ! sudo echo -e "\e[32m\nPerfect! Now you can use your fido2 device for sudo.\e[0m"; then # Test with sudo
echo -e "\e[31m\nSomething went wrong. Maybe try again?\e[0m" print_info "\nTesting FIDO2 authentication with sudo..."
fi print_info "Touch your FIDO2 key when prompted.\n"
if sudo echo "FIDO2 authentication test successful"; then
print_success "\nPerfect! FIDO2 authentication is now configured."
print_info "You can use your FIDO2 key for sudo and polkit authentication."
else
print_error "\nVerification failed. You may want to check your configuration."
fi fi
fi fi

View File

@ -1,45 +1,112 @@
#!/bin/bash #!/bin/bash
if [[ "--remove" == "$1" ]]; then set -e
echo -e "\e[32mLet's remove your fingerprint scanner from authentication.\n\e[0m"
yay -Rns --noconfirm fprintd
sudo rm -rf /etc/pam.d/polkit-1
sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/sudo
echo -e "\e[32mYou've successfully removed the fingerprint setup.\e[0m"
else
echo -e "\e[32mLet's setup your fingerprint scanner for authentication.\n\e[0m"
yay -S --noconfirm --needed fprintd usbutils
if ! lsusb | grep -Eiq 'fingerprint|synaptics|goodix|elan'; then GREEN='\033[0;32m'
echo -e "\e[31m\nNo fingerprint sensor detected.\e[0m" RED='\033[0;31m'
else YELLOW='\033[1;33m'
# Add fingerprint authentication as an option for sudo NC='\033[0m' # No Color
if ! grep -q pam_fprintd.so /etc/pam.d/sudo; then
sudo sed -i '1i auth sufficient pam_fprintd.so' /etc/pam.d/sudo
fi
# Add fingerprint authentication as an option for hyprpolkitagent print_success() {
if [ ! -f /etc/pam.d/polkit-1 ] || ! grep -q pam_fprintd.so /etc/pam.d/polkit-1; then echo -e "${GREEN}$1${NC}"
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF' }
print_error() {
echo -e "${RED}$1${NC}"
}
print_info() {
echo -e "${YELLOW}$1${NC}"
}
check_fingerprint_hardware() {
if ! lsusb | grep -Eiq 'fingerprint|synaptics|goodix|elan|validity'; then
print_error "\nNo fingerprint sensor detected."
return 1
fi
return 0
}
setup_pam_config() {
# Configure sudo
if ! grep -q pam_fprintd.so /etc/pam.d/sudo; then
print_info "Configuring sudo for fingerprint authentication..."
sudo sed -i '1i auth sufficient pam_fprintd.so' /etc/pam.d/sudo
fi
# Configure polkit
if [ -f /etc/pam.d/polkit-1 ] && ! grep -q 'pam_fprintd.so' /etc/pam.d/polkit-1; then
print_info "Configuring polkit for fingerprint authentication..."
sudo sed -i '1i auth sufficient pam_fprintd.so' /etc/pam.d/polkit-1
elif [ ! -f /etc/pam.d/polkit-1 ]; then
print_info "Creating polkit configuration with fingerprint authentication..."
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
auth sufficient pam_fprintd.so
auth required pam_unix.so auth required pam_unix.so
auth optional pam_fprintd.so
account required pam_unix.so account required pam_unix.so
password required pam_unix.so password required pam_unix.so
session required pam_unix.so session required pam_unix.so
EOF EOF
fi fi
}
# Enroll the first finger remove_pam_config() {
echo -e "\e[32m\nLet's setup your right index finger as the first fingerprint.\nKeep moving the finger around on sensor until the process completes.\n\e[0m" # Remove from sudo
sudo fprintd-enroll $USER if grep -q pam_fprintd.so /etc/pam.d/sudo; then
print_info "Removing fingerprint authentication from sudo..."
sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/sudo
fi
echo -e "\e[32m\nNow let's verify that it's working correctly.\e[0m\n" # Remove from polkit
if [ -f /etc/pam.d/polkit-1 ] && grep -Fq 'pam_fprintd.so' /etc/pam.d/polkit-1; then
print_info "Removing fingerprint authentication from polkit..."
sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/polkit-1
fi
}
if [[ "--remove" == "$1" ]]; then
print_success "Removing fingerprint scanner from authentication.\n"
# Remove PAM configuration
remove_pam_config
# Uninstall packages
print_info "Removing fingerprint packages..."
sudo pacman -Rns --noconfirm fprintd
print_success "Fingerprint authentication has been completely removed."
else
print_success "Setting up fingerprint scanner for authentication.\n"
# Install required packages
print_info "Installing required packages..."
sudo pacman -S --noconfirm --needed fprintd usbutils
if ! check_fingerprint_hardware; then
exit 1
fi
# Configure PAM
setup_pam_config
# Enroll 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"
if sudo fprintd-enroll "$USER"; then
print_success "\nFingerprint enrolled successfully!"
# Verify
print_info "\nNow let's verify that it's working correctly.\n"
if fprintd-verify; then if fprintd-verify; then
echo -e "\e[32m\nPerfect! Now you can use your fingerprint on the lock screen (Super + Escape).\e[0m" print_success "\nPerfect! Fingerprint authentication is now configured."
print_info "You can use your fingerprint for sudo, polkit, and lock screen (Super + Escape)."
else else
echo -e "\e[31m\nSomething went wrong. Maybe try again?\e[0m" print_error "\nVerification failed. You may want to try enrolling again."
fi fi
else
print_error "\nEnrollment failed. Please try again."
exit 1
fi fi
fi fi

View File

@ -8,6 +8,10 @@ if [[ -z $COMMAND ]]; then
exit 1 exit 1
fi fi
if ! command -v snapper &>/dev/null; then
exit 127 # omarchy-update can use this to just ignore if snapper is not available
fi
case "$COMMAND" in case "$COMMAND" in
create) create)
DESC="$(omarchy-version)" DESC="$(omarchy-version)"

View File

@ -1,64 +0,0 @@
#!/bin/bash
# Status indicator daemon for waybar
# Calls individual status scripts and caches results
STATE_DIR="/tmp/omarchy-status"
DAEMON_PID_FILE="$STATE_DIR/daemon.pid"
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
mkdir -p "$STATE_DIR"
# Update all status files by calling individual scripts
update_all_status_files() {
"$SCRIPT_DIR/omarchy-status-dnd" > "$STATE_DIR/dnd"
"$SCRIPT_DIR/omarchy-status-nightlight" > "$STATE_DIR/nightlight"
"$SCRIPT_DIR/omarchy-status-recording" > "$STATE_DIR/recording"
"$SCRIPT_DIR/omarchy-status-idle" > "$STATE_DIR/idle"
}
# Generate hash for change detection
get_status_hash() {
echo "$(pgrep -c "mako|hyprsunset|wl-screenrec|wf-recorder|obs|hypridle" 2>/dev/null)$(makoctl mode 2>/dev/null | grep -c 'do-not-disturb')$(hyprctl hyprsunset temperature 2>/dev/null)"
}
# Start background monitoring daemon
start_daemon() {
if [ -f "$DAEMON_PID_FILE" ] && kill -0 $(cat "$DAEMON_PID_FILE") 2>/dev/null; then
return 0
fi
{
last_hash=""
while true; do
current_hash=$(get_status_hash)
if [ "$current_hash" != "$last_hash" ]; then
update_all_status_files
last_hash="$current_hash"
fi
sleep 0.5
done
} &
echo $! > "$DAEMON_PID_FILE"
}
# Main execution
MODULE="$1"
if [ -z "$MODULE" ]; then
echo "Usage: $0 [dnd|nightlight|recording|idle]"
exit 1
fi
start_daemon
# Return cached status for requested module
if [ -f "$STATE_DIR/$MODULE" ]; then
cat "$STATE_DIR/$MODULE"
else
update_all_status_files
cat "$STATE_DIR/$MODULE" 2>/dev/null || echo '{"text": "", "tooltip": "", "class": "hidden"}'
fi

View File

@ -1,9 +0,0 @@
#!/bin/bash
# DND status indicator
if makoctl mode 2>/dev/null | grep -q 'do-not-disturb'; then
echo '{"text": "󰂛", "tooltip": "Notifications silenced", "class": "status-dnd"}'
else
echo '{"text": "", "tooltip": "", "class": "hidden"}'
fi

View File

@ -1,9 +0,0 @@
#!/bin/bash
# Idle lock status indicator
if command -v hypridle >/dev/null 2>&1 && ! pgrep -x hypridle >/dev/null 2>&1; then
echo '{"text": "󱫖", "tooltip": "Idle lock disabled", "class": "status-idle"}'
else
echo '{"text": "", "tooltip": "", "class": "hidden"}'
fi

View File

@ -1,14 +0,0 @@
#!/bin/bash
# Nightlight status indicator
if pgrep -x hyprsunset >/dev/null 2>&1; then
temp=$(hyprctl hyprsunset temperature 2>/dev/null | grep -oE '[0-9]+')
if [ -n "$temp" ] && [ "$temp" -lt 6000 ]; then
echo '{"text": "󰔎", "tooltip": "Night light active", "class": "status-nightlight"}'
else
echo '{"text": "", "tooltip": "", "class": "hidden"}'
fi
else
echo '{"text": "", "tooltip": "", "class": "hidden"}'
fi

View File

@ -1,12 +0,0 @@
#!/bin/bash
# Recording status indicator
if pgrep -x wl-screenrec >/dev/null 2>&1 || \
pgrep -x wf-recorder >/dev/null 2>&1 || \
pgrep -x obs >/dev/null 2>&1 || \
pgrep -f "ffmpeg.*(x11grab|gdigrab|avfoundation)" >/dev/null 2>&1; then
echo '{"text": "󰻂", "tooltip": "Screen recording active", "class": "status-recording"}'
else
echo '{"text": "", "tooltip": "", "class": "hidden"}'
fi

View File

@ -40,11 +40,19 @@ else
fi fi
# Change Chromium colors # Change Chromium colors
if [[ -f ~/.config/omarchy/current/theme/chromium.theme ]] && command -v chromium &>/dev/null; then if command -v chromium &>/dev/null; then
chromium --no-startup-window --set-theme-color="$(<~/.config/omarchy/current/theme/chromium.theme)" if [[ -f ~/.config/omarchy/current/theme/light.mode ]]; then
else chromium --no-startup-window --set-color-scheme="light"
# Use a default, neutral grey if theme doesn't have a color else
chromium --no-startup-window --set-theme-color="28,32,39" chromium --no-startup-window --set-color-scheme="dark"
fi
if [[ -f ~/.config/omarchy/current/theme/chromium.theme ]]; then
chromium --no-startup-window --set-theme-color="$(<~/.config/omarchy/current/theme/chromium.theme)"
else
# Use a default, neutral grey if theme doesn't have a color
chromium --no-startup-window --set-theme-color="28,32,39"
fi
fi fi
# Trigger alacritty config reload # Trigger alacritty config reload

View File

@ -2,7 +2,7 @@
set -e set -e
omarchy-snapshot create omarchy-snapshot create || [ $? -eq 127 ]
omarchy-update-git omarchy-update-git
omarchy-migrate omarchy-migrate
omarchy-update-system-pkgs omarchy-update-system-pkgs

View File

@ -1,9 +1,6 @@
#!/bin/bash #!/bin/bash
# Check for kernel package updates since last boot if [ "$(uname -r | sed 's/-arch/\.arch/')" != "$(pacman -Q linux | awk '{print $2}')" ]; then
boot_time=$(date -d "$(uptime -s)" '+%Y-%m-%d %H:%M')
recent_kernel_updates=$(awk -v boot_time="$boot_time" '$0 >="["boot_time' /var/log/pacman.log | grep -E "\[ALPM\] (upgraded|installed) (linux|linux-zen|linux-lts|linux-hardened)\b" || true)
if [ -n "$recent_kernel_updates" ]; then
gum confirm "Linux kernel has been updated. Reboot?" && omarchy-state clear re*-required && sudo reboot now gum confirm "Linux kernel has been updated. Reboot?" && omarchy-state clear re*-required && sudo reboot now
elif [ -f "$HOME/.local/state/omarchy/reboot-required" ]; then elif [ -f "$HOME/.local/state/omarchy/reboot-required" ]; then

View File

@ -1,5 +1,23 @@
#!/bin/bash #!/bin/bash
echo -e "\e[32m\nUpdate system packages\e[0m" echo -e "\e[32m\nUpdate system packages\e[0m"
yay -Syu --noconfirm sudo pacman -Syu --noconfirm
echo echo
if omarchy-pkg-aur-accessible; then
echo -e "\e[32m\nUpdate AUR packages\e[0m"
yay -Syu --noconfirm
echo
else
echo -e "\e[31m\nAUR is unavailable (so skipping updates)\e[0m"
echo
fi
orphans=$(pacman -Qtdq)
if [[ -n $orphans ]]; then
echo -e "\e[32m\nRemove orphan system packages\e[0m"
for pkg in $orphans; do
sudo pacman -Rs --noconfirm "$pkg" || true
done
echo
fi

View File

@ -3,7 +3,7 @@
ICON_DIR="$HOME/.local/share/applications/icons" ICON_DIR="$HOME/.local/share/applications/icons"
DESKTOP_DIR="$HOME/.local/share/applications/" DESKTOP_DIR="$HOME/.local/share/applications/"
if [ "$#" -ne 1 ]; then if [ "$#" -eq 0 ]; then
# Find all web apps # Find all web apps
while IFS= read -r -d '' file; do while IFS= read -r -d '' file; do
if grep -q '^Exec=.*omarchy-launch-webapp.*' "$file"; then if grep -q '^Exec=.*omarchy-launch-webapp.*' "$file"; then
@ -14,23 +14,22 @@ if [ "$#" -ne 1 ]; then
if ((${#WEB_APPS[@]})); then if ((${#WEB_APPS[@]})); then
IFS=$'\n' SORTED_WEB_APPS=($(sort <<<"${WEB_APPS[*]}")) IFS=$'\n' SORTED_WEB_APPS=($(sort <<<"${WEB_APPS[*]}"))
unset IFS unset IFS
APP_NAME=$(gum choose --header "Select web app to remove..." "${SORTED_WEB_APPS[@]}") APP_NAMES=$(gum choose --no-limit --header "Select web app to remove..." "${SORTED_WEB_APPS[@]}")
else else
echo "No web apps to remove." echo "No web apps to remove."
exit 1 exit 1
fi fi
else else
APP_NAME="$1" APP_NAMES="$*"
fi fi
if [[ -z "$APP_NAME" ]]; then if [[ -z "$APP_NAMES" ]]; then
echo "You must provide web app name." echo "You must provide web app names."
exit 1 exit 1
fi fi
rm "$DESKTOP_DIR/$APP_NAME.desktop" for APP_NAME in $APP_NAMES; do
rm "$ICON_DIR/$APP_NAME.png" rm -f "$DESKTOP_DIR/$APP_NAME.desktop"
rm -f "$ICON_DIR/$APP_NAME.png"
if [ "$#" -ne 1 ]; then echo "Removed $APP_NAME"
echo -e "Removed $APP_NAME\n" done
fi

10
boot.sh
View File

@ -19,12 +19,14 @@ sudo pacman -Sy --noconfirm --needed git
# Use custom repo if specified, otherwise default to basecamp/omarchy # Use custom repo if specified, otherwise default to basecamp/omarchy
OMARCHY_REPO="${OMARCHY_REPO:-basecamp/omarchy}" OMARCHY_REPO="${OMARCHY_REPO:-basecamp/omarchy}"
echo -e "\nCloning Omarchy from: https://github.com/${OMARCHY_REPO}.git" echo -e "\nCloning Omarchy from: https://git.itsscb.de/itsscb/omarchy.git"
rm -rf ~/.local/share/omarchy/ rm -rf ~/.local/share/omarchy/
git clone "https://github.com/${OMARCHY_REPO}.git" ~/.local/share/omarchy >/dev/null # git clone "https://github.com/${OMARCHY_REPO}.git" ~/.local/share/omarchy >/dev/null
git clone "https://git.itsscb.de/itsscb/omarchy.git" ~/.local/share/omarchy >/dev/null
# Use custom branch if instructed # Use custom branch if instructed, otherwise default to master
if [[ -n "$OMARCHY_REF" ]]; then OMARCHY_REF="${OMARCHY_REF:-master}"
if [[ $OMARCHY_REF != "master" ]]; then
echo -e "\eUsing branch: $OMARCHY_REF" echo -e "\eUsing branch: $OMARCHY_REF"
cd ~/.local/share/omarchy cd ~/.local/share/omarchy
git fetch origin "${OMARCHY_REF}" && git checkout "${OMARCHY_REF}" git fetch origin "${OMARCHY_REF}" && git checkout "${OMARCHY_REF}"

View File

@ -0,0 +1,15 @@
{
"extensions": {
"theme": {
"id": "",
"use_system": false,
"use_custom": false
}
},
"browser": {
"theme": {
"color_scheme": 2,
"user_color": 2
}
}
}

View File

@ -85,9 +85,9 @@
"break", "break",
{ {
"type": "command", "type": "command",
"key": "│ ├Ø", "key": "Ø Omarchy",
"keyColor": "blue", "keyColor": "blue",
"text": "version=$(git -C ~/.local/share/omarchy describe --tags --abbrev=0 2>/dev/null); echo \"Omarchy $version\"" "text": "version=$(git -C ~/.local/share/omarchy describe --tags --abbrev=0 2>/dev/null); echo \"$version\""
}, },
{ {
"type": "command", "type": "command",

View File

@ -1,2 +1,6 @@
# Extra autostart processes # Extra autostart processes
# exec-once = uwsm app -- my-service # exec-once = uwsm app -- my-service
exec-once = [workspace 2 silent] zen-browser
exec-once = [workspace 3 silent] thunderbird
exec-once = [workspace 4 silent] deltachat-desktop
exec-once = [workspace 5 silent] ghostty

View File

@ -1,28 +1,17 @@
# Application bindings # Application bindings
$terminal = uwsm app -- alacritty $terminal = ghostty
$browser = omarchy-launch-browser $browser = omarchy-launch-browser
bindd = SUPER, return, Terminal, exec, $terminal --working-directory $(omarchy-cmd-terminal-cwd) bindd = SUPER, T, Terminal, exec, $terminal #--working-directory $(omarchy-cmd-terminal-cwd)
bindd = SUPER, F, File manager, exec, uwsm app -- nautilus --new-window bindd = SUPER, F, File manager, exec, uwsm app -- nautilus --new-window
bindd = SUPER, B, Browser, exec, $browser bindd = SUPER, B, Browser, exec, $browser
bindd = SUPER, M, Music, exec, uwsm app -- spotify bindd = SUPER, M, Music, exec, uwsm app -- spotify
bindd = SUPER, N, Neovim, exec, $terminal -e nvim bindd = SUPER, N, Neovim, exec, $terminal -e nvim
bindd = SUPER, T, Activity, exec, $terminal -e btop
bindd = SUPER, D, Docker, exec, $terminal -e lazydocker bindd = SUPER, D, Docker, exec, $terminal -e lazydocker
bindd = SUPER, G, Signal, exec, uwsm app -- signal-desktop
bindd = SUPER, O, Obsidian, exec, uwsm app -- obsidian -disable-gpu
bindd = SUPER, slash, Passwords, exec, uwsm app -- 1password
# If your web app url contains #, type it as ## to prevent hyperland treat it as comments # If your web app url contains #, type it as ## to prevent hyperland treat it as comments
bindd = SUPER, A, ChatGPT, exec, omarchy-launch-webapp "https://chatgpt.com" bindd = SUPER, A, Kagi Assistant, exec, omarchy-launch-webapp "https://kagi.com/assistant"
bindd = SUPER SHIFT, A, Grok, exec, omarchy-launch-webapp "https://grok.com"
bindd = SUPER, C, Calendar, exec, omarchy-launch-webapp "https://app.hey.com/calendar/weeks/"
bindd = SUPER, E, Email, exec, omarchy-launch-webapp "https://app.hey.com"
bindd = SUPER, Y, YouTube, exec, omarchy-launch-webapp "https://youtube.com/" bindd = SUPER, Y, YouTube, exec, omarchy-launch-webapp "https://youtube.com/"
bindd = SUPER SHIFT, G, WhatsApp, exec, omarchy-launch-webapp "https://web.whatsapp.com/"
bindd = SUPER ALT, G, Google Messages, exec, omarchy-launch-webapp "https://messages.google.com/web/conversations"
bindd = SUPER, X, X, exec, omarchy-launch-webapp "https://x.com/"
bindd = SUPER SHIFT, X, X Post, exec, omarchy-launch-webapp "https://x.com/compose/post"
# Overwrite existing bindings, like putting Omarchy Menu on Super + Space # Overwrite existing bindings, like putting Omarchy Menu on Super + Space
# unbind = SUPER, Space # unbind = SUPER, Space

View File

@ -3,6 +3,7 @@ general {
before_sleep_cmd = loginctl lock-session # lock before suspend. before_sleep_cmd = loginctl lock-session # lock before suspend.
after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display. after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display.
on_unlock_cmd = omarchy-restart-waybar # prevent stacking of waybar when waking on_unlock_cmd = omarchy-restart-waybar # prevent stacking of waybar when waking
inhibit_sleep = 3 # wait until screen is locked
} }
listener { listener {

View File

@ -17,3 +17,8 @@ source = ~/.config/hypr/input.conf
source = ~/.config/hypr/bindings.conf source = ~/.config/hypr/bindings.conf
source = ~/.config/hypr/envs.conf source = ~/.config/hypr/envs.conf
source = ~/.config/hypr/autostart.conf source = ~/.config/hypr/autostart.conf
# NVIDIA environment variables
env = NVD_BACKEND,direct
env = LIBVA_DRIVER_NAME,nvidia
env = __GLX_VENDOR_LIBRARY_NAME,nvidia

View File

@ -1,37 +1,85 @@
source = ~/.config/omarchy/current/theme/hyprlock.conf
$accent = rgb(94e2d5)
$accentAlpha = 94e2d5
$red = rgb(f38ba8)
$redAlpha = f38ba8
$yellow = rgb(f9e2af)
$yellowAlpha = f9e2af
$surface0 = rgb(313244)
$surface0Alpha = 313244
$text = rgb(ffffff)
$base = rgb(000000)
$font = CaskaydiaMono Nerd Font
# GENERAL
general {
disable_loading_bar = true
hide_cursor = true
}
# BACKGROUND
background { background {
monitor = monitor =
color = $color path = ~/.config/omarchy/current/background
blur_passes = 2
color = $base
} }
animations { # TIME
enabled = false label {
}
input-field {
monitor = monitor =
size = 600, 100 text = cmd[update:30000] echo "$(date +"%R")"
position = 0, 0 color = $text
font_size = 90
font_family = $font
position = -30, 0
halign = right
valign = top
}
# DATE
label {
monitor =
text = cmd[update:43200000] echo "$(date +"%A, %d %B %Y")"
color = $text
font_size = 25
font_family = $font
position = -30, -150
halign = right
valign = top
}
# USER AVATAR
image {
monitor =
path = ~/.face
size = 100
border_color = $accent
position = 0, 75
halign = center halign = center
valign = center valign = center
}
inner_color = $inner_color # INPUT FIELD
outer_color = $outer_color input-field {
monitor =
size = 300, 60
outline_thickness = 4 outline_thickness = 4
dots_size = 0.2
font_family = CaskaydiaMono Nerd Font dots_spacing = 0.2
font_color = $font_color dots_center = true
outer_color = $accent
placeholder_text = Enter Password 󰈷  inner_color = $surface0
check_color = $check_color font_color = $text
fail_text = <i>$PAMFAIL ($ATTEMPTS)</i>
rounding = 0
shadow_passes = 0
fade_on_empty = false fade_on_empty = false
} placeholder_text = 󰌾
hide_input = false
auth { check_color = $accent
fingerprint:enabled = true fail_color = $red
fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i>
capslock_color = $yellow
position = 0, -35
halign = center
valign = center
} }

View File

@ -5,7 +5,7 @@
# Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K. # Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K.
env = GDK_SCALE,2 env = GDK_SCALE,2
monitor=,preferred,auto,auto monitor=,preferred,auto-right,auto
# Good compromise for 27" or 32" 4K monitors (but fractional!) # Good compromise for 27" or 32" 4K monitors (but fractional!)
# env = GDK_SCALE,1.75 # env = GDK_SCALE,1.75

BIN
config/omarchy.ttf Normal file

Binary file not shown.

View File

@ -4,15 +4,8 @@
"position": "top", "position": "top",
"spacing": 0, "spacing": 0,
"height": 26, "height": 26,
"modules-left": [ "modules-left": ["custom/omarchy", "hyprland/workspaces"],
"custom/omarchy", "modules-center": ["clock", "custom/update"],
"hyprland/workspaces"
],
"modules-center": [
"group/status-cluster",
"clock",
"custom/update"
],
"modules-right": [ "modules-right": [
"group/tray-expander", "group/tray-expander",
"bluetooth", "bluetooth",
@ -46,7 +39,7 @@
} }
}, },
"custom/omarchy": { "custom/omarchy": {
"format": "", "format": "<span font='omarchy'>\ue900</span>",
"on-click": "omarchy-menu", "on-click": "omarchy-menu",
"tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space" "tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
}, },
@ -70,30 +63,26 @@
"on-click-right": "omarchy-cmd-tzupdate" "on-click-right": "omarchy-cmd-tzupdate"
}, },
"network": { "network": {
"format-icons": ["󰤯","󰤟","󰤢","󰤥","󰤨"], "format-icons": ["󰤯", "󰤟", "󰤢", "󰤥", "󰤨"],
"format" : "{icon}", "format": "{icon}",
"format-wifi" : "{icon}", "format-wifi": "{icon}",
"format-ethernet" : "󰀂", "format-ethernet": "󰀂",
"format-disconnected" : "󰖪", "format-disconnected": "󰖪",
"tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}", "tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
"tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}", "tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
"tooltip-format-disconnected": "Disconnected", "tooltip-format-disconnected": "Disconnected",
"interval": 3, "interval": 3,
"nospacing": 1, "spacing": 1,
"on-click": "alacritty --class=Impala -e impala" "on-click": "alacritty --class=Impala -e impala"
}, },
"battery": { "battery": {
"format": "{capacity}% {icon}", "format": "{capacity}% {icon}",
"format-discharging": "{icon}", "format-discharging": "{icon}",
"format-charging": "{icon}", "format-charging": "{icon}",
"format-plugged": "", "format-plugged": "",
"format-icons": { "format-icons": {
"charging": [ "charging": ["󰢜", "󰂆", "󰂇", "󰂈", "󰢝", "󰂉", "󰢞", "󰂊", "󰂋", "󰂅"],
"󰢜", "󰂆", "󰂇", "󰂈", "󰢝", "󰂉", "󰢞", "󰂊", "󰂋", "󰂅" "default": ["󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"]
],
"default": [
"󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"
]
}, },
"format-full": "󰂅", "format-full": "󰂅",
"tooltip-format-discharging": "{power:>1.0f}W↓ {capacity}%", "tooltip-format-discharging": "{power:>1.0f}W↓ {capacity}%",
@ -128,43 +117,7 @@
"transition-duration": 600, "transition-duration": 600,
"children-class": "tray-group-item" "children-class": "tray-group-item"
}, },
"modules": [ "modules": ["custom/expand-icon", "tray"]
"custom/expand-icon",
"tray"
]
},
"group/status-cluster": {
"orientation": "inherit",
"modules": [
"custom/status-dnd",
"custom/status-nightlight",
"custom/status-recording",
"custom/status-idle"
]
},
"custom/status-dnd": {
"exec": "omarchy-status-daemon dnd",
"return-type": "json",
"interval": 1,
"on-click": "makoctl mode -t do-not-disturb"
},
"custom/status-nightlight": {
"exec": "omarchy-status-daemon nightlight",
"return-type": "json",
"interval": 1,
"on-click": "omarchy-toggle-nightlight"
},
"custom/status-recording": {
"exec": "omarchy-status-daemon recording",
"return-type": "json",
"interval": 1,
"on-click": "omarchy-cmd-screenrecord-stop"
},
"custom/status-idle": {
"exec": "omarchy-status-daemon idle",
"return-type": "json",
"interval": 1,
"on-click": "omarchy-toggle-idle"
}, },
"custom/expand-icon": { "custom/expand-icon": {
"format": " ", "format": " ",

View File

@ -58,30 +58,6 @@ tooltip {
margin-left: 8.75px; margin-left: 8.75px;
} }
#group-status-cluster {
margin-right: 8.75px;
}
#custom-status-dnd,
#custom-status-nightlight,
#custom-status-recording,
#custom-status-idle {
min-width: 12px;
margin: 0 2px;
font-size: 10px;
}
#custom-status-dnd.status-dnd,
#custom-status-nightlight.status-nightlight,
#custom-status-idle.status-idle {
opacity: 1;
}
#custom-status-recording.status-recording {
color: #a55555;
opacity: 1;
}
.hidden { .hidden {
opacity: 0; opacity: 0;
} }

View File

@ -8,4 +8,3 @@ source = ~/.local/share/omarchy/default/hypr/apps/system.conf
source = ~/.local/share/omarchy/default/hypr/apps/walker.conf source = ~/.local/share/omarchy/default/hypr/apps/walker.conf
source = ~/.local/share/omarchy/default/hypr/apps/1password.conf source = ~/.local/share/omarchy/default/hypr/apps/1password.conf
source = ~/.local/share/omarchy/default/hypr/apps/jetbrains.conf source = ~/.local/share/omarchy/default/hypr/apps/jetbrains.conf
source = ~/.local/share/omarchy/default/hypr/apps/zoom.conf

View File

@ -3,4 +3,4 @@ windowrule = tile, class:^(Chromium)$
# Only slight opacity when unfocused # Only slight opacity when unfocused
windowrule = opacity 1 0.97, class:^(Chromium|chromium|google-chrome|google-chrome-unstable|Brave-browser|brave-browser)$ windowrule = opacity 1 0.97, class:^(Chromium|chromium|google-chrome|google-chrome-unstable|Brave-browser|brave-browser)$
windowrule = opacity 1 1, initialTitle:^(youtube.com_/)$ # Youtube windowrule = opacity 1 1, initialTitle:(youtube.com_/|app.zoom.us_/wc/home)

View File

@ -4,7 +4,7 @@ windowrule = center, tag:floating-window
windowrule = size 800 600, tag:floating-window windowrule = size 800 600, tag:floating-window
windowrule = tag +floating-window, class:(blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|com.gabm.satty|Omarchy|About|TUI.float) windowrule = tag +floating-window, class:(blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|com.gabm.satty|Omarchy|About|TUI.float)
windowrule = tag +floating-window, class:(xdg-desktop-portal-gtk|sublime_text), title:^(Open.*Files?|Save.*Files?|All Files|Save) windowrule = tag +floating-window, class:(xdg-desktop-portal-gtk|sublime_text|DesktopEditors), title:^(Open.*Files?|Save.*Files?|Save.*As|All Files|Save)
# Fullscreen screensaver # Fullscreen screensaver
windowrule = fullscreen, class:Screensaver windowrule = fullscreen, class:Screensaver

View File

@ -1,2 +0,0 @@
windowrule = opacity 1 1, class:Zoom Workplace

View File

@ -6,7 +6,4 @@ exec-once = uwsm app -- swaybg -i ~/.config/omarchy/current/background -m fill
exec-once = uwsm app -- swayosd-server exec-once = uwsm app -- swayosd-server
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
exec-once = wl-clip-persist --clipboard regular --all-mime-type-regex '^(?!x-kde-passwordManagerHint).+' exec-once = wl-clip-persist --clipboard regular --all-mime-type-regex '^(?!x-kde-passwordManagerHint).+'
exec-once = omarchy-cmd-first-run
# FIXME: Reenable the walker service once the memory leak has been fixed
# See https://github.com/basecamp/omarchy/issues/698
# exec-once = uwsm app -- walker --gapplication-service

View File

@ -5,7 +5,7 @@ bindd = SUPER, F, File manager, exec, $fileManager
bindd = SUPER, B, Web browser, exec, $browser bindd = SUPER, B, Web browser, exec, $browser
bindd = SUPER, M, Music player, exec, $music bindd = SUPER, M, Music player, exec, $music
bindd = SUPER, N, Neovim, exec, $terminal -e nvim bindd = SUPER, N, Neovim, exec, $terminal -e nvim
bindd = SUPER, T, Top, exec, $terminal -e btop # bindd = SUPER, T, Top, exec, $terminal -e btop
bindd = SUPER, D, Lazy Docker, exec, $terminal -e lazydocker bindd = SUPER, D, Lazy Docker, exec, $terminal -e lazydocker
bindd = SUPER, G, Messenger, exec, $messenger bindd = SUPER, G, Messenger, exec, $messenger
bindd = SUPER, O, Obsidian, exec, obsidian -disable-gpu bindd = SUPER, O, Obsidian, exec, obsidian -disable-gpu

View File

@ -10,9 +10,13 @@ bindd = SHIFT, F11, Force full screen, fullscreen, 0
# Move focus with SUPER + arrow keys # Move focus with SUPER + arrow keys
bindd = SUPER, left, Move focus left, movefocus, l bindd = SUPER, left, Move focus left, movefocus, l
bindd = SUPER, h, Move focus left, movefocus, l
bindd = SUPER, right, Move focus right, movefocus, r bindd = SUPER, right, Move focus right, movefocus, r
bindd = SUPER, l, Move focus right, movefocus, r
bindd = SUPER, up, Move focus up, movefocus, u bindd = SUPER, up, Move focus up, movefocus, u
bindd = SUPER, k, Move focus up, movefocus, u
bindd = SUPER, down, Move focus down, movefocus, d bindd = SUPER, down, Move focus down, movefocus, d
bindd = SUPER, j, Move focus down, movefocus, d
# Switch workspaces with SUPER + [0-9] # Switch workspaces with SUPER + [0-9]
bindd = SUPER, code:10, Switch to workspace 1, workspace, 1 bindd = SUPER, code:10, Switch to workspace 1, workspace, 1
@ -55,10 +59,10 @@ bindd = ALT, Tab, Reveal active window on top, bringactivetotop
bindd = ALT SHIFT, Tab, Reveal active window on top, bringactivetotop bindd = ALT SHIFT, Tab, Reveal active window on top, bringactivetotop
# Resize active window # Resize active window
bindd = SUPER, minus, Expand window left, resizeactive, -100 0 bindd = SUPER, code:20, Expand window left, resizeactive, -100 0 # - key
bindd = SUPER, equal, Shrink window left, resizeactive, 100 0 bindd = SUPER, code:21, Shrink window left, resizeactive, 100 0 # = key
bindd = SUPER SHIFT, minus, Shrink window up, resizeactive, 0 -100 bindd = SUPER SHIFT, code:20, Shrink window up, resizeactive, 0 -100
bindd = SUPER SHIFT, equal, Expand window down, resizeactive, 0 100 bindd = SUPER SHIFT, code:21, Expand window down, resizeactive, 0 100
# Scroll through existing workspaces with SUPER + scroll # Scroll through existing workspaces with SUPER + scroll
bindd = SUPER, mouse_down, Scroll active workspace forward, workspace, e+1 bindd = SUPER, mouse_down, Scroll active workspace forward, workspace, e+1

View File

@ -1,5 +1,5 @@
# Menus # Menus
bindd = SUPER, SPACE, Launch apps, exec, walker -p "Start…" bindd = SUPER, R, Launch apps, exec, walker -p "Start…"
bindd = SUPER CTRL, E, Show clipboard, exec, walker -m Emojis bindd = SUPER CTRL, E, Show clipboard, exec, walker -m Emojis
bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu
bindd = SUPER, ESCAPE, Power menu, exec, omarchy-menu system bindd = SUPER, ESCAPE, Power menu, exec, omarchy-menu system
@ -38,3 +38,6 @@ bindd = CTRL ALT, PRINT, Screen record display, exec, omarchy-cmd-screenrecord o
# Color picker # Color picker
bindd = SUPER, PRINT, Color picker, exec, pkill hyprpicker || hyprpicker -a bindd = SUPER, PRINT, Color picker, exec, pkill hyprpicker || hyprpicker -a
# Disable internal monitor
bindd = SUPER CTRL, F12, Disable Internal Monitor, exec, comarchy-toggle-disable-internal-monitor

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 114 KiB

View File

@ -1,128 +1,72 @@
#!/bin/bash #!/bin/bash
# Exit immediately if a command exits with a non-zero status # Exit immediately if a command exits with a non-zero status
set -e set -eE
export PATH="$HOME/.local/share/omarchy/bin:$PATH" export PATH="$HOME/.local/share/omarchy/bin:$PATH"
OMARCHY_INSTALL=~/.local/share/omarchy/install OMARCHY_INSTALL=~/.local/share/omarchy/install
# Give people a chance to retry running the installation # Preparation
catch_errors() { source $OMARCHY_INSTALL/preflight/show-env.sh
echo -e "\n\e[31mOmarchy installation failed!\e[0m" source $OMARCHY_INSTALL/preflight/trap-errors.sh
echo "The failing command was: \`$BASH_COMMAND\` (exit code: $?)"
echo "See your installation log: ~/.local/state/omarchy/installation.log"
echo
echo "Get help from the community via QR code or at https://discord.gg/tXFUdasqhY"
echo " "
echo " █▀▀▀▀▀█ ▄ ▄ ▀▄▄▄█ █▀▀▀▀▀█ "
echo " █ ███ █ ▄▄▄▄▀▄▀▄▀ █ ███ █ "
echo " █ ▀▀▀ █ ▄█ ▄█▄▄▀ █ ▀▀▀ █ "
echo " ▀▀▀▀▀▀▀ ▀▄█ █ █ █ ▀▀▀▀▀▀▀ "
echo " ▀▀█▀▀▄▀▀▀▀▄█▀▀█ ▀ █ ▀ █ "
echo " █▄█ ▄▄▀▄▄ ▀ ▄ ▀█▄▄▄▄ ▀ ▀█ "
echo " ▄ ▄▀█ ▀▄▀▀▀▄ ▄█▀▄█▀▄▀▄▀█▀ "
echo " █ ▄▄█▄▀▄█ ▄▄▄ ▀ ▄▀██▀ ▀█ "
echo " ▀ ▀ ▀ █ ▀▄ ▀▀█▀▀▀█▄▀ "
echo " █▀▀▀▀▀█ ▀█ ▄▀▀ █ ▀ █▄▀██ "
echo " █ ███ █ █▀▄▄▀ █▀███▀█▄██▄ "
echo " █ ▀▀▀ █ ██ ▀ █▄█ ▄▄▄█▀ █ "
echo " ▀▀▀▀▀▀▀ ▀ ▀ ▀▀▀ ▀ ▀▀▀▀▀▀ "
echo " "
if [[ -n $OMARCHY_BARE ]]; then
echo "You can retry by running: OMARCHY_BARE=true bash ~/.local/share/omarchy/install.sh"
else
echo "You can retry by running: bash ~/.local/share/omarchy/install.sh"
fi
}
trap catch_errors ERR
show_logo() {
clear
tte -i ~/.local/share/omarchy/logo.txt --frame-rate ${2:-120} ${1:-expand}
echo
}
show_subtext() {
echo "$1" | tte --frame-rate ${3:-640} ${2:-wipe}
echo
}
# Start logging
source $OMARCHY_INSTALL/log/before-install.sh
# Install prerequisites
source $OMARCHY_INSTALL/preflight/chroot.sh
source $OMARCHY_INSTALL/preflight/mirrorlist.sh
source $OMARCHY_INSTALL/preflight/gum.sh
source $OMARCHY_INSTALL/preflight/guard.sh source $OMARCHY_INSTALL/preflight/guard.sh
source $OMARCHY_INSTALL/preflight/aur.sh source $OMARCHY_INSTALL/preflight/chroot.sh
source $OMARCHY_INSTALL/preflight/tte.sh source $OMARCHY_INSTALL/preflight/repositories.sh
source $OMARCHY_INSTALL/preflight/migrations.sh source $OMARCHY_INSTALL/preflight/migrations.sh
source $OMARCHY_INSTALL/preflight/first-run-mode.sh
# Packaging
source $OMARCHY_INSTALL/packages.sh
source $OMARCHY_INSTALL/packaging/asdcontrol.sh
source $OMARCHY_INSTALL/packaging/fonts.sh
source $OMARCHY_INSTALL/packaging/lazyvim.sh
source $OMARCHY_INSTALL/packaging/webapps.sh
source $OMARCHY_INSTALL/packaging/tuis.sh
# Configuration # Configuration
source $OMARCHY_INSTALL/config/config.sh source $OMARCHY_INSTALL/config/config.sh
source $OMARCHY_INSTALL/config/theme.sh
source $OMARCHY_INSTALL/config/branding.sh source $OMARCHY_INSTALL/config/branding.sh
source $OMARCHY_INSTALL/config/detect-keyboard-layout.sh source $OMARCHY_INSTALL/config/git.sh
source $OMARCHY_INSTALL/config/fix-fkeys.sh source $OMARCHY_INSTALL/config/gpg.sh
source $OMARCHY_INSTALL/config/network.sh
source $OMARCHY_INSTALL/config/power.sh
source $OMARCHY_INSTALL/config/usb-autosuspend.sh
source $OMARCHY_INSTALL/config/timezones.sh source $OMARCHY_INSTALL/config/timezones.sh
source $OMARCHY_INSTALL/config/nvidia.sh
source $OMARCHY_INSTALL/config/increase-sudo-tries.sh source $OMARCHY_INSTALL/config/increase-sudo-tries.sh
source $OMARCHY_INSTALL/config/ignore-power-button.sh source $OMARCHY_INSTALL/config/increase-lockout-limit.sh
source $OMARCHY_INSTALL/config/ssh-flakiness.sh
source $OMARCHY_INSTALL/config/detect-keyboard-layout.sh
source $OMARCHY_INSTALL/config/xcompose.sh
source $OMARCHY_INSTALL/config/mise-ruby.sh
source $OMARCHY_INSTALL/config/docker.sh
source $OMARCHY_INSTALL/config/mimetypes.sh
source $OMARCHY_INSTALL/config/hardware/network.sh
source $OMARCHY_INSTALL/config/hardware/fix-fkeys.sh
source $OMARCHY_INSTALL/config/hardware/bluetooth.sh
source $OMARCHY_INSTALL/config/hardware/printer.sh
source $OMARCHY_INSTALL/config/hardware/usb-autosuspend.sh
source $OMARCHY_INSTALL/config/hardware/ignore-power-button.sh
source $OMARCHY_INSTALL/config/hardware/nvidia.sh
# Login # Login
source $OMARCHY_INSTALL/login/plymouth.sh source $OMARCHY_INSTALL/login/plymouth.sh
source $OMARCHY_INSTALL/login/limine-snapper.sh source $OMARCHY_INSTALL/login/limine-snapper.sh
source $OMARCHY_INSTALL/login/alt-bootloaders.sh source $OMARCHY_INSTALL/login/alt-bootloaders.sh
# Development
source $OMARCHY_INSTALL/development/terminal.sh
source $OMARCHY_INSTALL/development/development.sh
source $OMARCHY_INSTALL/development/nvim.sh
source $OMARCHY_INSTALL/development/ruby.sh
source $OMARCHY_INSTALL/development/docker.sh
source $OMARCHY_INSTALL/development/firewall.sh
# Desktop
source $OMARCHY_INSTALL/desktop/desktop.sh
source $OMARCHY_INSTALL/desktop/hyprlandia.sh
source $OMARCHY_INSTALL/desktop/theme.sh
source $OMARCHY_INSTALL/desktop/bluetooth.sh
source $OMARCHY_INSTALL/desktop/asdcontrol.sh
source $OMARCHY_INSTALL/desktop/fonts.sh
source $OMARCHY_INSTALL/desktop/printer.sh
# Apps
source $OMARCHY_INSTALL/apps/webapps.sh
source $OMARCHY_INSTALL/apps/tuis.sh
source $OMARCHY_INSTALL/apps/xtras.sh
source $OMARCHY_INSTALL/apps/mimetypes.sh
# Updates # Updates
sudo updatedb sudo updatedb
# Update system packages if we have a network connection # Update system packages
if ping -c5 omarchy.org &>/dev/null; then sudo pacman -Syu --noconfirm
yay -Syu --noconfirm
fi
# Stop logging
source $OMARCHY_INSTALL/log/after-install.sh
# Reboot # Reboot
show_logo laseretch 920 clear
show_subtext "You're done! So we're ready to reboot now..." tte -i ~/.local/share/omarchy/logo.txt --frame-rate 920 laseretch
echo
echo "You're done! So we're ready to reboot now..." | tte --frame-rate 640 wipe
if sudo test -f /etc/sudoers.d/99-omarchy-installer; then if sudo test -f /etc/sudoers.d/99-omarchy-installer; then
sudo rm -f /etc/sudoers.d/99-omarchy-installer &>/dev/null sudo rm -f /etc/sudoers.d/99-omarchy-installer &>/dev/null
echo echo -e "\nRemember to remove USB installer!\n\n"
read -n 1 -s -r -p "Remove the USB installer then press any key to reboot..."
echo
fi fi
sleep 2 sleep 5
reboot reboot

View File

@ -1,6 +0,0 @@
#!/bin/bash
if [ -z "$OMARCHY_BARE" ]; then
omarchy-tui-install "Disk Usage" "bash -c 'dust; read -n 1 -s'" float https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/qdirstat.png
omarchy-tui-install "Docker" "lazydocker" tile https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/docker.png
fi

View File

@ -1,16 +0,0 @@
#!/bin/bash
if [ -z "$OMARCHY_BARE" ]; then
omarchy-webapp-install "HEY" https://app.hey.com https://www.hey.com/assets/images/general/hey.png
omarchy-webapp-install "Basecamp" https://launchpad.37signals.com https://basecamp.com/assets/images/general/basecamp.png
omarchy-webapp-install "WhatsApp" https://web.whatsapp.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/whatsapp.png
omarchy-webapp-install "Google Photos" https://photos.google.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/google-photos.png
omarchy-webapp-install "Google Contacts" https://contacts.google.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/google-contacts.png
omarchy-webapp-install "Google Messages" https://messages.google.com/web/conversations https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/google-messages.png
omarchy-webapp-install "ChatGPT" https://chatgpt.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/chatgpt.png
omarchy-webapp-install "YouTube" https://youtube.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/youtube.png
omarchy-webapp-install "GitHub" https://github.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/github-light.png
omarchy-webapp-install "X" https://x.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/x-light.png
omarchy-webapp-install "Figma" https://figma.com/ https://www.veryicon.com/download/png/application/app-icon-7/figma-1?s=256
omarchy-webapp-install "Discord" https://discord.com/channels/@me https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/discord.png
fi

View File

@ -1,21 +0,0 @@
#!/bin/bash
if [ -z "$OMARCHY_BARE" ]; then
yay -S --noconfirm --needed \
gnome-calculator gnome-keyring signal-desktop \
obsidian-bin libreoffice obs-studio kdenlive \
xournalpp localsend-bin
# Packages known to be flaky or having key signing issues are run one-by-one
# FIXME: Add pinta back to this list when we have dealt with certificate issue
for pkg in typora spotify zoom; do
yay -S --noconfirm --needed "$pkg" ||
echo -e "\e[31mFailed to install $pkg. Continuing without!\e[0m"
done
yay -S --noconfirm --needed 1password-beta 1password-cli ||
echo -e "\e[31mFailed to install 1password. Continuing without!\e[0m"
fi
# Copy over Omarchy applications
source omarchy-refresh-applications || true

1
install/config/branding.sh Normal file → Executable file
View File

@ -1,5 +1,6 @@
#!/bin/bash #!/bin/bash
# Allow the user to change the branding for fastfetch and screensaver
mkdir -p ~/.config/omarchy/branding mkdir -p ~/.config/omarchy/branding
cp ~/.local/share/omarchy/icon.txt ~/.config/omarchy/branding/about.txt cp ~/.local/share/omarchy/icon.txt ~/.config/omarchy/branding/about.txt
cp ~/.local/share/omarchy/logo.txt ~/.config/omarchy/branding/screensaver.txt cp ~/.local/share/omarchy/logo.txt ~/.config/omarchy/branding/screensaver.txt

50
install/config/config.sh Normal file → Executable file
View File

@ -1,56 +1,8 @@
#!/bin/bash #!/bin/bash
# Copy over Omarchy configs # Copy over Omarchy configs
mkdir -p ~/.config
cp -R ~/.local/share/omarchy/config/* ~/.config/ cp -R ~/.local/share/omarchy/config/* ~/.config/
# Use default bashrc from Omarchy # Use default bashrc from Omarchy
cp ~/.local/share/omarchy/default/bashrc ~/.bashrc cp ~/.local/share/omarchy/default/bashrc ~/.bashrc
# Ensure application directory exists for update-desktop-database
mkdir -p ~/.local/share/applications
# If bare install, allow a way for its exclusions to not get added in updates
if [ -n "$OMARCHY_BARE" ]; then
mkdir -p ~/.local/state/omarchy
touch ~/.local/state/omarchy/bare.mode
fi
# Setup GPG configuration with multiple keyservers for better reliability
sudo mkdir -p /etc/gnupg
sudo cp ~/.local/share/omarchy/default/gpg/dirmngr.conf /etc/gnupg/
sudo chmod 644 /etc/gnupg/dirmngr.conf
sudo gpgconf --kill dirmngr || true
sudo gpgconf --launch dirmngr || true
# Increase lockout limit to 10 and decrease timeout to 2 minutes
sudo sed -i 's|^\(auth\s\+required\s\+pam_faillock.so\)\s\+preauth.*$|\1 preauth silent deny=10 unlock_time=120|' "/etc/pam.d/system-auth"
sudo sed -i 's|^\(auth\s\+\[default=die\]\s\+pam_faillock.so\)\s\+authfail.*$|\1 authfail deny=10 unlock_time=120|' "/etc/pam.d/system-auth"
# Solve common flakiness with SSH
echo "net.ipv4.tcp_mtu_probing=1" | sudo tee -a /etc/sysctl.d/99-sysctl.conf
# Set common git aliases
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global pull.rebase true
git config --global init.defaultBranch master
# Set identification from install inputs
if [[ -n "${OMARCHY_USER_NAME//[[:space:]]/}" ]]; then
git config --global user.name "$OMARCHY_USER_NAME"
fi
if [[ -n "${OMARCHY_USER_EMAIL//[[:space:]]/}" ]]; then
git config --global user.email "$OMARCHY_USER_EMAIL"
fi
# Set default XCompose that is triggered with CapsLock
tee ~/.XCompose >/dev/null <<EOF
include "%H/.local/share/omarchy/default/xcompose"
# Identification
<Multi_key> <space> <n> : "$OMARCHY_USER_NAME"
<Multi_key> <space> <e> : "$OMARCHY_USER_EMAIL"
EOF

View File

@ -1,5 +1,6 @@
#!/bin/bash #!/bin/bash
# Copy over the keyboard layout that's been set in Arch during install to Hyprland
conf="/etc/vconsole.conf" conf="/etc/vconsole.conf"
hyprconf="$HOME/.config/hypr/hyprland.conf" hyprconf="$HOME/.config/hypr/hyprland.conf"

View File

@ -1,7 +1,5 @@
#!/bin/bash #!/bin/bash
yay -S --noconfirm --needed docker docker-compose docker-buildx
# Configure Docker daemon: # Configure Docker daemon:
# - limit log size to avoid running out of disk # - limit log size to avoid running out of disk
# - use host's DNS resolver # - use host's DNS resolver

20
install/config/git.sh Executable file
View File

@ -0,0 +1,20 @@
#!/bin/bash
# Set common git aliases
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global pull.rebase true
git config --global init.defaultBranch master
# Set identification from install inputs
if [[ -n "${OMARCHY_USER_NAME//[[:space:]]/}" ]]; then
git config --global user.name "$OMARCHY_USER_NAME"
fi
if [[ -n "${OMARCHY_USER_EMAIL//[[:space:]]/}" ]]; then
git config --global user.email "$OMARCHY_USER_EMAIL"
fi
git config --global credential.helper /usr/lib/git-core/git-credential-libsecret

8
install/config/gpg.sh Executable file
View File

@ -0,0 +1,8 @@
#!/bin/bash
# Setup GPG configuration with multiple keyservers for better reliability
sudo mkdir -p /etc/gnupg
sudo cp ~/.local/share/omarchy/default/gpg/dirmngr.conf /etc/gnupg/
sudo chmod 644 /etc/gnupg/dirmngr.conf
sudo gpgconf --kill dirmngr || true
sudo gpgconf --launch dirmngr || true

View File

@ -1,7 +1,4 @@
#!/bin/bash #!/bin/bash
# Install bluetooth controls
yay -S --noconfirm --needed blueberry
# Turn on bluetooth by default # Turn on bluetooth by default
chrootable_systemctl_enable bluetooth.service chrootable_systemctl_enable bluetooth.service

View File

@ -1,8 +1,6 @@
#!/bin/bash #!/bin/bash
# Ensure that F-keys on Apple-like keyboards (such as Lofree Flow84) are always F-keys
if [[ ! -f /etc/modprobe.d/hid_apple.conf ]]; then if [[ ! -f /etc/modprobe.d/hid_apple.conf ]]; then
echo "options hid_apple fnmode=2" | sudo tee /etc/modprobe.d/hid_apple.conf echo "options hid_apple fnmode=2" | sudo tee /etc/modprobe.d/hid_apple.conf
# Rely on install/login.sh to do the rebuild
# sudo mkinitcpio -P
fi fi

View File

@ -3,7 +3,7 @@
# Install iwd explicitly if it wasn't included in archinstall # Install iwd explicitly if it wasn't included in archinstall
# This can happen if archinstall used ethernet # This can happen if archinstall used ethernet
if ! command -v iwctl &>/dev/null; then if ! command -v iwctl &>/dev/null; then
yay -S --noconfirm --needed iwd sudo pacman -S --noconfirm --needed iwd
chrootable_systemctl_enable iwd.service chrootable_systemctl_enable iwd.service
fi fi

View File

@ -12,9 +12,6 @@
# --- GPU Detection --- # --- GPU Detection ---
if [ -n "$(lspci | grep -i 'nvidia')" ]; then if [ -n "$(lspci | grep -i 'nvidia')" ]; then
show_logo
show_subtext "Install NVIDIA drivers..."
# --- Driver Selection --- # --- Driver Selection ---
# Turing (16xx, 20xx), Ampere (30xx), Ada (40xx), and newer recommend the open-source kernel modules # Turing (16xx, 20xx), Ampere (30xx), Ada (40xx), and newer recommend the open-source kernel modules
if echo "$(lspci | grep -i 'nvidia')" | grep -q -E "RTX [2-9][0-9]|GTX 16"; then if echo "$(lspci | grep -i 'nvidia')" | grep -q -E "RTX [2-9][0-9]|GTX 16"; then
@ -53,7 +50,7 @@ if [ -n "$(lspci | grep -i 'nvidia')" ]; then
"qt6-wayland" "qt6-wayland"
) )
yay -S --needed --noconfirm "${PACKAGES_TO_INSTALL[@]}" sudo pacman -S --needed --noconfirm "${PACKAGES_TO_INSTALL[@]}"
# Configure modprobe for early KMS # Configure modprobe for early KMS
echo "options nvidia_drm modeset=1" | sudo tee /etc/modprobe.d/nvidia.conf >/dev/null echo "options nvidia_drm modeset=1" | sudo tee /etc/modprobe.d/nvidia.conf >/dev/null

View File

@ -1,6 +1,5 @@
#!/bin/bash #!/bin/bash
sudo pacman -S --noconfirm cups cups-pdf cups-filters cups-browsed system-config-printer avahi nss-mdns
chrootable_systemctl_enable cups.service chrootable_systemctl_enable cups.service
# Disable multicast dns in resolved. Avahi will provide this for better network printer discovery # Disable multicast dns in resolved. Avahi will provide this for better network printer discovery

View File

@ -0,0 +1,5 @@
#!/bin/bash
# Increase lockout limit to 10 and decrease timeout to 2 minutes
sudo sed -i 's|^\(auth\s\+required\s\+pam_faillock.so\)\s\+preauth.*$|\1 preauth silent deny=10 unlock_time=120|' "/etc/pam.d/system-auth"
sudo sed -i 's|^\(auth\s\+\[default=die\]\s\+pam_faillock.so\)\s\+authfail.*$|\1 authfail deny=10 unlock_time=120|' "/etc/pam.d/system-auth"

3
install/config/increase-sudo-tries.sh Normal file → Executable file
View File

@ -1,2 +1,5 @@
#!/bin/bash
# Give the user 10 instead of 3 tries to fat finger their password before lockout
echo "Defaults passwd_tries=10" | sudo tee /etc/sudoers.d/passwd-tries echo "Defaults passwd_tries=10" | sudo tee /etc/sudoers.d/passwd-tries
sudo chmod 440 /etc/sudoers.d/passwd-tries sudo chmod 440 /etc/sudoers.d/passwd-tries

View File

@ -1,5 +1,6 @@
#!/bin/bash #!/bin/bash
omarchy-refresh-applications
update-desktop-database ~/.local/share/applications update-desktop-database ~/.local/share/applications
# Open all images with imv # Open all images with imv

View File

@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
# Install Ruby using gcc-14 for compatibility # Install Ruby using gcc-14 for compatibility
yay -S --noconfirm --needed gcc14
mise settings set ruby.ruby_build_opts "CC=gcc-14 CXX=g++-14" mise settings set ruby.ruby_build_opts "CC=gcc-14 CXX=g++-14"
# Trust .ruby-version # Trust .ruby-version

View File

@ -1,20 +0,0 @@
#!/bin/bash
# Setting the performance profile can make a big difference. By default, most systems seem to start in balanced mode,
# even if they're not running off a battery. So let's make sure that's changed to performance.
yay -S --noconfirm python-gobject power-profiles-daemon
if ls /sys/class/power_supply/BAT* &>/dev/null; then
# This computer runs on a battery
powerprofilesctl set balanced || true
# Enable battery monitoring timer for low battery notifications
if [ -n "${OMARCHY_CHROOT_INSTALL:-}" ]; then
systemctl --user enable omarchy-battery-monitor.timer
else
systemctl --user enable --now omarchy-battery-monitor.timer
fi
else
# This computer runs on power outlet
powerprofilesctl set performance || true
fi

View File

@ -0,0 +1,4 @@
#!/bin/bash
# Solve common flakiness with SSH
echo "net.ipv4.tcp_mtu_probing=1" | sudo tee -a /etc/sysctl.d/99-sysctl.conf

23
install/config/theme.sh Executable file
View File

@ -0,0 +1,23 @@
#!/bin/bash
gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark"
gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"
gsettings set org.gnome.desktop.interface icon-theme "Yaru-blue"
# Setup theme links
mkdir -p ~/.config/omarchy/themes
for f in ~/.local/share/omarchy/themes/*; do ln -nfs "$f" ~/.config/omarchy/themes/; done
# Set initial theme
mkdir -p ~/.config/omarchy/current
ln -snf ~/.config/omarchy/themes/rose-pine/ ~/.config/omarchy/current/theme
ln -snf ~/.config/omarchy/current/theme/backgrounds/cthulhu.jpg ~/.config/omarchy/current/background
# Set specific app links for current theme
# ln -snf ~/.config/omarchy/current/theme/neovim.lua ~/.config/nvim/lua/plugins/theme.lua
mkdir -p ~/.config/btop/themes
ln -snf ~/.config/omarchy/current/theme/btop.theme ~/.config/btop/themes/current.theme
mkdir -p ~/.config/mako
ln -snf ~/.config/omarchy/current/theme/mako.ini ~/.config/mako/config

8
install/config/timezones.sh Normal file → Executable file
View File

@ -1,9 +1,7 @@
#!/bin/bash #!/bin/bash
if ! command -v tzupdate &>/dev/null; then # Ensure timezone can be updated without needing to sudo
yay -S --noconfirm --needed tzupdate sudo tee /etc/sudoers.d/omarchy-tzupdate >/dev/null <<EOF
sudo tee /etc/sudoers.d/omarchy-tzupdate >/dev/null <<EOF
%wheel ALL=(root) NOPASSWD: /usr/bin/tzupdate, /usr/bin/timedatectl %wheel ALL=(root) NOPASSWD: /usr/bin/tzupdate, /usr/bin/timedatectl
EOF EOF
sudo chmod 0440 /etc/sudoers.d/omarchy-tzupdate sudo chmod 0440 /etc/sudoers.d/omarchy-tzupdate
fi

10
install/config/xcompose.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/bash
# Set default XCompose that is triggered with CapsLock
tee ~/.XCompose >/dev/null <<EOF
include "%H/.local/share/omarchy/default/xcompose"
# Identification
<Multi_key> <space> <n> : "$OMARCHY_USER_NAME"
<Multi_key> <space> <e> : "$OMARCHY_USER_EMAIL"
EOF

View File

@ -1,16 +0,0 @@
#!/bin/bash
yay -S --noconfirm --needed \
brightnessctl playerctl pamixer wiremix wireplumber \
fcitx5 fcitx5-gtk fcitx5-qt wl-clip-persist \
nautilus sushi ffmpegthumbnailer gvfs-mtp \
slurp satty \
mpv evince imv \
omarchy-chromium-bin
# Add screen recorder based on GPU
if lspci | grep -Eqi 'nvidia|intel.*graphics'; then
yay -S --noconfirm --needed wf-recorder
else
yay -S --noconfirm --needed wl-screenrec
fi

View File

@ -1,7 +0,0 @@
#!/bin/bash
yay -S --noconfirm --needed ttf-font-awesome ttf-cascadia-mono-nerd ttf-ia-writer noto-fonts noto-fonts-emoji
if [ -z "$OMARCHY_BARE" ]; then
yay -S --noconfirm --needed ttf-jetbrains-mono noto-fonts-cjk noto-fonts-extra
fi

View File

@ -1,6 +0,0 @@
#!/bin/bash
yay -S --noconfirm --needed \
hyprland hyprshot hyprpicker hyprlock hypridle hyprsunset polkit-gnome hyprland-qtutils \
walker-bin libqalculate waybar mako swaybg swayosd \
xdg-desktop-portal-hyprland xdg-desktop-portal-gtk

View File

@ -1,38 +0,0 @@
#!/bin/bash
# Use dark mode for QT apps too (like kdenlive)
if ! yay -Q kvantum-qt5 &>/dev/null; then
yay -S --noconfirm kvantum-qt5
fi
# Prefer dark mode everything
if ! yay -Q gnome-themes-extra &>/dev/null; then
yay -S --noconfirm gnome-themes-extra # Adds Adwaita-dark theme
fi
# Allow icons to match the theme
if ! yay -! yaru-icon-theme &>/dev/null; then
yay -S --noconfirm yaru-icon-theme
fi
gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark"
gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"
gsettings set org.gnome.desktop.interface icon-theme "Yaru-blue"
# Setup theme links
mkdir -p ~/.config/omarchy/themes
for f in ~/.local/share/omarchy/themes/*; do ln -nfs "$f" ~/.config/omarchy/themes/; done
# Set initial theme
mkdir -p ~/.config/omarchy/current
ln -snf ~/.config/omarchy/themes/tokyo-night ~/.config/omarchy/current/theme
ln -snf ~/.config/omarchy/current/theme/backgrounds/1-scenery-pink-lakeside-sunset-lake-landscape-scenic-panorama-7680x3215-144.png ~/.config/omarchy/current/background
# Set specific app links for current theme
ln -snf ~/.config/omarchy/current/theme/neovim.lua ~/.config/nvim/lua/plugins/theme.lua
mkdir -p ~/.config/btop/themes
ln -snf ~/.config/omarchy/current/theme/btop.theme ~/.config/btop/themes/current.theme
mkdir -p ~/.config/mako
ln -snf ~/.config/omarchy/current/theme/mako.ini ~/.config/mako/config

View File

@ -1,8 +0,0 @@
#!/bin/bash
yay -S --noconfirm --needed \
cargo clang llvm mise \
imagemagick \
mariadb-libs postgresql-libs \
github-cli \
lazygit lazydocker

View File

@ -1,26 +0,0 @@
#!/bin/bash
if ! command -v ufw &>/dev/null && -z "${OMARCHY_CHROOT_INSTALL:-}"; then
yay -S --noconfirm --needed ufw ufw-docker
# Allow nothing in, everything out
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Allow ports for LocalSend
sudo ufw allow 53317/udp
sudo ufw allow 53317/tcp
# Allow SSH in
sudo ufw allow 22/tcp
# Allow Docker containers to use DNS on host
sudo ufw allow in proto udp from 172.16.0.0/12 to 172.17.0.1 port 53 comment 'allow-docker-dns'
# Turn on the firewall
sudo ufw --force enable
# Turn on Docker protections
sudo ufw-docker install
sudo ufw reload
fi

View File

@ -1,12 +0,0 @@
#!/bin/bash
if ! command -v nvim &>/dev/null || [ ! -d "$HOME/.config/nvim" ]; then
yay -S --noconfirm --needed nvim luarocks tree-sitter-cli
# Install LazyVim
rm -rf ~/.config/nvim
git clone https://github.com/LazyVim/starter ~/.config/nvim
cp -R ~/.local/share/omarchy/config/nvim/* ~/.config/nvim/
rm -rf ~/.config/nvim/.git
echo "vim.opt.relativenumber = false" >>~/.config/nvim/lua/config/options.lua
fi

View File

@ -1,9 +0,0 @@
#!/bin/bash
yay -S --noconfirm --needed \
unzip inetutils impala \
fd eza fzf ripgrep zoxide bat dust jq xmlstarlet \
wl-clipboard btop \
man tldr less whois plocate \
starship bash-completion \
alacritty

View File

@ -0,0 +1,12 @@
#!/bin/bash
if ls /sys/class/power_supply/BAT* &>/dev/null; then
# This computer runs on a battery
powerprofilesctl set balanced || true
# Enable battery monitoring timer for low battery notifications
systemctl --user enable --now omarchy-battery-monitor.timer
else
# This computer runs on power outlet
powerprofilesctl set performance || true
fi

22
install/first-run/firewall.sh Executable file
View File

@ -0,0 +1,22 @@
#!/bin/bash
# Allow nothing in, everything out
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Allow ports for LocalSend
sudo ufw allow 53317/udp
sudo ufw allow 53317/tcp
# Allow SSH in
sudo ufw allow 22/tcp
# Allow Docker containers to use DNS on host
sudo ufw allow in proto udp from 172.16.0.0/12 to 172.17.0.1 port 53 comment 'allow-docker-dns'
# Turn on the firewall
sudo ufw --force enable
# Turn on Docker protections
sudo ufw-docker install
sudo ufw reload

View File

@ -1,5 +0,0 @@
#!/bin/bash
echo -e "\n--- Pacman packages (after installation) ---"
echo "Total packages installed: $(pacman -Q | wc -l)"
pacman -Q

View File

@ -1,16 +0,0 @@
#!/bin/bash
# Start logging a copy of everything sent to STDOUT and STDERR
mkdir -p ~/.local/state/omarchy/logs/
exec &> >(tee -a ~/.local/state/omarchy/logs/installation.log)
echo "--- System state before installation ---"
sudo pacman -S --noconfirm fastfetch
fastfetch
echo -e "\n--- System logs (journalctl / current boot) ---"
journalctl -b --no-pager
echo -e "\n--- Pacman packages (before installation) ---"
echo "Total packages installed: $(pacman -Q | wc -l)"
pacman -Q

0
install/login/alt-bootloaders.sh Normal file → Executable file
View File

29
install/login/limine-snapper.sh Normal file → Executable file
View File

@ -1,17 +1,22 @@
#!/bin/bash #!/bin/bash
if command -v limine &>/dev/null && [ ! -f /etc/default/limine ]; then if command -v limine &>/dev/null; then
yay -S --noconfirm --needed limine-mkinitcpio-hook limine-snapper-sync
sudo tee /etc/mkinitcpio.conf.d/omarchy_hooks.conf <<EOF >/dev/null sudo tee /etc/mkinitcpio.conf.d/omarchy_hooks.conf <<EOF >/dev/null
HOOKS=(base udev plymouth keyboard autodetect microcode modconf kms keymap consolefont block encrypt filesystems fsck btrfs-overlayfs) HOOKS=(base udev plymouth keyboard autodetect microcode modconf kms keymap consolefont block encrypt filesystems fsck btrfs-overlayfs)
EOF EOF
CMDLINE=$(grep "^[[:space:]]*cmdline:" /boot/EFI/limine/limine.conf | head -1 | sed 's/^[[:space:]]*cmdline:[[:space:]]*//') [[ -f /boot/EFI/limine/limine.conf ]] && EFI=true
# Conf location is different between EFI and BIOS
[[ -n "$EFI" ]] && limine_config="/boot/EFI/limine/limine.conf" || limine_config="/boot/limine/limine.conf"
CMDLINE=$(grep "^[[:space:]]*cmdline:" "$limine_config" | head -1 | sed 's/^[[:space:]]*cmdline:[[:space:]]*//')
sudo tee /etc/default/limine <<EOF >/dev/null sudo tee /etc/default/limine <<EOF >/dev/null
TARGET_OS_NAME="Omarchy" TARGET_OS_NAME="Omarchy"
ESP_PATH="/boot"
KERNEL_CMDLINE[default]="$CMDLINE" KERNEL_CMDLINE[default]="$CMDLINE"
KERNEL_CMDLINE[default]+="quiet splash" KERNEL_CMDLINE[default]+="quiet splash"
@ -29,6 +34,11 @@ MAX_SNAPSHOT_ENTRIES=5
SNAPSHOT_FORMAT_CHOICE=5 SNAPSHOT_FORMAT_CHOICE=5
EOF EOF
# UKI and EFI fallback are EFI only
if [[ -z $EFI ]]; then
sudo sed -i '/^ENABLE_UKI=/d; /^ENABLE_LIMINE_FALLBACK=/d' /etc/default/limine
fi
# We overwrite the whole thing knowing the limine-update will add the entries for us # We overwrite the whole thing knowing the limine-update will add the entries for us
sudo tee /boot/limine.conf <<EOF >/dev/null sudo tee /boot/limine.conf <<EOF >/dev/null
### Read more at config document: https://github.com/limine-bootloader/limine/blob/trunk/CONFIG.md ### Read more at config document: https://github.com/limine-bootloader/limine/blob/trunk/CONFIG.md
@ -52,6 +62,9 @@ term_background_bright: 24283b
EOF EOF
sudo pacman -S --noconfirm --needed limine-snapper-sync limine-mkinitcpio-hook
sudo limine-update
# Match Snapper configs if not installing from the ISO # Match Snapper configs if not installing from the ISO
if [ -z "${OMARCHY_CHROOT_INSTALL:-}" ]; then if [ -z "${OMARCHY_CHROOT_INSTALL:-}" ]; then
if ! sudo snapper list-configs 2>/dev/null | grep -q "root"; then if ! sudo snapper list-configs 2>/dev/null | grep -q "root"; then
@ -68,16 +81,14 @@ EOF
sudo sed -i 's/^NUMBER_LIMIT="50"/NUMBER_LIMIT="5"/' /etc/snapper/configs/{root,home} sudo sed -i 's/^NUMBER_LIMIT="50"/NUMBER_LIMIT="5"/' /etc/snapper/configs/{root,home}
sudo sed -i 's/^NUMBER_LIMIT_IMPORTANT="10"/NUMBER_LIMIT_IMPORTANT="5"/' /etc/snapper/configs/{root,home} sudo sed -i 's/^NUMBER_LIMIT_IMPORTANT="10"/NUMBER_LIMIT_IMPORTANT="5"/' /etc/snapper/configs/{root,home}
sudo limine-update
chrootable_systemctl_enable limine-snapper-sync.service chrootable_systemctl_enable limine-snapper-sync.service
fi fi
# Add UKI entry to UEFI machines to skip bootloader showing on normal boot # Add UKI entry to UEFI machines to skip bootloader showing on normal boot
# Only doing this for ISO installs if [ -n "$EFI" ] && efibootmgr &>/dev/null && ! efibootmgr | grep -q Omarchy; then
if [ -n "${OMARCHY_CHROOT_INSTALL:-}" ] && efibootmgr &>/dev/null && ! efibootmgr | grep -q Omarchy; then
sudo efibootmgr --create \ sudo efibootmgr --create \
--disk "$(findmnt -n -o SOURCE /boot | sed 's/[0-9]*$//')" \ --disk "$(findmnt -n -o SOURCE /boot | sed 's/p\?[0-9]*$//')" \
--part "$(findmnt -n -o SOURCE /boot | grep -o '[0-9]*$')" \ --part "$(findmnt -n -o SOURCE /boot | grep -o 'p\?[0-9]*$' | sed 's/^p//')" \
--label "Omarchy" \ --label "Omarchy" \
--loader "\\EFI\\Linux\\$(cat /etc/machine-id)_linux.efi" --loader "\\EFI\\Linux\\$(cat /etc/machine-id)_linux.efi"
fi fi

3
install/login/plymouth.sh Normal file → Executable file
View File

@ -1,9 +1,6 @@
#!/bin/bash #!/bin/bash
# Hyprland launched via UWSM and login directly as user, rely on disk encryption + hyprlock for security # Hyprland launched via UWSM and login directly as user, rely on disk encryption + hyprlock for security
if ! command -v uwsm &>/dev/null || ! command -v plymouth &>/dev/null; then
yay -S --noconfirm --needed plymouth uwsm
fi
# ============================================================================== # ==============================================================================
# PLYMOUTH SETUP # PLYMOUTH SETUP

124
install/packages.sh Executable file
View File

@ -0,0 +1,124 @@
sudo pacman -S --noconfirm --needed \
gimp \
inkscape \
jujutsu \
thunderbird \
deltachat-desktop \
keepassxc \
ghostty \
avahi \
bash-completion \
bat \
blueberry \
brightnessctl \
btop \
cargo \
rustup \
clang \
cups \
cups-browsed \
cups-filters \
cups-pdf \
docker \
docker-buildx \
docker-compose \
dust \
evince \
eza \
fastfetch \
fcitx5 \
fcitx5-gtk \
fcitx5-qt \
fd \
ffmpegthumbnailer \
fzf \
gcc14 \
github-cli \
gnome-calculator \
gnome-keyring \
gnome-themes-extra \
gum \
gvfs-mtp \
hypridle \
hyprland \
hyprland-qtutils \
hyprlock \
hyprpicker \
hyprshot \
hyprsunset \
imagemagick \
impala \
imv \
inetutils \
jq \
kdenlive \
kvantum-qt5 \
lazydocker \
lazygit \
less \
libqalculate \
libreoffice \
llvm \
localsend \
luarocks \
mako \
man \
mariadb-libs \
mise \
mpv \
nautilus \
noto-fonts \
noto-fonts-cjk \
noto-fonts-emoji \
noto-fonts-extra \
nss-mdns \
nvim \
obs-studio \
chromium \
pamixer \
pinta \
playerctl \
plocate \
plymouth \
polkit-gnome \
postgresql-libs \
power-profiles-daemon \
python-gobject \
python-poetry-core \
python-terminaltexteffects \
ripgrep \
satty \
slurp \
spotify \
starship \
sushi \
swaybg \
swayosd \
system-config-printer \
tldr \
tree-sitter-cli \
ttf-cascadia-mono-nerd \
ttf-font-awesome \
ttf-ia-writer \
ttf-jetbrains-mono \
tzupdate \
ufw \
ufw-docker \
unzip \
uwsm \
walker-bin \
waybar \
wf-recorder \
whois \
wiremix \
wireplumber \
wl-clip-persist \
wl-clipboard \
wl-screenrec \
xdg-desktop-portal-gtk \
xdg-desktop-portal-hyprland \
xmlstarlet \
xournalpp \
yaru-icon-theme \
yay \
zoxide

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# Install asdcontrol for controlling brightness on Apple Displays # Install asdcontrol for controlling brightness on Apple Displays
if [ -z "$OMARCHY_BARE" ] && ! command -v asdcontrol &>/dev/null; then if ! command -v asdcontrol &>/dev/null; then
git clone https://github.com/nikosdion/asdcontrol.git /tmp/asdcontrol git clone https://github.com/nikosdion/asdcontrol.git /tmp/asdcontrol
cd /tmp/asdcontrol cd /tmp/asdcontrol
make make

6
install/packaging/fonts.sh Executable file
View File

@ -0,0 +1,6 @@
#!/bin/bash
# Omarchy logo in a font for Waybar use
mkdir -p ~/.local/share/fonts
cp ~/.local/share/omarchy/config/omarchy.ttf ~/.local/share/fonts/
fc-cache

Some files were not shown because too many files have changed in this diff Show More