Omarchy Dotfiles 完全指南:在 `~/.config` 中深度定制你的 Linux 桌面
2026/9/9 20:12:17 网站建设 项目流程

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.luahypr/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.jsonOmarchy 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.clockomarchy.audioomarchy.network…),避免与第三方插件冲突。
  • 每个 widget 一条目、设置内联:widget 的自定义选项(如 clock 的formatformatAltverticalFormat)直接写在条目上,没有嵌套的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-updateomarchy update期间,包与迁移完成后
pre-refresh-pacmanomarchy 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 生效有两种方式:

  1. 启用自带示例:把对应目录里的.sample后缀去掉,脚本即被纳入执行列表。
  2. 安装自己写的脚本:使用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(用于链接/别名)
providershell 已定义的动态行源名称(如fonts
aliasesomarchy menu summon <name>的备用路径,同时可被搜索
description可选副标题与额外搜索文本
whenShell 条件,失败时隐藏该行
checkedShell 条件,成功时在行尾追加 ✓

仓库注释中还给出了"覆盖默认 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询