Я больше не хочу поддерживать этот репозиторий, поэтому я буду архивировать его.
nix-desktop позволяет определить интеграцию настольных компьютеров Linux проектов NIX. С помощью этого сценария вы можете определить записи меню настольных компьютеров XDG и системные единицы декларативно с использованием NIX и применить их идентифицированным образом.
Я пользователь домашнего менеджера. Он позволяет управлять всей конфигурацией пользователя (домашней), включая исполняемые программы, файлы конфигурации, системные службы и другие файлы, но его способ конфигурации централизован. Это (по -видимому,) позволяет только одну конфигурацию на домашний каталог. Иногда я хотел что -то немного децентрализовано. Например, у меня есть несколько частных репозиториев GIT, которые содержат данные, и я хочу установить приложения, связанные с репозиториями, на машины, которые имеют только актуальные. Я хочу скрыть их существование от общественности, и поэтому они не должны упоминаться в моей публичной конфигурации.
Nix Flakes позволяет вам определять пакеты и приложения в репозиториях проектов, которые выглядят удобно. Тем не менее, я не нашел способ интегрировать такие приложения с настольным компьютером Linux. Чтобы запустить их без открытия терминала, я хотел установить записи меню для этих приложений, определенных в проектах. Это попытка реализовать его последовательным образом. Примечание: это не зависит от хлопьев NIX.
В отличие от наивной специальной установки файлов конфигурации с использованием nix-env , nix-desktop обновляет состояние системы. Он уведомляет обновления в записях меню настольных компьютеров и перезагрузить/включить/(re) запускает установленные системные единицы (и останавливает и отключает удаленные единицы). Это удобное и надежное решение для разделения набора настольных приложений и услуг.
Установите этот репозиторий, используя 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 может быть services , timers и другими множеством для представления типов устройств, которые поддерживаются SystemD.
Он должен содержать text поле, которое станет содержанием файла устройства.
Он также поддерживает следующие дополнительные поля:
enable (bool): включить устройство после установки.start (bool): запустите блок после установки, если он не установлен.restart (Bool): Если блок изменяется, перезапустите устройство. Несменные единицы не будут перезагружены даже с этим вариантом. Команда nix-desktop имеет следующее синопсис:
nix-desktop [install | uninstall | build] DIRили с хлопьями NIX:
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