nosDshell 生态的分发仓库:同时是 Guix channel 与 Nix flake。
包定义 pin nosd monorepo 的组件
tag/commit,以及 quickshell-nosd
fork。
本仓从两处迁移而来:原 nosDshell 仓内的 .guix-channel/nosdshell.scm/
flake.nix/nix/(自打包设施),以及 jeans channel 里的 nosd 打包与
home service(modules/jeans/packages/{desktop,theme}.scm、
modules/jeans/home/services/desktop.scm)。
guix/nosd/
├── packages.scm # (nosd packages): quickshell-nosd, nosd-blur,
│ # nosd-helpers, nosd-theme, nosdshell
├── themes.scm # (nosd themes): nosd-gtk-theme,
│ # nosd-kvantum-theme, fcitx5-theme-nosd,
│ # nosd-themes (union)
├── rust-crates.scm # (nosd rust-crates): 三个 Rust 工具的
│ # vendored crate inputs(生成物,勿手改)
└── home/services/desktop.scm # (nosd home services desktop):
# home-nosdshell-service-type
flake.nix # 包 + overlay + HM/NixOS 模块 + dev shell
nix/packages/ # nosdshell.nix, themes.nix
nix/modules/ # home.nix, nixos.nix
nix/dev-shell.nix # nix develop #dev
.guix-channel 声明 directory = "guix"。Channel 启用提交认证
(introduction commit ffed3941b88829b250a67ce6f8ff0fc6c5d189a0,
keyring 分支存公钥)。在 channels.scm 加入:
(cons* (channel
(name 'nosd)
(url "https://github.com/nosDshell/nosd-pkgs")
(branch "main")
(introduction
(make-channel-introduction
"ffed3941b88829b250a67ce6f8ff0fc6c5d189a0"
(openpgp-fingerprint
"62711D5E9CCDEC6907CADBF88637132222571907"))))
%default-channels)本仓开发者注意:.guix-authorizations 之后的所有提交必须由授权
key 签名;.git/config 已写入 introduction 并安装 pre-push 认证
钩子(guix git authenticate)。新增授权 key 时同时更新
.guix-authorizations 与 keyring 分支。
guix pull 后:guix install nosdshell,主题包
nosd-gtk-theme / nosd-kvantum-theme / fcitx5-theme-nosd /
nosd-themes(union)。
Guix Home 服务:
(use-modules (nosd home services desktop))
(service home-nosdshell-service-type)flake 输出:packages.<system>.{nosdshell, nosd-gtk-theme, nosd-kvantum-theme, fcitx5-theme-nosd}(default = nosdshell)、
overlays.default、homeModules.default(programs.nosdshell)、
nixosModules.default(services.nosdshell)、devShells.dev。
临时试用:nix run github:nosDshell/nosd-pkgs。
永久安装(profile):nix profile install github:nosDshell/nosd-pkgs#nosdshell。
NixOS(在你的 flake 里):
{
inputs.nosd-pkgs.url = "github:nosDshell/nosd-pkgs";
outputs = { nixpkgs, nosd-pkgs, ... }: {
nixosConfigurations.<主机名> = nixpkgs.lib.nixosSystem {
modules = [
nosd-pkgs.nixosModules.default
{ services.nosdshell.enable = true; }
];
};
};
}Home Manager:
{
inputs.nosd-pkgs.url = "github:nosDshell/nosd-pkgs";
outputs = { home-manager, nosd-pkgs, ... }: {
homeConfigurations.<用户名> = home-manager.lib.homeManagerConfiguration {
modules = [
nosd-pkgs.homeModules.default
{
programs.nosdshell = {
enable = true;
# settings / colors / user-templates / plugins / pluginSettings
# 见 nix/modules/home.nix 的 options 块
};
}
];
};
};
}开发 shell:nix develop github:nosDshell/nosd-pkgs#dev
(qmllint/qmlfmt/lefthook/nix 工具链)。
monorepo 组件独立发版(<component>-v<version> tag),本仓按组件
pin:
- Guix:每个包独立的 version/commit/hash(
nosd-sourcehelper); nosdshell 组(shell + 三个 Rust 工具)共享%nosdshell-source, 因为tools/与 shell 同树演进。 - Nix:每组件一个 flake input,钉组件 tag;
nix flake update <input>只升级该组件。
过渡期:首个 nosdshell-v* tag 出现前,全部 pin
monorepo main 上的 commit(当前 260ffde)。旧 v1.7.x tag 指向
monorepo 前的根布局(shell 在仓根),不能用于 packages/nosdshell
打包。
- 组件发版后,改对应 version/commit/hash:
- Guix:
git worktree add /tmp/wt <tag>→guix hash -S nar -x /tmp/wt→git worktree remove /tmp/wt - Nix:更新 flake input 的 ref,
nix flake update <input>
- Guix:
quickshell-nosdpin 只在 fork 推进时动(packages.scm里 commit + base32,以及 nosdshell wrapper 的--version行)。- 本地 GPG 签名提交,不交给 bot。
在 nosd monorepo 的工作树上构建(不打 commit/pin):
# Guix:在 nosd/packages/nosdshell 下
guix build -L ../../../nosd-pkgs/guix -f guix.scm
# Nix:override input 指向本地 checkout
nix build ../nosd-pkgs#nosdshell --override-input nosdshell ../nosd