我不再希望维护这个存储库,所以我会存档。
nix-desktop可让您定义NIX项目的Linux桌面集成。使用此脚本,您可以使用NIX声明XDG桌面菜单条目和SystemD单元,并以智力的方式应用它。
我是家庭经理的用户。它使您可以管理整个用户(主页)配置,包括程序可执行文件,配置文件,SystemD服务和其他文件,但其配置方式是集中的。它(显然)每个主目录仅允许一种配置。有时,我想要一些分散的东西。例如,我有一些包含数据的私人GIT存储库,我想将与存储库相关的应用程序安装到仅相关的计算机上。我想向公众隐藏它们的存在,因此不应在我的公共配置中提及它们。
Nix Flakes使您可以在项目存储库中定义包装和应用,这些软件包和应用看起来很方便。但是,我找不到将此类应用程序与Linux桌面集成的方法。为了在不打开终端的情况下启动它们,我想为项目中定义的这些应用程序安装菜单条目。这是一种以一致的方式实施的尝试。注意:这不取决于nix薄片。
与使用nix-env幼稚的临时安装配置文件不同, nix-desktop更新了系统状态。它通知桌面菜单条目上的更新,然后重新加载/enable/(re)启动已安装的Systemd单元(并停止和禁用卸载的单元)。这是一个方便且可靠的解决方案,用于倾斜一组桌面应用程序和服务。
使用Nix安装此存储库:
nix-env -if .另外,如果您已经启用了Nix Flakes,则可以在不安装程序的情况下使用该程序:
nix run ' github:akirak/nix-desktop ' 您可以通过在存储库中创建名为desktop.nix的文件来定义配置。以下是一个例子:
let
pkgs = import <nixpkgs> { } ;
thisDir = builtins . toString ./. ;
in
{
name = "my-config" ;
# Run Doom Emacs inside a sandboxed nix-shell session.
xdg . menu . applications . doom-emacs = {
Name = "Doom Emacs" ;
Icon = "emacs" ;
TryExec = " ${ builtins . getEnv "HOME" } /.config/doom-runner/emacs/bin/doom" ;
Exec = " ${ pkgs . nix } /bin/nix-shell ${ builtins . toString ./. } /doom/shell.nix --command emacs" ;
StartupWMClass = "Emacs" ;
} ;
# Automatically set up an overlayfs directory in the repository.
systemd . services . overlayfs-repos = {
enable = true ;
start = true ;
restart = false ;
text = ''
[Unit]
Description=Example overlayfs service
ConditionPathIsDirectory= ${ thisDir } /repos-src
ConditionPathIsDirectory= ${ thisDir } /repos-overlay
ConditionPathIsDirectory= ${ thisDir } /.repos-work
ConditionPathIsDirectory= ${ thisDir } /repos
[Service]
Type=oneshot
ExecStart= ${ pkgs . fuse-overlayfs } /bin/fuse-overlayfs -o lowerdir= ${ thisDir } /repos-src,upperdir= ${ thisDir } /repos-overlay,workdir= ${ thisDir } /.repos-work ${ thisDir } /repos
RemainAfterExit=yes
ExecStop= ${ pkgs . fuse } /bin/fusermount -u ${ thisDir } /repos
[Install]
WantedBy=default.target
'' ;
} ;
}该文件导出属性集,并且必须包含一个强制性name字段,该字段用于唯一识别项目。它将成为要构建的NIX派生的一部分,因此应该是文件名。
xdg.menu.applications.*定义XDG菜单条目。有些字段具有明智的默认值,但您必须指定Name , Icon , Exec和StartupWMClass 。
systemd.TYPE.*定义用户Systemd服务。 TYPE可以是代表SystemD支持的单元类型的services , timers和其他复数。
它必须包含text字段,该字段将成为单元文件的内容。
它还支持以下可选字段:
enable (bool):安装后启用设备。start (bool):安装后,如果不是安装,则启动单元。restart (bool):如果更改单元,请重新启动单元。即使使用此选项,也不会重新启动不变的单元。 nix-desktop命令具有以下摘要:
nix-desktop [install | uninstall | build] DIR或带有尼克斯薄片:
nix run ' github:akirak/nix-desktop ' [install | uninstall | build] DIR DIR是必需的参数,应将其设置为包含desktop.nix目录。
该命令支持以下操作模式,应由可选的第一个参数表示为目录:
install ,它安装了目录中定义的应用程序。此模式为默认值,因此您可以省略install子命令并将目录指定为唯一的参数。uninstall ,它卸载了应用程序。build就像install一样,但它仅构建配置,并且既不安装配置文件也不更新系统。它检测到与其他项目中定义的应用程序的冲突,因此请检查错误消息。
您可以浏览已安装项目的列表:
nix-desktop list使用--verify标志,列表命令检查源目录是否存在。
nix-desktop list --verify您还可以使用一个命令更新所有已安装的项目:
nix-desktop update