Omarchy Dotfiles 完全指南:在~/.config中深度定制你的 Linux 桌面
【免费下载链接】omarchyBeautiful, Modern & Opinionated Linux项目地址: https://gitcode.com/GitHub_Trending/om/omarchy
Omarchy 把「系统默认」与「个人配置」清晰地一分为二:发行版自带的默认配置属于 pacman 包,用户的一切定制都应该落在~/.config下的 dotfiles 中。本文从这套分层心智模型出发,逐项讲解 Hyprland 合成器配置、Omarchy shell、hooks 事件钩子、菜单扩展与按键绑定重写的完整玩法,并结合本仓库源码,说明每一份文件实际是如何被加载、覆盖与生效的。读完你既能安全地长期自定义自己的 Omarchy,也知道在升级后如何保住自己的改动。
一、核心心智模型:~/.config是你的,/usr/share/omarchy是它的
Omarchy 的配置哲学在文档里讲得很直白:~/.config下的 dotfiles 被视为"你的文件",用于你的改动;而/usr/share/omarchy下的文件属于 Omarchy 自身,你不应该去动它。如果你需要改变/usr/share/omarchy里的任何值,正确做法是在~/.config里覆盖它,而不是原地修改。
原因很实在:/usr/share/omarchy的内容由 Omarchy 的 pacman 包管理,下次更新会被直接覆盖。把所有个人改动收敛到~/.config,系统升级时默认文件可以被安全地改进和重写,而你沉淀的定制则毫发无损。
这种"默认模板 + 用户覆盖"的分层设计,在仓库结构中一眼可见:
- config/ 存放的就是会落到用户
~/.config的参考/出厂配置:config/hypr/、config/omarchy/、config/foot/等目录结构与~/.config一一对应; - default/ 存放发行版默认的出厂文件(如
default/hypr/的 Omarchy 默认 Lua 模块、default/omarchy/omarchy-menu.jsonc)。
两者的加载关系在用户的 config/hypr/hyprland.lua 中体现得最清楚:
-- Omarchy 的 bootstrap 把路径初始化移出了用户配置。 dofile((os.getenv("OMARCHY_PATH") or "/usr/share/omarchy") .. "/default/hypr/bootstrap.lua") -- 加载 Omarchy 默认配置。 require("default.hypr.omarchy") -- 把你的个人覆盖写进下面这些文件,它们在 Omarchy 默认值之后加载, -- 这样包更新可以改进默认值而不用重写你的 ~/.config/hypr 文件。 require("hypr.monitors") require("hypr.input") require("hypr.bindings") require("hypr.looknfeel") require("hypr.autostart") -- 动态切换配置开关。 require("default.hypr.toggles")从源码结构看,Hyprland 的 Lua 配置是顺序执行 + 后写覆盖的:先require("default.hypr.omarchy")铺出默认行为,再依次 require 用户自己的五个文件,因此你在hypr/monitors.lua、hypr/input.lua等文件里写下的设置,会自然覆盖同名的默认项。同一份文件里还预告了两种全局开关(默认注释掉):
-- 禁用所有 Omarchy 默认按键绑定,然后在 hypr/bindings.lua 中自己添加。 -- omarchy_default_bindings = false -- -- 或者只禁用 Omarchy 预装应用/web 应用的绑定,保留核心窗口管理绑定: -- omarchy_preinstalled_bindings = false二、从 Omarchy 菜单直接编辑配置
最常见的编辑入口就是 Omarchy 菜单(Super + Space)。菜单里预置了指向关键配置文件的快捷入口,例如:
- Setup > Monitors— 编辑
~/.config/hypr/monitors.lua - Setup > Keybindings— 编辑
~/.config/hypr/bindings.lua - Setup > Input— 编辑
~/.config/hypr/input.lua - Setup > Config > [file]— 直接打开上面列出的任意配置文件
通过这种途径编辑的好处是:在你退出编辑器后,需要重启才能生效的进程会被自动重启。默认编辑器是 Neovim(记得用:wq保存退出!),如果想换成别的,可以到Setup > Defaults > Editor修改。
三、关键 dotfiles 一览与实战要点
文档给出了~/.config下最关键文件的速查表,逐条展开如下:
| 文件 | 作用 | 实战要点 |
|---|---|---|
~/.config/hypr/hyprland.lua | 主 Hyprland 配置,加载 Omarchy 默认值 + 下方你的覆盖文件 | 全局开关(禁用默认绑定)在此设置 |
~/.config/hypr/bindings.lua | 你的按键绑定及对默认值的覆盖 | o.bind/o.rebind/hl.unbind |
~/.config/hypr/monitors.lua | 显示器、分辨率与位置 | hl.monitor+GDK_SCALE |
~/.config/hypr/input.lua | 键盘布局、鼠标、触控板 | hl.config({ input = ... }) |
~/.config/hypr/looknfeel.lua | 窗口间距、边框、动画等观感 | hl.config({ general / decoration / animations ... }) |
~/.config/hypr/autostart.lua | 随会话额外启动的进程 | o.launch_on_start("...") |
~/.config/omarchy/shell.json | Omarchy shell:顶栏位置/布局/widgets,屏保/锁屏/空闲时间 | JSON 数组控制 bar layout |
~/.config/foot/foot.ini | 默认终端 foot 的配置 | 与 config/foot/foot.ini 对应 |
~/.XCompose | 快捷 emoji 与姓名/邮箱自动补全 | 改完需运行omarchy-restart-xcompose |
如果你积累了大量的个人微调,强烈建议把这些 dotfiles 纳入版本管理做备份——文档明确推荐用 GNU Stow 之类的工具来管理~/.config下的这套文件。
3.1 Hyprland 家族:monitors/input/looknfeel
显示器(monitors)。仓库中的 config/hypr/monitors.lua 展示了标准写法:先用hl.monitor({ output = "", mode = "preferred", position = "auto", scale = ... })定义主输出,再按需给特定输出写死参数:
-- 查看当前显示器与支持的分辨率:hyprctl monitors all local omarchy_monitor_scale = "auto" -- 接受小数(1.6/1.75),立即生效 hl.monitor({ output = "", mode = "preferred", position = "auto", scale = omarchy_monitor_scale }) -- 配置某个特定显示器 -- hl.monitor({ output = "DP-2", mode = "2560x1440@144", position = "0x0", scale = 1 }) -- 竖屏/旋转副屏(transform: 1 = 90°, 3 = 270°) -- hl.monitor({ output = "DP-2", mode = "preferred", position = "auto", scale = 1, transform = 1 })该文件还贴心地演示了GDK scale的处理:GDK_SCALE是 GTK 自绘 UI 的缩放因子,只接受整数,Omarchy 让 X11/XWayland 窗口保持原生分辨率以确保清晰,因此注释建议取显示器 scale 的最近整数(文件内示例为2),改完需重启应用才生效:
local omarchy_gdk_scale = 2 hl.env("GDK_SCALE", tostring(omarchy_gdk_scale))输入(input)。config/hypr/input.lua 全部以注释形式给出可复制的示例,覆盖键盘布局与切换(如kb_layout = "us,dk,eu"+grp:alts_toggle)、重复速率、NumLock 默认开启、鼠标灵敏度与关闭加速、以及触控板的自然滚动、双指点击右键、disable_while_typing等;还示范了按应用覆盖触控板滚动速度与三指手势切换工作区:
-- 例:多键盘布局,用左/右 Alt 切换 -- hl.config({ -- input = { -- kb_layout = "us,dk,eu", -- kb_options = "compose:caps,shift:both_capslock_cancel,grp:alts_toggle", -- repeat_rate = 40, -- repeat_delay = 250, -- numlock_by_default = true, -- sensitivity = 0.35, -- 鼠标/触控板灵敏度,默认 0 -- accel_profile = "flat", -- 关闭鼠标加速,默认 adaptive -- touchpad = { natural_scroll = true, clickfinger_behavior = true, scroll_factor = 0.4 }, -- }, -- }) -- 例:按应用设置触控板滚动速度 -- o.window("foot", { scroll_touchpad = 2.0 }) -- o.window("com.mitchellh.ghostty", { scroll_touchpad = 0.2 })观感(looknfeel)。config/hypr/looknfeel.lua 集中管理general(窗口间距gaps_in/gaps_out、边框border_size、甚至把布局换成 niri 风格侧滑的layout = "scrolling")、decoration(圆角rounding、失焦窗口变暗dim_inactive)、animations(一键enabled = false关动画)与layout(如宽屏下限制单窗口宽高比):
-- 例:无间隙、无边框、圆角、非交互窗口轻微变暗 -- hl.config({ -- general = { gaps_in = 0, gaps_out = 0, border_size = 0 }, -- decoration = { rounding = 8, dim_inactive = true, dim_strength = 0.15 }, -- animations = { enabled = false }, -- })3.2 Omarchy shell 配置:shell.json
~/.config/omarchy/shell.json是 Omarchy 桌面外壳(基于 Quickshell 的omarchy-shell)的配置文件,控制顶栏位置、布局与各 widget,以及屏保、锁屏与空闲计时。仓库出厂版本 config/omarchy/shell.json 内容如下:
{ "version": 1, "idle": { "screensaver": 150, "lock": 300 }, "bar": { "position": "top", "transparent": false, "centerAnchor": "omarchy.clock", "layout": { "left": [ { "id": "omarchy.menu" }, { "id": "omarchy.workspaces" } ], "center": [ { "id": "omarchy.indicators" }, { "id": "omarchy.clock", "format": "dddd HH:mm", "formatAlt": "d MMMM 'W'ww yyyy", "verticalFormat": "HH\n\u2014\nmm" }, { "id": "omarchy.keyboard-layout" }, { "id": "omarchy.weather" }, { "id": "omarchy.system-update" } ], "right": [ { "id": "omarchy.tray" }, { "id": "omarchy.agents" }, { "id": "omarchy.bluetooth" }, { "id": "omarchy.network" }, { "id": "omarchy.audio" }, { "id": "omarchy.monitor" }, { "id": "omarchy.power" } ] } }, "plugins": [] }对照 docs/omarchy-shell.md 中对shell.json的规则说明,可以提炼出几个关键语义:
- 顶栏位置与透明度:
bar.position决定顶栏在top/bottom/left/right哪个方向;transparent控制是否透明。 layout三段式:left/center/right各是一个 widget 数组,数组顺序即显示顺序。所有内置 widget 的 id 都带命名空间(omarchy.clock、omarchy.audio、omarchy.network…),避免与第三方插件冲突。- 每个 widget 一条目、设置内联:widget 的自定义选项(如 clock 的
format、formatAlt、verticalFormat)直接写在条目上,没有嵌套的config:子对象,也没有合并层——一旦你保存自定义shell.json,它就是权威配置。 - 空闲计时单位是秒:出厂值为
idle.screensaver = 150(150 秒无操作进屏保)、idle.lock = 300(300 秒锁屏)。 version: 1是必填字段。
另外注意一点:shell.json回答的是"shell 布局"问题,而主题的外观 token 由shell.toml回答;~/.config/omarchy/shell.toml会被 shell 实时监听,其键值优先于当前主题,因此omarchy display text size这类覆盖在切换主题后仍能保留。
四、随会话启动你自己的程序
如果希望某个程序在每次登录时都自动运行——同步守护进程、聊天应用或你自己的脚本——把它写进~/.config/hypr/autostart.lua:
o.launch_on_start("my-service")o.launch_on_start会把该命令作为会话的一部分启动,因此注销时它会被正确地一并清理。仓库的出厂文件 config/hypr/autostart.lua 中即为同一形态的注释示例。
五、在系统事件上挂接你自己的脚本:Hooks
Omarchy 会在若干关键时刻触发 hooks,你可以在每个事件上挂任意脚本,实现完全自动化的个人化响应。
5.1 存放位置与事件表
Hooks 存放在~/.config/omarchy/hooks/<event>.d/,每个事件一个目录,目录内每个可执行文件都会在事件发生时被执行。文档给出的事件一览:
| 事件 | 触发时机 | 传给脚本的参数 |
|---|---|---|
post-boot | 桌面启动完成后 | — |
post-update | omarchy update期间,包与迁移完成后 | — |
pre-refresh-pacman | omarchy refresh pacman重新同步包配置之前 | — |
theme-set | 主题切换之后 | 主题名在$1 |
font-set | 字体切换之后 | 字体名在$1 |
battery-low | 电池电量低时 | 电量百分比在$1 |
每个目录出厂时都带一个.sample文件,展示该事件 hook 的标准形态。仓库中与之一一对应的是 config/omarchy/hooks/ 下的六个示例目录,例如 show-update-notification.sample:
#!/bin/bash # 该 hook 在一次 Omarchy 系统更新完成后被调用。 # 启用它:把文件名中的 .sample 去掉即可。 # 示例:更新完成后显示通知。 # omarchy-notification-send -u low "Update Performed" "Your system is now up to date"5.2 激活与安装脚本
让一个 hook 生效有两种方式:
- 启用自带示例:把对应目录里的
.sample后缀去掉,脚本即被纳入执行列表。 - 安装自己写的脚本:使用
omarchy hook install <event> <script>,例如omarchy hook install post-boot ~/my-hook——该命令会把脚本复制进对应 hooks 目录并加上可执行位。
关于执行器的一个补充细节来自 default/agents/skills/omarchy/hooks.md:runner 会先执行平铺的~/.config/omarchy/hooks/<name>文件(如果存在),然后再遍历执行<name>.d/目录中的每个脚本。一个典型脚本骨架:
#!/bin/bash THEME_NAME=$1 echo "Theme changed to: $THEME_NAME" # 在这里追加你自己的动作六、扩展 Omarchy 菜单:extensions/omarchy-menu.jsonc
Omarchy 菜单(Super + Space)允许通过~/.config/omarchy/extensions/omarchy-menu.jsonc加入你自己的行。条目以点分 id为键,id 同时决定了它在菜单树中的位置:personal出现在根菜单,personal.notes出现在personal之内。文档原示例:
"personal": {"icon":"","label":"Personal"}, "personal.notes": {"icon":"","label":"Notes","action":"omarchy-launch-editor ~/notes"},复用已有 id 即可覆盖那一行而不是新增一行,所以替换默认菜单项同样简单。文件出厂时自带全部字段的注释文档——参考仓库的 config/omarchy/extensions/omarchy-menu.jsonc,可用字段完整列表如下:
| 字段 | 含义 |
|---|---|
icon | 图标列显示的 Nerd Font 字形 |
label | 可见行标题 |
action | 要运行的 Shell 命令;省略则本行作为子菜单 |
target | 要打开的既有子菜单 id(用于链接/别名) |
provider | shell 已定义的动态行源名称(如fonts) |
aliases | omarchy menu summon <name>的备用路径,同时可被搜索 |
description | 可选副标题与额外搜索文本 |
when | Shell 条件,失败时隐藏该行 |
checked | Shell 条件,成功时在行尾追加 ✓ |
仓库注释中还给出了"覆盖默认 About 行"的完整示范:
// 复用 about 这个 id 覆盖默认的 About 行为;已有字段会保留,未覆盖的字段原样生效 "about": {"icon":"","label":"About","action":"omarchy-launch-or-focus-tui \"zsh -c 'fastfetch; read -k 1'\""},七、Shell 导出、函数与别名:都放进~/.bashrc
Omarchy 自带了一批很顺手的内置别名与函数,但添加自己的也很常见。别名、函数和导出统一写在~/.bashrc里——这个文件在系统更新时不会被覆盖。如果你想改变任何 Omarchy 默认的别名或函数,同样可以安全地在这里追加覆盖,把默认值压掉即可。仓库中 Omarchy 自身的 shell 配置(default/bash 下的 aliases、functions、fns 等)可作为你扩展时的风格参考。
八、修改默认键绑定的正确姿势
Hyprland 的默认绑定全部由 Omarchy 预置,需要个性化时应改写~/.config/hypr/bindings.lua,而不是去动系统文件。文档给出了一个非常实际的例子——把默认绑定 Obsidian 的应用替换成 Joplin(先omarchy-pkg-add joplin-bin安装):
o.rebind("SUPER + SHIFT + O", "Joplin", "joplin-desktop")三个配套 API 的语义,仓库的 config/hypr/bindings.lua 中均有注释佐证:
o.rebind(keys, command, app):先移除该键位上已有的绑定,再添加替代绑定;与o.bind参数一致,也支持 launch helpers 与绑定选项。o.bind(keys, command, app):纯粹新增一个绑定,适合尚未被占用的键位。hl.unbind(keys):只移除默认绑定、不做替换(例如想彻底闲置某组合键时)。
几个可直接参考的示例:
-- 新增绑定(注释示例): -- o.bind("SUPER + SHIFT + R", "SSH", "alacritty -e ssh your-server") -- 替换默认绑定(把默认文件管理器换成 Flea): -- o.rebind("SUPER + SHIFT + F", "File manager", { launch = "flea" }) -- 只移除、不替换: -- hl.unbind("SUPER + SHIFT + B")排查既有绑定的好帮手是菜单里的keybindings面板——omarchy menu keybindings --print会打印当前全部绑定及说明。
如果你确实想深入研究或修改 Omarchy 内部文件,更安全的路径是切换到dev channel(Update > Channel > Dev):它会将 Omarchy 链接到~/omarchy下的源码 git checkout,这样你可以放心大胆地在本地改动。注意这是对"坚持要碰内部文件"场景的兜底方案,日常使用仍应遵守"默认值在~/.config覆盖"的原则。
九、搞砸了怎么一键还原
如果一通操作把配置改乱了,有两种方式恢复到出厂默认:
- 图形化:Omarchy 菜单中的Update > Config;
- 命令行:运行
omarchy reinstall configs,把~/.config下 Omarchy 管理的配置整体重置回默认值。
这一层"出厂重置"兜底正是分层配置模型给你的安全网——因为系统文件始终由包管理,重置永远不会把 Omarchy 本身弄坏。
小结
Omarchy 的定制路径可以概括为一句心法:默认属于/usr/share/omarchy,改动属于~/.config,hooks 挂进~/.config/omarchy/hooks/<event>.d/,一切可通过omarchy reinstall configs兜底还原。掌握这套 dotfiles 心智模型后,无论是调显示器、改键位、挂开机脚本、让主题切换时弹通知,还是往应用菜单里加自己的一行,都能以可持续、可升级、可备份的方式完成——这也正是 Omarchy 作为"有主见(Opinionated)的发行版"留给用户最自由的一块自留地。
【免费下载链接】omarchyBeautiful, Modern & Opinionated Linux项目地址: https://gitcode.com/GitHub_Trending/om/omarchy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考