Saya tidak lagi ingin mempertahankan repositori ini, jadi saya akan mengarsipkannya.
nix-desktop memungkinkan Anda mendefinisikan integrasi desktop Linux dari proyek NIX. Dengan skrip ini, Anda dapat mendefinisikan entri menu desktop XDG dan unit SystemD secara deklaratif menggunakan NIX dan menerapkannya dengan cara idempoten.
Saya adalah pengguna manajer rumah. Ini memungkinkan Anda mengelola seluruh konfigurasi pengguna (rumah) termasuk executable program, file konfigurasi, layanan SystemD, dan file lainnya, tetapi cara konfigurasi terpusat. (Tampaknya) hanya memungkinkan satu konfigurasi per direktori home. Terkadang, saya menginginkan sesuatu yang sedikit terdesentralisasi. Misalnya, saya memiliki beberapa repositori git pribadi yang berisi data, dan saya ingin menginstal aplikasi yang terkait dengan repositori ke mesin yang hanya relevan. Saya ingin menyembunyikan keberadaan mereka dari publik, dan dengan demikian mereka tidak boleh disebutkan dalam konfigurasi publik saya.
Nix Flakes memungkinkan Anda mendefinisikan paket dan aplikasi dalam repositori proyek, yang terlihat nyaman. Namun, saya tidak menemukan cara untuk mengintegrasikan aplikasi seperti itu dengan Linux Desktop. Untuk memulainya tanpa membuka terminal, saya ingin menginstal entri menu untuk aplikasi tersebut, yang ditentukan dalam proyek. Ini adalah upaya untuk mengimplementasikannya dengan cara yang konsisten. Catatan: Ini tidak tergantung pada serpihan nix.
Tidak seperti instalasi ad-hoc naif file konfigurasi menggunakan nix-env , nix-desktop memperbarui status sistem. Ini memberi tahu pembaruan pada entri menu desktop dan memuat ulang/mengaktifkan/(kembali) memulai unit SystemD yang diinstal (dan menghentikan dan menonaktifkan unit yang tidak diinstal). Ini adalah solusi yang nyaman dan dapat diandalkan untuk deplying satu set aplikasi dan layanan desktop.
Instal repositori ini menggunakan NIX:
nix-env -if .Atau, Anda dapat menggunakan program tanpa menginstalnya jika Anda telah mengaktifkan Nix Flakes:
nix run ' github:akirak/nix-desktop ' Anda dapat mendefinisikan konfigurasi dengan membuat file bernama desktop.nix di repositori. Berikut ini adalah contoh:
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
'' ;
} ;
} File mengekspor set atribut, dan harus berisi bidang name wajib, yang digunakan untuk mengidentifikasi proyek secara unik. Ini akan menjadi bagian dari derivasi NIX yang akan dibangun, jadi harus nama file aman.
xdg.menu.applications.* Tentukan entri menu XDG. Beberapa bidang memiliki default yang masuk akal, tetapi Anda harus menentukan Name , Icon , Exec , dan StartupWMClass .
systemd.TYPE.* Tentukan layanan SystemD pengguna. TYPE dapat berupa services , timers , dan bentuk jamak lainnya untuk mewakili jenis unit yang didukung oleh SystemD.
Itu harus berisi bidang text yang akan menjadi konten file unit.
Ini juga mendukung bidang opsional berikut:
enable (bool): Aktifkan unit setelah pemasangan.start (bool): Mulai unit setelah instalasi, jika bukan instalasi.restart (BOOL): Jika unit diubah, restart unit. Unit yang tidak berubah tidak akan dimulai kembali bahkan dengan opsi ini. Perintah nix-desktop memiliki sinopsis berikut:
nix-desktop [install | uninstall | build] DIRatau dengan serpihan nix:
nix run ' github:akirak/nix-desktop ' [install | uninstall | build] DIR DIR adalah argumen yang diperlukan, dan harus diatur ke direktori yang berisi desktop.nix .
Perintah tersebut mendukung mode operasi berikut, yang harus dilambangkan dengan argumen pertama opsional yang diisi ke direktori:
install , ia menginstal aplikasi yang ditentukan dalam direktori. Mode ini adalah default, sehingga Anda dapat menghilangkan install sub -perintah dan menentukan direktori sebagai satu -satunya argumen.uninstall , ia menghapus aplikasi.build seperti install , tetapi hanya membangun konfigurasi dan tidak menginstal file konfigurasi atau memperbarui sistem.Ini mendeteksi konflik dengan aplikasi yang ditentukan dalam proyek lain, jadi silakan periksa pesan kesalahan.
Anda dapat menelusuri daftar proyek yang diinstal:
nix-desktop list Dengan --verify flag, perintah daftar memeriksa apakah direktori sumber ada.
nix-desktop list --verifyAnda juga dapat memperbarui semua proyek yang diinstal dengan satu perintah:
nix-desktop update