packages: allow specifying multiple dir
and private
paths
This commit is contained in:
@@ -12,8 +12,8 @@ let
|
|||||||
# extract package from `sane.packages.enabledUserPkgs`
|
# extract package from `sane.packages.enabledUserPkgs`
|
||||||
pkg-list = pkgspec: builtins.map (e: e.pkg or e) pkgspec;
|
pkg-list = pkgspec: builtins.map (e: e.pkg or e) pkgspec;
|
||||||
# extract `dir` from `sane.packages.enabledUserPkgs`
|
# extract `dir` from `sane.packages.enabledUserPkgs`
|
||||||
dir-list = pkgspec: builtins.concatLists (builtins.map (e: if e ? "dir" then [ e.dir ] else []) pkgspec);
|
dir-list = pkgspec: builtins.concatLists (builtins.map (e: e.dir or []) pkgspec);
|
||||||
private-list = pkgspec: builtins.concatLists (builtins.map (e: if e ? "private" then [ e.private ] else []) pkgspec);
|
private-list = pkgspec: builtins.concatLists (builtins.map (e: e.private or []) pkgspec);
|
||||||
feeds = import ./feeds.nix { inherit lib; };
|
feeds = import ./feeds.nix { inherit lib; };
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
@@ -66,18 +66,18 @@ let
|
|||||||
celluloid # mpv frontend
|
celluloid # mpv frontend
|
||||||
chromium
|
chromium
|
||||||
clinfo
|
clinfo
|
||||||
{ pkg = dino; private = ".local/share/dino"; }
|
{ pkg = dino; private = [ ".local/share/dino" ]; }
|
||||||
electrum
|
electrum
|
||||||
|
|
||||||
# creds/session keys, etc
|
# creds/session keys, etc
|
||||||
{ pkg = element-desktop; private = ".config/Element"; }
|
{ pkg = element-desktop; private = [ ".config/Element" ]; }
|
||||||
# `emote` will show a first-run dialog based on what's in this directory.
|
# `emote` will show a first-run dialog based on what's in this directory.
|
||||||
# mostly, it just keeps a LRU of previously-used emotes to optimize display order.
|
# mostly, it just keeps a LRU of previously-used emotes to optimize display order.
|
||||||
# TODO: package [smile](https://github.com/mijorus/smile) for probably a better mobile experience.
|
# TODO: package [smile](https://github.com/mijorus/smile) for probably a better mobile experience.
|
||||||
{ pkg = emote; dir = ".local/share/Emote"; }
|
{ pkg = emote; dir = [ ".local/share/Emote" ]; }
|
||||||
evince # works on phosh
|
evince # works on phosh
|
||||||
|
|
||||||
# { pkg = fluffychat-moby; dir = ".local/share/chat.fluffy.fluffychat"; } # TODO: ship normal fluffychat on non-moby?
|
# { pkg = fluffychat-moby; dir = [ ".local/share/chat.fluffy.fluffychat" ]; } # TODO: ship normal fluffychat on non-moby?
|
||||||
|
|
||||||
foliate
|
foliate
|
||||||
font-manager
|
font-manager
|
||||||
@@ -85,8 +85,8 @@ let
|
|||||||
# XXX by default fractal stores its state in ~/.local/share/<UUID>.
|
# XXX by default fractal stores its state in ~/.local/share/<UUID>.
|
||||||
# after logging in, manually change ~/.local/share/keyrings/... to point it to some predictable subdir.
|
# after logging in, manually change ~/.local/share/keyrings/... to point it to some predictable subdir.
|
||||||
# then reboot (so that libsecret daemon re-loads the keyring...?)
|
# then reboot (so that libsecret daemon re-loads the keyring...?)
|
||||||
{ pkg = fractal-latest; private = ".local/share/fractal"; }
|
{ pkg = fractal-latest; private = [ ".local/share/fractal" ]; }
|
||||||
# { pkg = fractal-next; private = ".local/share/fractal"; }
|
# { pkg = fractal-next; private = [ ".local/share/fractal" ]; }
|
||||||
|
|
||||||
gajim # XMPP client
|
gajim # XMPP client
|
||||||
gimp # broken on phosh
|
gimp # broken on phosh
|
||||||
@@ -102,7 +102,7 @@ let
|
|||||||
gnome.gnome-terminal # works on phosh
|
gnome.gnome-terminal # works on phosh
|
||||||
gnome.gnome-weather
|
gnome.gnome-weather
|
||||||
|
|
||||||
{ pkg = gpodder-configured; dir = "gPodder/Downloads"; }
|
{ pkg = gpodder-configured; dir = [ "gPodder/Downloads" ]; }
|
||||||
|
|
||||||
gthumb
|
gthumb
|
||||||
handbrake
|
handbrake
|
||||||
@@ -115,15 +115,15 @@ let
|
|||||||
lollypop
|
lollypop
|
||||||
mesa-demos
|
mesa-demos
|
||||||
|
|
||||||
{ pkg = mpv; dir = ".config/mpv/watch_later"; }
|
{ pkg = mpv; dir = [ ".config/mpv/watch_later" ]; }
|
||||||
|
|
||||||
networkmanagerapplet
|
networkmanagerapplet
|
||||||
|
|
||||||
# not strictly necessary, but allows caching articles; offline use, etc.
|
# not strictly necessary, but allows caching articles; offline use, etc.
|
||||||
{ pkg = newsflash; dir = ".local/share/news-flash"; }
|
{ pkg = newsflash; dir = [ ".local/share/news-flash" ]; }
|
||||||
|
|
||||||
# settings (electron app). TODO: can i manage these settings with home-manager?
|
# settings (electron app). TODO: can i manage these settings with home-manager?
|
||||||
{ pkg = obsidian; dir = ".config/obsidian"; }
|
{ pkg = obsidian; dir = [ ".config/obsidian" ]; }
|
||||||
|
|
||||||
pavucontrol
|
pavucontrol
|
||||||
# picard # music tagging
|
# picard # music tagging
|
||||||
@@ -136,14 +136,14 @@ let
|
|||||||
# it doesn't obey a conventional ~/Music/{Artist}/{Album}/{Track} notation, so no symlinking
|
# it doesn't obey a conventional ~/Music/{Artist}/{Album}/{Track} notation, so no symlinking
|
||||||
# config (e.g. server connection details) is persisted in ~/.config/sublime-music/config.json
|
# config (e.g. server connection details) is persisted in ~/.config/sublime-music/config.json
|
||||||
# possible to pass config as a CLI arg (sublime-music -c config.json)
|
# possible to pass config as a CLI arg (sublime-music -c config.json)
|
||||||
# { pkg = sublime-music; dir = ".local/share/sublime-music"; }
|
# { pkg = sublime-music; dir = [ ".local/share/sublime-music" ]; }
|
||||||
{ pkg = sublime-music-mobile; dir = ".local/share/sublime-music"; }
|
{ pkg = sublime-music-mobile; dir = [ ".local/share/sublime-music" ]; }
|
||||||
tdesktop # broken on phosh
|
tdesktop # broken on phosh
|
||||||
|
|
||||||
{ pkg = tokodon; dir = ".cache/KDE/tokodon"; }
|
{ pkg = tokodon; dir = [ ".cache/KDE/tokodon" ]; }
|
||||||
|
|
||||||
# vlc remembers play position in ~/.config/vlc/vlc-qt-interface.conf
|
# vlc remembers play position in ~/.config/vlc/vlc-qt-interface.conf
|
||||||
{ pkg = vlc; dir = ".config/vlc"; }
|
{ pkg = vlc; dir = [ ".config/vlc" ]; }
|
||||||
|
|
||||||
whalebird # pleroma client. input is broken on phosh
|
whalebird # pleroma client. input is broken on phosh
|
||||||
xdg-utils # for xdg-open
|
xdg-utils # for xdg-open
|
||||||
@@ -158,7 +158,7 @@ let
|
|||||||
# XXX 2022-07-31: fix to allow links to open in default web-browser:
|
# XXX 2022-07-31: fix to allow links to open in default web-browser:
|
||||||
# https://github.com/NixOS/nixpkgs/issues/78961
|
# https://github.com/NixOS/nixpkgs/issues/78961
|
||||||
nss = pkgs.nss_latest;
|
nss = pkgs.nss_latest;
|
||||||
}); in { pkg = discord; dir = ".config/discord"; })
|
}); in { pkg = discord; dir = [ ".config/discord" ]; })
|
||||||
|
|
||||||
# kaiteki # Pleroma client
|
# kaiteki # Pleroma client
|
||||||
# gnome.zenity # for kaiteki (it will use qarma, kdialog, or zenity)
|
# gnome.zenity # for kaiteki (it will use qarma, kdialog, or zenity)
|
||||||
@@ -169,19 +169,19 @@ let
|
|||||||
makemkv
|
makemkv
|
||||||
|
|
||||||
# actual monero blockchain (not wallet/etc; safe to delete, just slow to regenerate)
|
# actual monero blockchain (not wallet/etc; safe to delete, just slow to regenerate)
|
||||||
{ pkg = monero-gui; dir = ".bitmonero"; }
|
{ pkg = monero-gui; dir = [ ".bitmonero" ]; }
|
||||||
|
|
||||||
# creds, media
|
# creds, media
|
||||||
{ pkg = signal-desktop; dir = ".config/Signal"; }
|
{ pkg = signal-desktop; dir = [ ".config/Signal" ]; }
|
||||||
|
|
||||||
# creds. TODO: can i manage this with home-manager?
|
# creds. TODO: can i manage this with home-manager?
|
||||||
{ pkg = spotify; dir = ".config/spotify"; }
|
{ pkg = spotify; dir = [ ".config/spotify" ]; }
|
||||||
|
|
||||||
# hardenedMalloc solves a crash at startup
|
# hardenedMalloc solves a crash at startup
|
||||||
(tor-browser-bundle-bin.override { useHardenedMalloc = false; })
|
(tor-browser-bundle-bin.override { useHardenedMalloc = false; })
|
||||||
|
|
||||||
# zcash coins. safe to delete, just slow to regenerate (10-60 minutes)
|
# zcash coins. safe to delete, just slow to regenerate (10-60 minutes)
|
||||||
{ pkg = zecwallet-lite; private = ".zcash"; }
|
{ pkg = zecwallet-lite; private = [ ".zcash" ]; }
|
||||||
] else []);
|
] else []);
|
||||||
|
|
||||||
# general-purpose utilities that we want any user to be able to access
|
# general-purpose utilities that we want any user to be able to access
|
||||||
@@ -240,15 +240,31 @@ let
|
|||||||
rustup
|
rustup
|
||||||
swig
|
swig
|
||||||
];
|
];
|
||||||
|
|
||||||
|
pkgSpec = types.submodule {
|
||||||
|
options = {
|
||||||
|
pkg = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
};
|
||||||
|
dir = mkOption {
|
||||||
|
type = types.listOf types.str;
|
||||||
|
default = [];
|
||||||
|
description = "list of home-relative paths to persist for this package";
|
||||||
|
};
|
||||||
|
private = mkOption {
|
||||||
|
type = types.listOf types.str;
|
||||||
|
default = [];
|
||||||
|
description = "list of home-relative paths to persist (in encrypted format) for this package";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
# packages to deploy to the user's home
|
# packages to deploy to the user's home
|
||||||
sane.packages.extraUserPkgs = mkOption {
|
sane.packages.extraUserPkgs = mkOption {
|
||||||
default = [ ];
|
default = [ ];
|
||||||
# each entry can be either a package, or attrs:
|
type = types.listOf (types.either types.package pkgSpec);
|
||||||
# { pkg = package; dir = optional string; private = optional string };
|
|
||||||
type = types.listOf (types.either types.package types.attrs);
|
|
||||||
};
|
};
|
||||||
sane.packages.enableConsolePkgs = mkOption {
|
sane.packages.enableConsolePkgs = mkOption {
|
||||||
default = false;
|
default = false;
|
||||||
|
Reference in New Issue
Block a user