我不再希望維護這個存儲庫,所以我會存檔。
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