diff --git a/home/dot_config/nvim/init.lua b/home/dot_config/nvim/init.lua index 71baf88..7472234 100644 --- a/home/dot_config/nvim/init.lua +++ b/home/dot_config/nvim/init.lua @@ -57,4 +57,43 @@ if vim.g.neovide then vim.g.neovide_input_macos_option_key_is_meta = "only_left" end -require("config.fcitx") +-- TODO: Refractor this part to submodules +-- 存储输入法状态的变量 +vim.g.input_layout = nil + +-- 退出插入模式时:记录当前输入法并切换到英文 +local function fcitx2en() + -- 使用 fcitx5-remote -n 获取当前输入法名称 + local current_layout = vim.fn.system("fcitx5-remote -n") + -- 去除换行符 + vim.g.input_layout = vim.trim(current_layout) + + -- 切换到英文输入法 + vim.fn.system("fcitx5-remote -s keyboard-us") +end + +-- 进入插入模式时:恢复之前的输入法状态 +local function fcitx2zh() + -- 如果之前记录了输入法状态,则恢复 + if vim.g.input_layout ~= nil and vim.g.input_layout ~= "" then + vim.fn.system("fcitx5-remote -s " .. vim.g.input_layout) + end +end + +-- 设置 ttimeoutlen +vim.opt.ttimeoutlen = 150 + +-- 创建自动命令组 +local fcitx_group = vim.api.nvim_create_augroup("FcitxToggle", { clear = true }) + +-- 退出插入模式时切换到英文并记录状态 +vim.api.nvim_create_autocmd("InsertLeave", { + group = fcitx_group, + callback = fcitx2en, +}) + +-- 进入插入模式时恢复之前的输入法 +vim.api.nvim_create_autocmd("InsertEnter", { + group = fcitx_group, + callback = fcitx2zh, +}) diff --git a/home/dot_config/nvim/lua/config/colors.lua b/home/dot_config/nvim/lua/config/colors.lua index 95f62e4..6b143f9 100644 --- a/home/dot_config/nvim/lua/config/colors.lua +++ b/home/dot_config/nvim/lua/config/colors.lua @@ -1,7 +1,7 @@ -- This file *currently* contains the colorscheme for lualine (status line) local M = {} --- NOTE: Currently only handles catppuccin latte/mocha palettes +-- TODO: Change the palatte when the colorscheme changes if vim.g.colors_name == "catppuccin-latte" then M.scheme = require("catppuccin.palettes.latte") diff --git a/home/dot_config/nvim/lua/config/fcitx.lua b/home/dot_config/nvim/lua/config/fcitx.lua deleted file mode 100644 index 9f94c67..0000000 --- a/home/dot_config/nvim/lua/config/fcitx.lua +++ /dev/null @@ -1,27 +0,0 @@ -vim.g.input_layout = nil - -local function fcitx2en() - local current_layout = vim.fn.system("fcitx5-remote -n") - vim.g.input_layout = vim.trim(current_layout) - vim.fn.system("fcitx5-remote -s keyboard-us") -end - -local function fcitx2zh() - if vim.g.input_layout ~= nil and vim.g.input_layout ~= "" then - vim.fn.system("fcitx5-remote -s " .. vim.g.input_layout) - end -end - -vim.opt.ttimeoutlen = 150 - -local fcitx_group = vim.api.nvim_create_augroup("FcitxToggle", { clear = true }) - -vim.api.nvim_create_autocmd("InsertLeave", { - group = fcitx_group, - callback = fcitx2en, -}) - -vim.api.nvim_create_autocmd("InsertEnter", { - group = fcitx_group, - callback = fcitx2zh, -}) diff --git a/home/dot_config/nvim/lua/plugins/dap.lua b/home/dot_config/nvim/lua/plugins/dap.lua index 37c5cc7..1258bee 100644 --- a/home/dot_config/nvim/lua/plugins/dap.lua +++ b/home/dot_config/nvim/lua/plugins/dap.lua @@ -1,3 +1,4 @@ +-- TODO: -- Debugger setups return { { diff --git a/home/dot_config/nvim/lua/plugins/mod/lualine/components.lua b/home/dot_config/nvim/lua/plugins/mod/lualine/components.lua index c95df8d..5770894 100644 --- a/home/dot_config/nvim/lua/plugins/mod/lualine/components.lua +++ b/home/dot_config/nvim/lua/plugins/mod/lualine/components.lua @@ -115,6 +115,7 @@ M.progress = { "progress", } +-- TODO: Implement orgmode M.orgmode = { function() return _G.orgmode.statusline() diff --git a/nixcfgs/flake.lock b/nixcfgs/flake.lock index 20dccce..bb80f50 100644 --- a/nixcfgs/flake.lock +++ b/nixcfgs/flake.lock @@ -100,11 +100,11 @@ ] }, "locked": { - "lastModified": 1772764582, - "narHash": "sha256-hSwjmpXHFqzSXrndVekA0IheKrbC7wi0IbfZTYwlmXw=", + "lastModified": 1771987897, + "narHash": "sha256-5pNQFGxG3fxS9pGnNBJjT76veotKIKq2XpAVFGAhCdI=", "owner": "caelestia-dots", "repo": "cli", - "rev": "4bcd42f482d038b98145b0b03388244b68b7d35d", + "rev": "b0d68f0a1c48fa138d6fde94dcbecea801a86a01", "type": "github" }, "original": { @@ -122,11 +122,11 @@ "quickshell": "quickshell" }, "locked": { - "lastModified": 1773574600, - "narHash": "sha256-RsBgiq93SjlYVHSYtz/ESALa7WgbLu+xcH0oTJRjztQ=", + "lastModified": 1772330657, + "narHash": "sha256-cWblprYsDUeAWA57xAqxIjNxXvDI/rqYn6TFp2OPi/k=", "owner": "caelestia-dots", "repo": "shell", - "rev": "377778596acf90451d1bd19f0c03b5f1c0467958", + "rev": "278fd4a4ed1bfb42c3fe197ff38b587539c012aa", "type": "github" }, "original": { @@ -140,11 +140,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1773403535, - "narHash": "sha256-47MZaFrHxNO8tVUAmtVnerXUw2WWVluBOiU9MulN/yM=", + "lastModified": 1772153824, + "narHash": "sha256-T65qXmlcD9qFpPTi+mOXsn4dIkO2N8Ls67nqmuzepv0=", "owner": "catppuccin", "repo": "nix", - "rev": "d45b5665cc638bad1b794350de02f4dd41b0bb47", + "rev": "4b0f5b7bf7b3eeb484d49524f3c9791864ab9362", "type": "github" }, "original": { @@ -174,11 +174,11 @@ "systems": "systems_2" }, "locked": { - "lastModified": 1773079031, - "narHash": "sha256-RvCzINnVISBT3d0F1DoIcQFbQsbRJISW9qZeKTzmNaA=", + "lastModified": 1770910218, + "narHash": "sha256-IyHoHbhLFuIgFG+n7dqHwJaXuNnRaEsxCfAsfudV1KY=", "owner": "abenz1267", "repo": "elephant", - "rev": "53afe39cef252010f7c55bd33c5bae6dd50dcf0c", + "rev": "c354a596ec7a7e34e9c26478dc7ef9680bc23e6d", "type": "github" }, "original": { @@ -195,11 +195,11 @@ ] }, "locked": { - "lastModified": 1773537505, - "narHash": "sha256-MsOpMvnnUjYPAtyApi93HcoHD91pAiCXHrjOCG3F7zY=", + "lastModified": 1772672954, + "narHash": "sha256-OGEqiNZnLjQd0R2Ei+0QW9Y+t2MZy8vAOS8caNiQxbw=", "owner": "petrkozorezov", "repo": "firefox-addons-nix", - "rev": "4e6bf49ad4fb8c9ddbb1b4fe2ef63b1b4ab4609a", + "rev": "8c947cfbce2f6a769c0fcb736fd2eb14ff83b64b", "type": "github" }, "original": { @@ -285,11 +285,11 @@ ] }, "locked": { - "lastModified": 1772408722, - "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", + "lastModified": 1765835352, + "narHash": "sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", + "rev": "a34fae9c08a15ad73f295041fec82323541400a9", "type": "github" }, "original": { @@ -440,11 +440,11 @@ ] }, "locked": { - "lastModified": 1771131391, - "narHash": "sha256-HPBNYf7HiKtBVy7/69vKpLYHX6wTcUxndxmybzDlXP8=", + "lastModified": 1765774562, + "narHash": "sha256-UQhfCggNGDc7eam+EittlYmeW89CZVT1KkFIHZWBH7k=", "owner": "hercules-ci", "repo": "hercules-ci-effects", - "rev": "0b152e0f7c5cc265a529cd63374b80e2771b207b", + "rev": "edcbb19948b6caf1700434e369fde6ff9e6a3c93", "type": "github" }, "original": { @@ -460,11 +460,11 @@ ] }, "locked": { - "lastModified": 1773608492, - "narHash": "sha256-QZteyExJYSQzgxqdsesDPbQgjctGG7iKV/6ooyQPITk=", + "lastModified": 1772633327, + "narHash": "sha256-jl+DJB2DUx7EbWLRng+6HNWW/1/VQOnf0NsQB4PlA7I=", "owner": "nix-community", "repo": "home-manager", - "rev": "9a40ec3b78fc688d0908485887d355caa5666d18", + "rev": "5a75730e6f21ee624cbf86f4915c6e7489c74acc", "type": "github" }, "original": { @@ -498,11 +498,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1773577199, - "narHash": "sha256-Z77lGBRlueA+igtScByJ0soMRnEy5T/XG9w661OCPaw=", + "lastModified": 1772698812, + "narHash": "sha256-7+K/VaZ7TXUeUGSYshg8wC3UsRZHB+M4x6r38Q1B79c=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "afc45f69929e5b5ab23d903b24532cfe718de6be", + "rev": "5641625ef950f024e3e0e3f38bb91f876290c0be", "type": "github" }, "original": { @@ -531,11 +531,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1773130184, - "narHash": "sha256-3bwx4WqCB06yfQIGB+OgIckOkEDyKxiTD5pOo4Xz2rI=", + "lastModified": 1772207631, + "narHash": "sha256-Jkkg+KqshFO3CbTszVVpkKN2AOObYz+wMsM3ONo1z5g=", "owner": "YaLTeR", "repo": "niri", - "rev": "b07bde3ee82dd73115e6b949e4f3f63695da35ea", + "rev": "e708f546153f74acf33eb183b3b2992587a701e5", "type": "github" }, "original": { @@ -551,11 +551,11 @@ ] }, "locked": { - "lastModified": 1773000227, - "narHash": "sha256-zm3ftUQw0MPumYi91HovoGhgyZBlM4o3Zy0LhPNwzXE=", + "lastModified": 1772379624, + "narHash": "sha256-NG9LLTWlz4YiaTAiRGChbrzbVxBfX+Auq4Ab/SWmk4A=", "owner": "nix-darwin", "repo": "nix-darwin", - "rev": "da529ac9e46f25ed5616fd634079a5f3c579135f", + "rev": "52d061516108769656a8bd9c6e811c677ec5b462", "type": "github" }, "original": { @@ -587,11 +587,11 @@ ] }, "locked": { - "lastModified": 1773552174, - "narHash": "sha256-mHSRNrT1rjeYBgkAlj07dW3+1nFEgAd8Gu6lgyfT9DU=", + "lastModified": 1772341813, + "narHash": "sha256-/PQ0ubBCMj/MVCWEI/XMStn55a8dIKsvztj4ZVLvUrQ=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "8faeb68130df077450451b6734a221ba0d6cde42", + "rev": "a2051ff239ce2e8a0148fa7a152903d9a78e854f", "type": "github" }, "original": { @@ -612,11 +612,11 @@ ] }, "locked": { - "lastModified": 1773607491, - "narHash": "sha256-EQ4R6eSwnlpVjRrcfnIPlenCrnumkKU5mA0MkzkYaMo=", + "lastModified": 1773046894, + "narHash": "sha256-Hf5Q6gkaSXojSu9neW0dxvefUc3aA2T8ZQLTdGKIGOU=", "owner": "openclaw", "repo": "nix-openclaw", - "rev": "4136401fbfbed632df86825dfdd4bac2f8d2b285", + "rev": "b39fc7f507097858273bda50834c6ab7367d7b09", "type": "github" }, "original": { @@ -630,11 +630,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1773561580, - "narHash": "sha256-wT0bKTp45YnMkc4yXQvk943Zz/rksYiIjEXGdWzxnic=", + "lastModified": 1773038583, + "narHash": "sha256-E9Z/7U2ozB7nvCUZp9QlWllFl1yNXaInnuBSiRV5qh4=", "owner": "openclaw", "repo": "nix-steipete-tools", - "rev": "cd4c429ff3b3aaef9f92e59812cf2baf5704b86f", + "rev": "561592b0b1aa9b53595618fd867be633a192da54", "type": "github" }, "original": { @@ -647,15 +647,14 @@ "inputs": { "flake-compat": "flake-compat", "flake-parts": "flake-parts_2", - "nixpkgs": "nixpkgs_6", - "nixpkgs-nixcord": "nixpkgs-nixcord" + "nixpkgs": "nixpkgs_6" }, "locked": { - "lastModified": 1773597570, - "narHash": "sha256-A6KsirR9kxR1wVFTr8aagk5vUT3rvKTf79Qht6YkxUA=", + "lastModified": 1772671545, + "narHash": "sha256-7CFg6ppK000u+bd87+6HSVkFSC8PKm/N22MMZMtYla4=", "owner": "kaylorben", "repo": "nixcord", - "rev": "1cc0ddb766e459b7187e6aeb8b2e046d37361dc4", + "rev": "9c048e21aa13ab529f00ab1f13c3793ba0b49b7c", "type": "github" }, "original": { @@ -673,11 +672,11 @@ ] }, "locked": { - "lastModified": 1773434720, - "narHash": "sha256-mK4yEIF+qF7qtAzC5x8GU8kh5lY4v397azT+m1nBvRQ=", + "lastModified": 1769288622, + "narHash": "sha256-GaDPnzDQAx5WRi12XVttCHsVw0VkOMYNpniT7KHYNfk=", "owner": "nixpak", "repo": "nixpak", - "rev": "1bf4e77b07ce445779894f17ab21016db5f58a4e", + "rev": "4276954ad4f877d79801fd8952af38a3370bcb65", "type": "github" }, "original": { @@ -732,29 +731,13 @@ "type": "github" } }, - "nixpkgs-nixcord": { - "locked": { - "lastModified": 1773222311, - "narHash": "sha256-BHoB/XpbqoZkVYZCfXJXfkR+GXFqwb/4zbWnOr2cRcU=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "0590cd39f728e129122770c029970378a79d076a", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-25.11", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs-stable": { "locked": { - "lastModified": 1773524153, - "narHash": "sha256-Jms57zzlFf64ayKzzBWSE2SGvJmK+NGt8Gli71d9kmY=", + "lastModified": 1772598333, + "narHash": "sha256-YaHht/C35INEX3DeJQNWjNaTcPjYmBwwjFJ2jdtr+5U=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e9f278faa1d0c2fc835bd331d4666b59b505a410", + "rev": "fabb8c9deee281e50b1065002c9828f2cf7b2239", "type": "github" }, "original": { @@ -814,11 +797,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1773122722, - "narHash": "sha256-FIqHByVqxCprNjor1NqF80F2QQoiiyqanNNefdlvOg4=", + "lastModified": 1771848320, + "narHash": "sha256-0MAd+0mun3K/Ns8JATeHT1sX28faLII5hVLq0L3BdZU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "62dc67aa6a52b4364dd75994ec00b51fbf474e50", + "rev": "2fc6539b481e1d2569f25f8799236694180c0993", "type": "github" }, "original": { @@ -846,11 +829,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1773389992, - "narHash": "sha256-wvfdLLWJ2I9oEpDd9PfMA8osfIZicoQ5MT1jIwNs9Tk=", + "lastModified": 1772624091, + "narHash": "sha256-QKyJ0QGWBn6r0invrMAK8dmJoBYWoOWy7lN+UHzW1jc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c06b4ae3d6599a672a6210b7021d699c351eebda", + "rev": "80bdc1e5ce51f56b19791b52b2901187931f5353", "type": "github" }, "original": { @@ -878,11 +861,11 @@ }, "nixpkgs_6": { "locked": { - "lastModified": 1773222311, - "narHash": "sha256-BHoB/XpbqoZkVYZCfXJXfkR+GXFqwb/4zbWnOr2cRcU=", + "lastModified": 1772465433, + "narHash": "sha256-ywy9troNEfpgh0Ee+zaV1UTgU8kYBVKtvPSxh6clYGU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0590cd39f728e129122770c029970378a79d076a", + "rev": "c581273b8d5bdf1c6ce7e0a54da9841e6a763913", "type": "github" }, "original": { @@ -894,11 +877,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1773507054, - "narHash": "sha256-Q8U5VXgrcxmCxPtCCJCIZkcAX3FCZwGh1GNVIXxMND0=", + "lastModified": 1772674223, + "narHash": "sha256-/suKbHSaSmuC9UY7G0VRQ3aO+QKqxAQPQ19wG7QNkF8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e80236013dc8b77aa49ca90e7a12d86f5d8d64c9", + "rev": "66d9241e3dc2296726dc522e62dbfe89c7b449f3", "type": "github" }, "original": { @@ -910,11 +893,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1773389992, - "narHash": "sha256-wvfdLLWJ2I9oEpDd9PfMA8osfIZicoQ5MT1jIwNs9Tk=", + "lastModified": 1772624091, + "narHash": "sha256-QKyJ0QGWBn6r0invrMAK8dmJoBYWoOWy7lN+UHzW1jc=", "owner": "nixos", "repo": "nixpkgs", - "rev": "c06b4ae3d6599a672a6210b7021d699c351eebda", + "rev": "80bdc1e5ce51f56b19791b52b2901187931f5353", "type": "github" }, "original": { @@ -946,11 +929,11 @@ "nixpkgs": "nixpkgs_8" }, "locked": { - "lastModified": 1773608735, - "narHash": "sha256-dqaylgm5x/cjyqo/V1kAsiyQQ5S6/Kc8QGBAUem9nlg=", + "lastModified": 1772725591, + "narHash": "sha256-I5WiAHsTkgUNOEtNvysNC7zVt4VNV0Ve3qsuiTQ9RiI=", "owner": "nix-community", "repo": "NUR", - "rev": "21d9c792956edffe574411dcf08ea1429175e07a", + "rev": "3567b1d67fc040f0a9206b1824069b68fe172f05", "type": "github" }, "original": { @@ -1015,11 +998,11 @@ ] }, "locked": { - "lastModified": 1772925576, - "narHash": "sha256-mMoiXABDtkSJxCYDrkhJ/TrrJf5M46oUfIlJvv2gkZ0=", + "lastModified": 1771926182, + "narHash": "sha256-QbXuSLhiSxOq6ydBL3+KGe1aiYWBW+e3J6qjJZaRMq0=", "ref": "refs/heads/master", - "rev": "15a84097653593dd15fad59a56befc2b7bdc270d", - "revCount": 750, + "rev": "cddb4f061bab495f4473ca5f2c571b6c710efef7", + "revCount": 744, "type": "git", "url": "https://git.outfoxxed.me/outfoxxed/quickshell" }, @@ -1061,11 +1044,11 @@ ] }, "locked": { - "lastModified": 1773550941, - "narHash": "sha256-wa/++bL2QeMUreNFBZEWluQfOYB0MnQIeGNMuaX9sfs=", + "lastModified": 1772495394, + "narHash": "sha256-hmIvE/slLKEFKNEJz27IZ8BKlAaZDcjIHmkZ7GCEjfw=", "owner": "Mic92", "repo": "sops-nix", - "rev": "c469b6885f0dcd5c7c56bd935a0f08dbcd9e79e1", + "rev": "1d9b98a29a45abe9c4d3174bd36de9f28755e3ff", "type": "github" }, "original": { @@ -1286,11 +1269,11 @@ "systems": "systems_6" }, "locked": { - "lastModified": 1773212610, - "narHash": "sha256-jYvDe44MLx444BfiO1EtCKgHoKfXeIG1DvAw7P2qCrY=", + "lastModified": 1771062828, + "narHash": "sha256-y1jBFFO0u+V21y3YldHZozrDwVJVrdC+o3c4M8/rasU=", "owner": "abenz1267", "repo": "walker", - "rev": "04ec7aa1b0cf2524370d99d43283c3050178a813", + "rev": "19b1104585305e0806b842af341630f72038a4b9", "type": "github" }, "original": { @@ -1357,11 +1340,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1773499041, - "narHash": "sha256-XZ4/tVdLeAYDgKe4JD4C7yYUKydMxwt8c2j6APFWcIc=", + "lastModified": 1772429643, + "narHash": "sha256-M+bAeCCcjBnVk6w/4dIVvXvpJwOKnXjwi/lDbaN6Yws=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "309d8e2a29953f7465dc14c939e2afe4682c0aa9", + "rev": "10f985b84cdbcc3bbf35b3e7e43d1b2a84fa9ce2", "type": "github" }, "original": { @@ -1377,11 +1360,11 @@ ] }, "locked": { - "lastModified": 1773290160, - "narHash": "sha256-u09eF4Oafi+OIbTtKe/EWil26q1glcTATiSA7dF1oCI=", + "lastModified": 1772685307, + "narHash": "sha256-5xthZHeqwBeXNhnRIlxnCuaZLky0SZ6vQsxtd+eqhTU=", "owner": "youwen5", "repo": "zen-browser-flake", - "rev": "c7cb51b30960757ed9fb8eb28567b32585d0a688", + "rev": "dc92d88524ee83308795bc90f6a9f1d965265aaa", "type": "github" }, "original": { diff --git a/nixcfgs/hosts/zephyrus/default.nix b/nixcfgs/hosts/zephyrus/default.nix index 0873eca..1b95fd5 100644 --- a/nixcfgs/hosts/zephyrus/default.nix +++ b/nixcfgs/hosts/zephyrus/default.nix @@ -10,7 +10,6 @@ ../../modules/nixos ../../modules/nixos/core/nix-ld.nix ../../modules/nixos/core/nftables.nix - ../../modules/nixos/core/binfmt.nix # this is a laptop ../../modules/nixos/desktop @@ -46,10 +45,7 @@ # services ../../modules/nixos/services/docker.nix - ../../modules/nixos/services/syncthing.nix - ../../modules/nixos/services/tailscale.nix - # TODO: Configure restic backup (see the file for setup instructions) - # ../../modules/nixos/services/restic.nix + ../../modules/nixos/services/exp.nix ]; # Hostname diff --git a/nixcfgs/modules/home/do-not-track.nix b/nixcfgs/modules/home/do-not-track.nix index e9188a8..476e411 100644 --- a/nixcfgs/modules/home/do-not-track.nix +++ b/nixcfgs/modules/home/do-not-track.nix @@ -1,4 +1,15 @@ {...}: { # See: https://consoledonottrack.com/ - home.sessionVariables = import ../lib/do-not-track-vars.nix; + home.sessionVariables = { + DO_NOT_TRACK = "1"; + GATSBY_TELEMETRY_DISABLED = "1"; + HOMEBREW_NO_ANALYTICS = "1"; + STNOUPGRADE = "1"; + DOTNET_CLI_TELEMETRY_OPTOUT = "1"; + SAM_CLI_TELEMETRY = "0"; + AZURE_CORE_COLLECT_TELEMETRY = "0"; + GEMINI_TELEMETRY_ENABLED = "false"; + SCARF_NO_ANALYTICS = "true"; + ANONYMIZED_TELEMETRY = "false"; + }; } diff --git a/nixcfgs/users/js0ny/programs/media/cider-2/lib.nix b/nixcfgs/modules/home/programs/cider-2.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/media/cider-2/lib.nix rename to nixcfgs/modules/home/programs/cider-2.nix diff --git a/nixcfgs/modules/lib/do-not-track-vars.nix b/nixcfgs/modules/lib/do-not-track-vars.nix deleted file mode 100644 index 390c15f..0000000 --- a/nixcfgs/modules/lib/do-not-track-vars.nix +++ /dev/null @@ -1,14 +0,0 @@ -# Shared telemetry opt-out variables -# See: https://consoledonottrack.com/ -{ - DO_NOT_TRACK = "1"; - GATSBY_TELEMETRY_DISABLED = "1"; - HOMEBREW_NO_ANALYTICS = "1"; - STNOUPGRADE = "1"; - DOTNET_CLI_TELEMETRY_OPTOUT = "1"; - SAM_CLI_TELEMETRY = "0"; - AZURE_CORE_COLLECT_TELEMETRY = "0"; - GEMINI_TELEMETRY_ENABLED = "false"; - SCARF_NO_ANALYTICS = "true"; - ANONYMIZED_TELEMETRY = "false"; -} diff --git a/nixcfgs/modules/lib/mergetools.nix b/nixcfgs/modules/lib/mergetools.nix deleted file mode 100644 index 7535e90..0000000 --- a/nixcfgs/modules/lib/mergetools.nix +++ /dev/null @@ -1,188 +0,0 @@ -# mergetools.nix — Dual-mode config merge library -# -# Supports both Home Manager ("home") and NixOS system-level ("system") modes. -# All targets are ABSOLUTE paths regardless of mode. -# -# Usage (home mode — default): -# mergetools = import ../../modules/lib/mergetools.nix { inherit pkgs lib config; }; -# myConfig = mergetools.mkMergedJson { -# name = "my-config"; -# target = "${config.home.homeDirectory}/.config/app/config.json"; -# settings = { key = "value"; }; -# }; -# # Then: imports = [ myConfig ]; -# -# Usage (system mode): -# mergetools = import ../../modules/lib/mergetools.nix { inherit pkgs lib config; }; -# myConfig = mergetools.mkMergedJson { -# name = "my-config"; -# target = "/var/lib/myapp/config.json"; -# settings = { key = "value"; }; -# mode = "system"; -# # owner = "myapp"; # default: "root" -# # group = "myapp"; # default: "root" -# # permissions = "0640"; # default: "0644" -# }; -# # Then: imports = [ myConfig ]; -{ - config, - lib, - pkgs, - ... -}: let - mkForceVar = force: - if force - then "true" - else "false"; - - # Derive a safe relative path for home.file from an absolute target. - # Strips the leading $HOME/ to get the relative portion. - # e.g., "/home/js0ny/.config/foo" -> ".config/foo" - stripHomePrefix = target: let - homeDir = config.home.homeDirectory; - homeDirSlash = homeDir + "/"; - len = builtins.stringLength homeDirSlash; - in - if lib.hasPrefix homeDirSlash target - then builtins.substring len (builtins.stringLength target - len) target - else builtins.abort "mergetools (home mode): target '${target}' must start with '${homeDirSlash}'"; - - # ── Home mode ────────────────────────────────────────────────────── - - mkHomeMerge = { - name, - target, - patchContent, - mergeCmdStr, - force, - emptyInit, - }: let - relTarget = stripHomePrefix target; - patchFile = "${relTarget}.nix-managed"; - in { - home.file."${patchFile}".text = patchContent; - - home.activation."merge-${name}" = lib.hm.dag.entryAfter ["writeBoundary"] '' - TARGET="${target}" - PATCH="$HOME/${patchFile}" - FORCE="${mkForceVar force}" - - if [ -f "$TARGET" ] || [ "$FORCE" = "true" ]; then - if [ -f "$PATCH" ]; then - verboseEcho "Merging Nix managed config into: $TARGET" - run mkdir -p "$(dirname "$TARGET")" - if [ ! -f "$TARGET" ]; then - echo '${emptyInit}' > "$TARGET" - fi - run ${mergeCmdStr} - fi - else - verboseEcho "Skipping merge for $TARGET: file missing and force=false" - fi - ''; - }; - - # ── System mode ──────────────────────────────────────────────────── - - mkSystemMerge = { - name, - target, - patchContent, - mergeCmdStr, - force, - emptyInit, - owner ? "root", - group ? "root", - permissions ? "0644", - }: let - patchFile = pkgs.writeText "${name}.nix-managed" patchContent; - in { - system.activationScripts."merge-${name}" = lib.stringAfter ["etc"] '' - TARGET="${target}" - PATCH="${patchFile}" - FORCE="${mkForceVar force}" - - if [ -f "$TARGET" ] || [ "$FORCE" = "true" ]; then - echo "mergetools: Merging Nix managed config into: $TARGET" - mkdir -p "$(dirname "$TARGET")" - if [ ! -f "$TARGET" ]; then - echo '${emptyInit}' > "$TARGET" - fi - ${mergeCmdStr} - chown ${owner}:${group} "$TARGET" - chmod ${permissions} "$TARGET" - else - echo "mergetools: Skipping merge for $TARGET: file missing and force=false" - fi - ''; - }; - - # ── Dispatch ─────────────────────────────────────────────────────── - - mkMerge = {mode ? "home", ...} @ args: let - # Strip mode-irrelevant attrs before passing - homeArgs = builtins.removeAttrs args ["mode" "owner" "group" "permissions"]; - systemArgs = builtins.removeAttrs args ["mode"]; - in - if mode == "home" - then mkHomeMerge homeArgs - else if mode == "system" - then mkSystemMerge systemArgs - else builtins.abort "mergetools: unknown mode '${mode}', expected 'home' or 'system'"; - - # ── Public API ───────────────────────────────────────────────────── - - mkMergedYaml = { - name, - target, - settings, - force ? false, - mode ? "home", - owner ? "root", - group ? "root", - permissions ? "0644", - }: - mkMerge { - inherit name target mode force owner group permissions; - patchContent = lib.generators.toYAML {} settings; - # $TARGET and $PATCH are shell variables set in the activation script - mergeCmdStr = ''${pkgs.yq-go}/bin/yq -i -oy -P ". *= load(\"$PATCH\")" "$TARGET"''; - emptyInit = "{}"; - }; - - mkMergedJson = { - name, - target, - settings, - force ? false, - mode ? "home", - owner ? "root", - group ? "root", - permissions ? "0644", - }: - mkMerge { - inherit name target mode force owner group permissions; - patchContent = builtins.toJSON settings; - mergeCmdStr = ''${pkgs.yq-go}/bin/yq -i -o json -P --indent 2 ". *= load(\"$PATCH\")" "$TARGET"''; - emptyInit = "{}"; - }; - - mkMergedIni = { - name, - target, - settings, - force ? false, - mode ? "home", - owner ? "root", - group ? "root", - permissions ? "0644", - }: - mkMerge { - inherit name target mode force owner group permissions; - patchContent = lib.generators.toINI {} settings; - mergeCmdStr = ''${pkgs.crudini}/bin/crudini --merge "$TARGET" < "$PATCH"''; - emptyInit = ""; - }; -in { - inherit mkMergedYaml mkMergedJson mkMergedIni; -} diff --git a/nixcfgs/modules/nixos/core/binfmt.nix b/nixcfgs/modules/nixos/core/binfmt.nix deleted file mode 100644 index 4258919..0000000 --- a/nixcfgs/modules/nixos/core/binfmt.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - boot.binfmt.emulatedSystems = ["aarch64-linux"]; -} diff --git a/nixcfgs/modules/nixos/core/do-not-track.nix b/nixcfgs/modules/nixos/core/do-not-track.nix index 87e92dd..edee396 100644 --- a/nixcfgs/modules/nixos/core/do-not-track.nix +++ b/nixcfgs/modules/nixos/core/do-not-track.nix @@ -1,4 +1,15 @@ {...}: { # See: https://consoledonottrack.com/ - environment.variables = import ../../lib/do-not-track-vars.nix; + environment.variables = { + DO_NOT_TRACK = "1"; + GATSBY_TELEMETRY_DISABLED = "1"; + HOMEBREW_NO_ANALYTICS = "1"; + STNOUPGRADE = "1"; + DOTNET_CLI_TELEMETRY_OPTOUT = "1"; + SAM_CLI_TELEMETRY = "0"; + AZURE_CORE_COLLECT_TELEMETRY = "0"; + GEMINI_TELEMETRY_ENABLED = "false"; + SCARF_NO_ANALYTICS = "true"; + ANONYMIZED_TELEMETRY = "false"; + }; } diff --git a/nixcfgs/modules/nixos/desktop/host-machine.nix b/nixcfgs/modules/nixos/desktop/host-machine.nix index 43c2c84..af2d1bb 100644 --- a/nixcfgs/modules/nixos/desktop/host-machine.nix +++ b/nixcfgs/modules/nixos/desktop/host-machine.nix @@ -2,7 +2,6 @@ imports = [ ./xremap.nix ./diskutil.nix - ../hardware/pipewire.nix ]; # Use the systemd-boot EFI boot loader. boot.loader.systemd-boot.enable = true; diff --git a/nixcfgs/modules/nixos/hardware/pipewire.nix b/nixcfgs/modules/nixos/hardware/pipewire.nix deleted file mode 100644 index bf60492..0000000 --- a/nixcfgs/modules/nixos/hardware/pipewire.nix +++ /dev/null @@ -1,19 +0,0 @@ -{...}: { - environment.etc."wireplumber/wireplumber.conf.d/51-rename-alsa-devices.conf".text = '' - - monitor.alsa.rules = [ - { - matches = [ - { - node.name = "alsa_input.pci-0000_65_00.6.analog-stereo" - } - ] - actions = { - update-props = { - node.description = "内置麦克风" - } - } - } - ] - ''; -} diff --git a/nixcfgs/modules/nixos/services/syncthing.nix b/nixcfgs/modules/nixos/services/exp.nix similarity index 56% rename from nixcfgs/modules/nixos/services/syncthing.nix rename to nixcfgs/modules/nixos/services/exp.nix index b1af04b..ad7a3b7 100644 --- a/nixcfgs/modules/nixos/services/syncthing.nix +++ b/nixcfgs/modules/nixos/services/exp.nix @@ -1,3 +1,4 @@ {...}: { services.syncthing.enable = true; + services.tailscale.enable = true; } diff --git a/nixcfgs/modules/nixos/services/restic.nix b/nixcfgs/modules/nixos/services/restic.nix deleted file mode 100644 index 50cd18c..0000000 --- a/nixcfgs/modules/nixos/services/restic.nix +++ /dev/null @@ -1,82 +0,0 @@ -# TODO: Configure restic backup -# -# This is a skeleton for services.restic.backups. -# NixOS provides `services.restic.backups.` which creates systemd -# timers that run restic backup on a schedule. -# -# Steps to complete: -# 1. Add a restic repository password to sops secrets: -# In secrets/secrets.yaml, add: -# restic_repo_password: "your-secure-password" -# Then reference it below via sops.secrets."RESTIC_REPO_PASSWORD" -# -# 2. Choose a backup repository backend and set `repository`: -# - Local: "/mnt/backup/restic-repo" -# - SFTP: "sftp:user@host:/path/to/repo" -# - S3: "s3:https://s3.amazonaws.com/bucket-name" -# - B2: "b2:bucket-name:/" -# - Rclone: "rclone:remote:path" -# -# 3. For cloud backends, add credential env vars: -# - S3: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY -# - B2: B2_ACCOUNT_ID, B2_ACCOUNT_KEY -# Store these in sops and pass them via `environmentFile` -# -# 4. Set `paths` to directories you want to back up -# -# 5. Set `exclude` patterns for files to skip -# -# 6. Set `timerConfig` for backup schedule (systemd timer syntax) -# -# 7. Optionally configure `pruneOpts` for automatic old snapshot cleanup -# -# 8. Initialize the repo: `restic -r init` -# -{config, ...}: { - services.restic.backups = { - # TODO: Rename this backup job as needed - main = { - # TODO: Set your restic repository URL (see step 2 above) - repository = "/mnt/backup/restic-repo"; - - # TODO: Add "RESTIC_REPO_PASSWORD" to sops secrets, then uncomment: - # passwordFile = config.sops.secrets."RESTIC_REPO_PASSWORD".path; - - # TODO: For cloud backends, create an env file with credentials: - # environmentFile = config.sops.secrets."RESTIC_ENV".path; - - # TODO: Set directories to back up - paths = [ - # "/home/js0ny/Documents" - # "/home/js0ny/Projects" - # "/home/js0ny/Academia" - ]; - - # TODO: Set exclude patterns - exclude = [ - ".cache" - ".local/share/Trash" - "node_modules" - ".venv" - "__pycache__" - "target" # Rust/Maven build artifacts - "result" # Nix build results - ]; - - # TODO: Set backup schedule (default: daily at 3am) - timerConfig = { - OnCalendar = "daily"; - Persistent = true; # Run missed backups after sleep/shutdown - RandomizedDelaySec = "1h"; - }; - - # TODO: Uncomment to enable automatic snapshot pruning - # pruneOpts = [ - # "--keep-daily 7" - # "--keep-weekly 4" - # "--keep-monthly 6" - # "--keep-yearly 2" - # ]; - }; - }; -} diff --git a/nixcfgs/modules/nixos/services/tailscale.nix b/nixcfgs/modules/nixos/services/tailscale.nix deleted file mode 100644 index ef50609..0000000 --- a/nixcfgs/modules/nixos/services/tailscale.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - services.tailscale.enable = true; -} diff --git a/nixcfgs/users/js0ny/config.nix b/nixcfgs/users/js0ny/config.nix new file mode 100644 index 0000000..a19f3af --- /dev/null +++ b/nixcfgs/users/js0ny/config.nix @@ -0,0 +1,14 @@ +{pkgs, ...}: { + my = { + desktop = { + preferredApps = { + shell = pkgs.zsh; + interactiveShell = pkgs.fish; + terminal = { + package = pkgs.kitty; + execArg = "-e"; + }; + }; + }; + }; +} diff --git a/nixcfgs/users/js0ny/default.nix b/nixcfgs/users/js0ny/default.nix index 3388102..806d934 100644 --- a/nixcfgs/users/js0ny/default.nix +++ b/nixcfgs/users/js0ny/default.nix @@ -9,6 +9,7 @@ in { imports = [ ../../modules/home/options.nix ../../modules/home/do-not-track.nix + # ./config.nix ]; home.username = username; home.homeDirectory = diff --git a/nixcfgs/users/js0ny/lib/mergetools.nix b/nixcfgs/users/js0ny/lib/mergetools.nix new file mode 100644 index 0000000..8d1861b --- /dev/null +++ b/nixcfgs/users/js0ny/lib/mergetools.nix @@ -0,0 +1,119 @@ +{ + config, + lib, + pkgs, + ... +}: let + # Helper to handle the logic check string + # 如果 force 为 true,Bash 变量 FORCE 为 "true",否则为 "false" + # In Nix, (toString true) yields "1" + mkForceVar = force: + if force + then "true" + else "false"; + + mkMergedYaml = { + name, + target, + settings, + force ? false, + }: let + yamlContent = lib.generators.toYAML {} settings; + patchFile = "${target}.nix-managed"; + in { + home.file."${patchFile}".text = yamlContent; + + home.activation."merge-${name}" = lib.hm.dag.entryAfter ["writeBoundary"] '' + TARGET="$HOME/${target}" + PATCH="$HOME/${patchFile}" + FORCE="${mkForceVar force}" + + if [ -f "$TARGET" ] || [ "$FORCE" = "true" ]; then + if [ -f "$PATCH" ]; then + verboseEcho "Merging Nix managed YAML config into: $TARGET" + + # 只有在确定要操作时,才创建目录和空文件 + run mkdir -p "$(dirname "$TARGET")" + + if [ ! -f "$TARGET" ]; then + echo "{}" > "$TARGET" + fi + + run ${pkgs.yq-go}/bin/yq -i -oy -P ". *= load(\"$PATCH\")" "$TARGET" + fi + else + verboseEcho "Skipping merge for $TARGET: file missing and force=false" + fi + ''; + }; + + mkMergedJson = { + name, + target, + settings, + force ? false, + }: let + jsonContent = builtins.toJSON settings; + patchFile = "${target}.nix-managed"; + in { + home.file."${patchFile}".text = jsonContent; + + home.activation."merge-${name}" = lib.hm.dag.entryAfter ["writeBoundary"] '' + TARGET="$HOME/${target}" + PATCH="$HOME/${patchFile}" + FORCE="${mkForceVar force}" + + if [ -f "$TARGET" ] || [ "$FORCE" = "true" ]; then + if [ -f "$PATCH" ]; then + verboseEcho "Merging Nix managed JSON config into: $TARGET" + + run mkdir -p "$(dirname "$TARGET")" + + if [ ! -f "$TARGET" ]; then + echo "{}" > "$TARGET" + fi + + run ${pkgs.yq-go}/bin/yq -i -o json -P --indent 2 ". *= load(\"$PATCH\")" "$TARGET" + fi + else + verboseEcho "Skipping merge for $TARGET: file missing and force=false" + fi + ''; + }; + + mkMergedIni = { + name, + target, + settings, + force ? false, + }: let + iniContent = lib.generators.toINI {} settings; + patchFile = "${target}.nix-managed"; + in { + home.file."${patchFile}".text = iniContent; + + home.activation."merge-${name}" = lib.hm.dag.entryAfter ["writeBoundary"] '' + TARGET="$HOME/${target}" + PATCH="$HOME/${patchFile}" + FORCE="${mkForceVar force}" + + if [ -f "$TARGET" ] || [ "$FORCE" = "true" ]; then + if [ -f "$PATCH" ]; then + verboseEcho "Merging Nix managed INI config into: $TARGET" + + run mkdir -p "$(dirname "$TARGET")" + + if [ ! -f "$TARGET" ]; then + echo "" > "$TARGET" + fi + + run ${pkgs.crudini}/bin/crudini --merge "$TARGET" < "$PATCH" + fi + else + verboseEcho "Skipping merge for $TARGET: file missing and force=false" + fi + ''; + }; +in { + inherit mkMergedYaml mkMergedJson mkMergedIni; +} diff --git a/nixcfgs/users/js0ny/packages/cli.nix b/nixcfgs/users/js0ny/packages/cli.nix index dbbc6a9..a7ee6b1 100644 --- a/nixcfgs/users/js0ny/packages/cli.nix +++ b/nixcfgs/users/js0ny/packages/cli.nix @@ -73,8 +73,6 @@ visidata proton-pass-cli pass - # rar: Unfree, the only way (afaik) to unarchive some very old partition rars - rar ] ++ ( if pkgs.stdenv.isDarwin diff --git a/nixcfgs/users/js0ny/packages/devtools.nix b/nixcfgs/users/js0ny/packages/devtools.nix index 95dba4a..01cbaaa 100644 --- a/nixcfgs/users/js0ny/packages/devtools.nix +++ b/nixcfgs/users/js0ny/packages/devtools.nix @@ -28,6 +28,6 @@ systemd.user.tmpfiles.rules = [ "d ${config.xdg.dataHome}/cargo 0755 ${config.home.username} users -" "d ${config.xdg.dataHome}/go 0755 ${config.home.username} users -" - "d ${config.xdg.stateHome}/python 0755 ${config.home.username} users -" + "f ${config.xdg.stateHome}/python 0755 ${config.home.username} users -" ]; } diff --git a/nixcfgs/users/js0ny/packages/gaming.nix b/nixcfgs/users/js0ny/packages/gaming.nix index a9701a3..42da3ce 100644 --- a/nixcfgs/users/js0ny/packages/gaming.nix +++ b/nixcfgs/users/js0ny/packages/gaming.nix @@ -5,10 +5,10 @@ ... }: let noname = pkgs.callPackage ../../../pkgs/noname/default.nix {}; - mergetools = import ../../../modules/lib/mergetools.nix {inherit pkgs lib config;}; + mergetools = import ../lib/mergetools.nix {inherit pkgs lib config;}; mkMergedJson = mergetools.mkMergedJson; mkMergedIni = mergetools.mkMergedIni; - pdxrel = "${config.home.homeDirectory}/.local/share/Paradox Interactive"; + pdxrel = ".local/share/Paradox Interactive"; # pdxbase = "${config.home.homeDirectory}/${pdxrel}"; euvbase = "${config.home.homeDirectory}/.local/share/Steam/steamapps/compatdata/3450310/pfx/drive_c/users/steamuser/Documents/Paradox Interactive/Europa Universalis V"; paradoxLauncherUserSettings = mkMergedJson { @@ -29,7 +29,7 @@ # 经典 $HOME 下拉屎 pdxSdkSettingsV3 = mkMergedJson { name = "pdxSdkaccountJsonV3"; - target = "${config.home.homeDirectory}/PDX/SDK/victoria3/account.json"; + target = "PDX/SDK/victoria3/account.json"; settings = { telemetryEnabled = false; }; @@ -43,7 +43,7 @@ }; pdxSdkTelemetryV3 = mkMergedJson { name = "pdxSdktelemetryConsentV3"; - target = "${config.home.homeDirectory}/PDX/SDK/victoria3/telemetry_consent.json"; + target = "PDX/SDK/victoria3/telemetry_consent.json"; settings = { telemetry_consent_choice = "denied"; }; @@ -65,7 +65,7 @@ }; prismLauncherCfg = mkMergedIni { name = "prism-launcher-config"; - target = "${config.home.homeDirectory}/.local/share/PrismLauncher/prismlauncher.cfg"; + target = ".local/share/PrismLauncher/prismlauncher.cfg"; settings = { General = { Language = "zh"; @@ -85,7 +85,7 @@ }; ryujinxConfig = mkMergedJson { name = "ryujinx-config"; - target = "${config.home.homeDirectory}/.config/Ryujinx/Config.json"; + target = ".config/Ryujinx/Config.json"; settings = { game_dir = [ "${config.home.homeDirectory}/Games/ROM/Nintendo - Nintendo Switch" diff --git a/nixcfgs/users/js0ny/packages/gui.nix b/nixcfgs/users/js0ny/packages/gui.nix index e873dd1..ec1cd3f 100644 --- a/nixcfgs/users/js0ny/packages/gui.nix +++ b/nixcfgs/users/js0ny/packages/gui.nix @@ -117,8 +117,6 @@ in { readest openclaw - kid3 - # Use Wayland for Jetbrains # (jetbrains.idea-ultimate.override { # vmopts = ''-Dawt.toolkit.name=WLToolkit''; diff --git a/nixcfgs/users/js0ny/programs/productivity/anki.nix b/nixcfgs/users/js0ny/programs/anki.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/productivity/anki.nix rename to nixcfgs/users/js0ny/programs/anki.nix diff --git a/nixcfgs/users/js0ny/programs/media/celluloid.nix b/nixcfgs/users/js0ny/programs/celluloid.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/media/celluloid.nix rename to nixcfgs/users/js0ny/programs/celluloid.nix diff --git a/nixcfgs/users/js0ny/programs/cherry-studio.nix b/nixcfgs/users/js0ny/programs/cherry-studio.nix index 89f79ba..0c4ebc0 100644 --- a/nixcfgs/users/js0ny/programs/cherry-studio.nix +++ b/nixcfgs/users/js0ny/programs/cherry-studio.nix @@ -4,11 +4,11 @@ config, ... }: let - mergetools = import ../../../modules/lib/mergetools.nix {inherit pkgs lib config;}; + mergetools = import ../lib/mergetools.nix {inherit pkgs lib config;}; mkMergedJson = mergetools.mkMergedJson; cherryStudioConfig = mkMergedJson { name = "cherry-studio-config"; - target = "${config.home.homeDirectory}/.config/cherry-studio/config.json"; + target = ".config/cherry-studio/config.json"; settings = { enableDeveloperMode = true; enableDataCollection = false; diff --git a/nixcfgs/users/js0ny/programs/browsers/chromium.nix b/nixcfgs/users/js0ny/programs/chromium.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/browsers/chromium.nix rename to nixcfgs/users/js0ny/programs/chromium.nix diff --git a/nixcfgs/users/js0ny/programs/media/cider-2/default.nix b/nixcfgs/users/js0ny/programs/cider-2.nix similarity index 88% rename from nixcfgs/users/js0ny/programs/media/cider-2/default.nix rename to nixcfgs/users/js0ny/programs/cider-2.nix index a041c5d..606721c 100644 --- a/nixcfgs/users/js0ny/programs/media/cider-2/default.nix +++ b/nixcfgs/users/js0ny/programs/cider-2.nix @@ -17,13 +17,11 @@ echo "marketplaceID: 12" >> "$out/theme.yml" echo 'version: "25.02"' >> "$out/theme.yml" ''; - mergetools = - import ../../../../../modules/lib/mergetools.nix - {inherit pkgs lib config;}; + mergetools = import ../lib/mergetools.nix {inherit pkgs lib config;}; mkMergedYaml = mergetools.mkMergedYaml; ciderSpaConfig = mkMergedYaml { name = "cider-spa-config"; - target = "${config.home.homeDirectory}/.config/sh.cider.genten/spa-config.yml"; + target = ".config/sh.cider.genten/spa-config.yml"; settings = { general = { language = "zh-CN"; @@ -37,8 +35,8 @@ appearance = "auto"; # default: Mojave useAdaptiveColors = true; - # NOTE: "native" breaks window controls on tiling WMs (Electron bug). - # "default" works on both GNOME and Niri, so keep it. + # TODO: Change to "native" when using simple WM + # Electron does not render the three buttons in title bar when "native" titleBarStyle = "default"; layoutType = "default"; fonts = { @@ -83,7 +81,7 @@ }; in { imports = [ - ./lib.nix + ../../../modules/home/programs/cider-2.nix ciderSpaConfig ]; diff --git a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/niri/keymaps.nix b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/niri/keymaps.nix index 0f33d3c..be5e236 100644 --- a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/niri/keymaps.nix +++ b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/niri/keymaps.nix @@ -61,19 +61,16 @@ in { # spawn-sh "cliphist list | ${launcher} -dmenu | cliphist decode | wl-copy"; spawn "${launcher}" "-m" "clipboard"; - # See ../volume-notify.nix "XF86AudioRaiseVolume".allow-when-locked = true; "XF86AudioRaiseVolume".action = - spawn "volume-notify" "up"; + spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; "XF86AudioLowerVolume".allow-when-locked = true; "XF86AudioLowerVolume".action = - spawn "volume-notify" "down"; + spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; "XF86AudioMute".allow-when-locked = true; - "XF86AudioMute".action = - spawn "volume-notify" "mute"; + "XF86AudioMute".action = spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; "XF86AudioMicMute".allow-when-locked = true; - "XF86AudioMicMute".action = - spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; + "XF86AudioMicMute".action = spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; "XF86MonBrightnessUp" = { action = spawn "brightnessctl" "set" "10%+"; diff --git a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/packages.nix b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/packages.nix index 9a63643..bd77bbd 100644 --- a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/packages.nix +++ b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/packages.nix @@ -48,7 +48,6 @@ in { ./sunsetr.nix ./systemd.nix ./dunst.nix - ./volume-notify.nix ]; home.packages = with pkgs; [ swayidle # Screensaver diff --git a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/volume-notify.nix b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/volume-notify.nix deleted file mode 100644 index c1597c4..0000000 --- a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/volume-notify.nix +++ /dev/null @@ -1,46 +0,0 @@ -{pkgs, ...}: let - volume-notify = pkgs.writeShellApplication { - name = "volume-notify"; - - runtimeInputs = with pkgs; [ - wireplumber - gawk - gnugrep - libnotify - ]; - - text = '' - if [ $# -eq 0 ]; then - echo "Usage: volume-notify {up|down|mute}" - exit 1 - fi - - case "$1" in - up) - wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+ - ;; - down) - wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1- - ;; - mute) - wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle - ;; - *) - echo "Invalid argument: $1" - exit 1 - ;; - esac - - if wpctl get-volume @DEFAULT_AUDIO_SINK@ | grep -q 'MUTED'; then - TEXT="Volume: Muted" - else - VOLUME=$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | awk '{print $2 * 100}') - TEXT="Volume: ''${VOLUME}%" - fi - - notify-send -h string:x-canonical-private-synchronous:volume -t 1500 "🔊 Audio" "$TEXT" - ''; - }; -in { - home.packages = [volume-notify]; -} diff --git a/nixcfgs/users/js0ny/programs/social/discord.nix b/nixcfgs/users/js0ny/programs/discord.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/social/discord.nix rename to nixcfgs/users/js0ny/programs/discord.nix diff --git a/nixcfgs/users/js0ny/programs/media/elisa.nix b/nixcfgs/users/js0ny/programs/elisa.nix similarity index 68% rename from nixcfgs/users/js0ny/programs/media/elisa.nix rename to nixcfgs/users/js0ny/programs/elisa.nix index e56aeef..45eb648 100644 --- a/nixcfgs/users/js0ny/programs/media/elisa.nix +++ b/nixcfgs/users/js0ny/programs/elisa.nix @@ -4,11 +4,11 @@ lib, ... }: let - mergetools = import ../../../../modules/lib/mergetools.nix {inherit pkgs lib config;}; + mergetools = import ../lib/mergetools.nix {inherit pkgs lib config;}; mkMergeIni = mergetools.mkMergedIni; elisarc = mkMergeIni { name = "elisarc"; - target = "${config.home.homeDirectory}/.config/elisarc"; + target = ".config/elisarc"; settings = { ElisaFileIndexer = { "RootPath[$e]" = "$HOME/Music"; diff --git a/nixcfgs/users/js0ny/programs/editors/emacs.nix b/nixcfgs/users/js0ny/programs/emacs.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/editors/emacs.nix rename to nixcfgs/users/js0ny/programs/emacs.nix diff --git a/nixcfgs/users/js0ny/programs/media/feishin.nix b/nixcfgs/users/js0ny/programs/feishin.nix similarity index 80% rename from nixcfgs/users/js0ny/programs/media/feishin.nix rename to nixcfgs/users/js0ny/programs/feishin.nix index 6bcfc37..a66465f 100644 --- a/nixcfgs/users/js0ny/programs/media/feishin.nix +++ b/nixcfgs/users/js0ny/programs/feishin.nix @@ -4,11 +4,11 @@ config, ... }: let - mergetools = import ../../../../modules/lib/mergetools.nix {inherit pkgs lib config;}; + mergetools = import ../lib/mergetools.nix {inherit pkgs lib config;}; mkMergedJson = mergetools.mkMergedJson; feishinConfig = mkMergedJson { name = "feishin-config"; - target = "${config.home.homeDirectory}/.config/feishin/config.json"; + target = ".config/feishin/config.json"; settings = { theme = "system"; window_has_frame = false; diff --git a/nixcfgs/users/js0ny/programs/browsers/firefox/addons.nix b/nixcfgs/users/js0ny/programs/firefox/addons.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/browsers/firefox/addons.nix rename to nixcfgs/users/js0ny/programs/firefox/addons.nix diff --git a/nixcfgs/users/js0ny/programs/browsers/firefox/betterfox.nix b/nixcfgs/users/js0ny/programs/firefox/betterfox.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/browsers/firefox/betterfox.nix rename to nixcfgs/users/js0ny/programs/firefox/betterfox.nix diff --git a/nixcfgs/users/js0ny/programs/browsers/firefox/default.nix b/nixcfgs/users/js0ny/programs/firefox/default.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/browsers/firefox/default.nix rename to nixcfgs/users/js0ny/programs/firefox/default.nix diff --git a/nixcfgs/users/js0ny/programs/browsers/firefox/search.nix b/nixcfgs/users/js0ny/programs/firefox/search.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/browsers/firefox/search.nix rename to nixcfgs/users/js0ny/programs/firefox/search.nix diff --git a/nixcfgs/users/js0ny/programs/fsearch.nix b/nixcfgs/users/js0ny/programs/fsearch.nix index 10fd09e..24deafc 100644 --- a/nixcfgs/users/js0ny/programs/fsearch.nix +++ b/nixcfgs/users/js0ny/programs/fsearch.nix @@ -4,12 +4,12 @@ config, ... }: let - mergetools = import ../../../modules/lib/mergetools.nix {inherit pkgs lib config;}; + mergetools = import ../lib/mergetools.nix {inherit pkgs lib config;}; mkMergeIni = mergetools.mkMergedIni; # username = config.home.username; fsearchConf = mkMergeIni { name = "fsearch-conf"; - target = "${config.home.homeDirectory}/.config/fsearch/fsearch.conf"; + target = ".config/fsearch/fsearch.conf"; settings = { Interface = { single_click_open = false; diff --git a/nixcfgs/users/js0ny/programs/fzf.nix b/nixcfgs/users/js0ny/programs/fzf.nix index d5c51d6..0d7ca57 100644 --- a/nixcfgs/users/js0ny/programs/fzf.nix +++ b/nixcfgs/users/js0ny/programs/fzf.nix @@ -22,31 +22,8 @@ fi ''; }; - ii-fzf = pkgs.writeShellApplication { - name = "ii-fzf"; - runtimeInputs = with pkgs; [fzf]; - text = '' - _file="" - - if command -v fd >/dev/null 2>&1; then - _file=$(fd --type f --exclude '*.lock' | fzf --height 40% --reverse -1 -q "''${1:-}") - else - # Fallback to 'find' - _file=$(find . -type f ! -name '*.lock' | fzf --height 40% --reverse -1 -q "''${1:-}") - fi - - # In POSIX shell, if fzf is cancelled (Esc/Ctrl-C), - # the command substitution simply returns an empty string. - # So, we check if the variable '_file' is non-empty ('-n'). - if [ -n "$_file" ]; then - xdg-open "$_file" - else - echo "No file selected." - fi - ''; - }; in { - home.packages = [edit-fzf ii-fzf]; + home.packages = [edit-fzf]; programs.fzf = { enable = true; enableBashIntegration = true; diff --git a/nixcfgs/users/js0ny/programs/media/gallery-dl.nix b/nixcfgs/users/js0ny/programs/gallery-dl.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/media/gallery-dl.nix rename to nixcfgs/users/js0ny/programs/gallery-dl.nix diff --git a/nixcfgs/users/js0ny/programs/terminals/ghostty.nix b/nixcfgs/users/js0ny/programs/ghostty.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/terminals/ghostty.nix rename to nixcfgs/users/js0ny/programs/ghostty.nix diff --git a/nixcfgs/users/js0ny/programs/terminals/kitty.nix b/nixcfgs/users/js0ny/programs/kitty.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/terminals/kitty.nix rename to nixcfgs/users/js0ny/programs/kitty.nix diff --git a/nixcfgs/users/js0ny/programs/productivity/libreoffice.nix b/nixcfgs/users/js0ny/programs/libreoffice.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/productivity/libreoffice.nix rename to nixcfgs/users/js0ny/programs/libreoffice.nix diff --git a/nixcfgs/users/js0ny/programs/media/lollypop.nix b/nixcfgs/users/js0ny/programs/lollypop.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/media/lollypop.nix rename to nixcfgs/users/js0ny/programs/lollypop.nix diff --git a/nixcfgs/users/js0ny/programs/media/mpv.nix b/nixcfgs/users/js0ny/programs/mpv.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/media/mpv.nix rename to nixcfgs/users/js0ny/programs/mpv.nix diff --git a/nixcfgs/users/js0ny/programs/editors/neovide.nix b/nixcfgs/users/js0ny/programs/neovide.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/editors/neovide.nix rename to nixcfgs/users/js0ny/programs/neovide.nix diff --git a/nixcfgs/users/js0ny/programs/editors/nvim.nix b/nixcfgs/users/js0ny/programs/nvim.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/editors/nvim.nix rename to nixcfgs/users/js0ny/programs/nvim.nix diff --git a/nixcfgs/users/js0ny/programs/media/obs-studio.nix b/nixcfgs/users/js0ny/programs/obs-studio.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/media/obs-studio.nix rename to nixcfgs/users/js0ny/programs/obs-studio.nix diff --git a/nixcfgs/users/js0ny/programs/productivity/obsidian/default.nix b/nixcfgs/users/js0ny/programs/obsidian/default.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/productivity/obsidian/default.nix rename to nixcfgs/users/js0ny/programs/obsidian/default.nix diff --git a/nixcfgs/users/js0ny/programs/productivity/obsidian/obsidian-grep.nix b/nixcfgs/users/js0ny/programs/obsidian/obsidian-grep.nix similarity index 92% rename from nixcfgs/users/js0ny/programs/productivity/obsidian/obsidian-grep.nix rename to nixcfgs/users/js0ny/programs/obsidian/obsidian-grep.nix index 2be0fc5..30af660 100644 --- a/nixcfgs/users/js0ny/programs/productivity/obsidian/obsidian-grep.nix +++ b/nixcfgs/users/js0ny/programs/obsidian/obsidian-grep.nix @@ -14,7 +14,7 @@ exit 1 } - # DEPRECATED: Consider removing in favour of Obsidian's official CLI. + # TODO: Add tag search support rg --line-number --color=always "" | fzf --ansi \ --delimiter : \ diff --git a/nixcfgs/users/js0ny/programs/productivity/obsidian/vimrc-support.nix b/nixcfgs/users/js0ny/programs/obsidian/vimrc-support.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/productivity/obsidian/vimrc-support.nix rename to nixcfgs/users/js0ny/programs/obsidian/vimrc-support.nix diff --git a/nixcfgs/users/js0ny/programs/media/picard.nix b/nixcfgs/users/js0ny/programs/picard.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/media/picard.nix rename to nixcfgs/users/js0ny/programs/picard.nix diff --git a/nixcfgs/users/js0ny/programs/productivity/readest.nix b/nixcfgs/users/js0ny/programs/readest.nix similarity index 76% rename from nixcfgs/users/js0ny/programs/productivity/readest.nix rename to nixcfgs/users/js0ny/programs/readest.nix index d2ccb93..638d91c 100644 --- a/nixcfgs/users/js0ny/programs/productivity/readest.nix +++ b/nixcfgs/users/js0ny/programs/readest.nix @@ -4,11 +4,11 @@ config, ... }: let - mergetools = import ../../../../modules/lib/mergetools.nix {inherit pkgs lib config;}; + mergetools = import ../lib/mergetools.nix {inherit pkgs lib config;}; mkMergedJson = mergetools.mkMergedJson; readestSettings = mkMergedJson { name = "readest-settings"; - target = "${config.home.homeDirectory}/.config/com.bilingify.readest/settings.json"; + target = ".config/com.bilingify.readest/settings.json"; settings = { globalViewSettings = { serifFont = "LXGW WenKai GB Screen"; diff --git a/nixcfgs/users/js0ny/programs/productivity/sdcv.nix b/nixcfgs/users/js0ny/programs/sdcv.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/productivity/sdcv.nix rename to nixcfgs/users/js0ny/programs/sdcv.nix diff --git a/nixcfgs/users/js0ny/programs/productivity/sioyek/default.nix b/nixcfgs/users/js0ny/programs/sioyek/default.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/productivity/sioyek/default.nix rename to nixcfgs/users/js0ny/programs/sioyek/default.nix diff --git a/nixcfgs/users/js0ny/programs/productivity/sioyek/sioyek-copy-page.sh b/nixcfgs/users/js0ny/programs/sioyek/sioyek-copy-page.sh similarity index 100% rename from nixcfgs/users/js0ny/programs/productivity/sioyek/sioyek-copy-page.sh rename to nixcfgs/users/js0ny/programs/sioyek/sioyek-copy-page.sh diff --git a/nixcfgs/users/js0ny/programs/social/telegram.nix b/nixcfgs/users/js0ny/programs/telegram.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/social/telegram.nix rename to nixcfgs/users/js0ny/programs/telegram.nix diff --git a/nixcfgs/users/js0ny/programs/productivity/thunderbird.nix b/nixcfgs/users/js0ny/programs/thunderbird.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/productivity/thunderbird.nix rename to nixcfgs/users/js0ny/programs/thunderbird.nix diff --git a/nixcfgs/users/js0ny/programs/terminals/tmux.nix b/nixcfgs/users/js0ny/programs/tmux.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/terminals/tmux.nix rename to nixcfgs/users/js0ny/programs/tmux.nix diff --git a/nixcfgs/users/js0ny/programs/editors/vscode.nix b/nixcfgs/users/js0ny/programs/vscode.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/editors/vscode.nix rename to nixcfgs/users/js0ny/programs/vscode.nix diff --git a/nixcfgs/users/js0ny/programs/editors/zed-editor.nix b/nixcfgs/users/js0ny/programs/zed-editor.nix similarity index 100% rename from nixcfgs/users/js0ny/programs/editors/zed-editor.nix rename to nixcfgs/users/js0ny/programs/zed-editor.nix diff --git a/nixcfgs/users/js0ny/zen.nix b/nixcfgs/users/js0ny/zen.nix index 5a946a9..a02c0b6 100644 --- a/nixcfgs/users/js0ny/zen.nix +++ b/nixcfgs/users/js0ny/zen.nix @@ -15,29 +15,30 @@ # Programs ./programs/aichat.nix - ./programs/browsers/firefox - ./programs/editors/emacs.nix - ./programs/editors/zed-editor.nix + ./programs/firefox + ./programs/emacs.nix + ./programs/zed-editor.nix ./programs/rime - ./programs/productivity/sdcv.nix + ./programs/sdcv.nix ./programs/fzf.nix ./programs/sops.nix - ./programs/editors/nvim.nix + ./programs/nvim.nix ./programs/pdf2zh/uv.nix ./programs/yazi.nix ./programs/edit-clipboard.nix - ./programs/editors/neovide.nix - ./programs/terminals/ghostty.nix - ./programs/terminals/tmux.nix - ./programs/terminals/kitty.nix - ./programs/productivity/anki.nix - ./programs/productivity/sioyek - ./programs/social/telegram.nix + ./programs/neovide.nix + ./programs/ghostty.nix + ./programs/tmux.nix + ./programs/kitty.nix + ./programs/anki.nix + ./programs/sioyek + ./programs/telegram.nix # ./programs/retroarch.nix # Package broken on macOS ./programs/darwin/duti.nix ./programs/darwin/alt-tab.nix ./programs/darwin/iina.nix + ../../modules/home/do-not-track.nix ../../modules/home/darwin.nix ../../modules/home/programs/lsd.nix diff --git a/nixcfgs/users/js0ny/zephyrus.nix b/nixcfgs/users/js0ny/zephyrus.nix index c4addb2..96a16e7 100644 --- a/nixcfgs/users/js0ny/zephyrus.nix +++ b/nixcfgs/users/js0ny/zephyrus.nix @@ -32,51 +32,19 @@ in { ./programs/shell/carapace.nix ./programs/shell/direnv.nix - # Browsers - ./programs/browsers/chromium.nix - ./programs/browsers/firefox - - # Editors - ./programs/editors/emacs.nix - ./programs/editors/nvim.nix - ./programs/editors/neovide.nix - ./programs/editors/vscode.nix - ./programs/editors/zed-editor.nix - - # Terminals - ./programs/terminals/ghostty.nix - ./programs/terminals/kitty.nix - ./programs/terminals/tmux.nix - - # Media - ./programs/media/cider-2 - ./programs/media/celluloid.nix - ./programs/media/elisa.nix - ./programs/media/feishin.nix - ./programs/media/gallery-dl.nix - ./programs/media/lollypop.nix - ./programs/media/mpv.nix - ./programs/media/obs-studio.nix - ./programs/media/picard.nix - - # Productivity - ./programs/productivity/anki.nix - ./programs/productivity/libreoffice.nix - ./programs/productivity/obsidian - ./programs/productivity/readest.nix - ./programs/productivity/sdcv.nix - ./programs/productivity/sioyek - ./programs/productivity/thunderbird.nix - - # Social - ./programs/social/discord.nix - ./programs/social/telegram.nix - - # Utilities & misc + # Personal Program + ./programs/chromium.nix + ./programs/firefox + ./programs/emacs.nix + ./programs/vscode.nix # ./programs/xilinx.nix ./programs/mime.nix + ./programs/zed-editor.nix ./programs/rime + ./programs/sdcv.nix ./programs/fzf.nix + ./programs/libreoffice.nix + ./programs/nvim.nix ./programs/ollama.nix ./programs/sops.nix ./programs/pdf2zh/container.nix @@ -86,14 +54,34 @@ in { ./programs/magick.nix ./programs/miniserve.nix ./programs/retroarch.nix + ./programs/neovide.nix ./programs/edit-clipboard.nix + ./programs/discord.nix + ./programs/mpv.nix + ./programs/thunderbird.nix + ./programs/obs-studio.nix + ./programs/ghostty.nix + ./programs/obsidian ./programs/aichat.nix + ./programs/tmux.nix + ./programs/kitty.nix ./programs/wine.nix + ./programs/anki.nix ./programs/libvirt.nix ./programs/block-desktop-entries.nix ./programs/pwa.nix ./programs/walker.nix + ./programs/sioyek + ./programs/celluloid.nix + ./programs/picard.nix + ./programs/cider-2.nix + ./programs/telegram.nix + ./programs/feishin.nix ./programs/fsearch.nix + ./programs/elisa.nix + ./programs/lollypop.nix + ./programs/gallery-dl.nix + ./programs/readest.nix # ./programs/openclaw.nix ./programs/libmagic.nix @@ -103,6 +91,8 @@ in { ./programs/desktop/gnome/copyous.nix ./programs/desktop/wayland-wm/niri + ../../modules/home/do-not-track.nix + # General Program config ../../modules/home/programs/eza.nix # ../../modules/home/programs/winboat.nix