programs: port console packages to new config system
This commit is contained in:
parent
979ed38506
commit
736999eea6
|
@ -19,8 +19,8 @@
|
||||||
];
|
];
|
||||||
|
|
||||||
sane.nixcache.enable-trusted-keys = true;
|
sane.nixcache.enable-trusted-keys = true;
|
||||||
sane.packages.enableConsolePkgs = true;
|
|
||||||
sane.programs.sysadminUtils.enableFor.system = true;
|
sane.programs.sysadminUtils.enableFor.system = true;
|
||||||
|
sane.programs.consoleUtils.enableFor.user.colin = true;
|
||||||
|
|
||||||
# some services which use private directories error if the parent (/var/lib/private) isn't 700.
|
# some services which use private directories error if the parent (/var/lib/private) isn't 700.
|
||||||
sane.fs."/var/lib/private".dir.acl.mode = "0700";
|
sane.fs."/var/lib/private".dir.acl.mode = "0700";
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
|
|
||||||
let
|
let
|
||||||
inherit (builtins) attrNames concatLists;
|
inherit (builtins) attrNames concatLists;
|
||||||
inherit (lib) mapAttrsToList mkMerge;
|
inherit (lib) mapAttrs mapAttrsToList mkDefault mkMerge;
|
||||||
|
|
||||||
sysadminPkgs = {
|
sysadminPkgs = {
|
||||||
inherit (pkgs // {
|
inherit (pkgs // {
|
||||||
# XXX can't `inherit` a nested attr, so we move them to the toplevel
|
# XXX can't `inherit` a nested attr, so we move them to the toplevel
|
||||||
|
@ -48,23 +49,88 @@ let
|
||||||
wget
|
wget
|
||||||
;
|
;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
consolePkgs = {
|
||||||
|
inherit (pkgs)
|
||||||
|
backblaze-b2
|
||||||
|
cdrtools
|
||||||
|
dmidecode
|
||||||
|
duplicity
|
||||||
|
efivar
|
||||||
|
flashrom
|
||||||
|
fwupd
|
||||||
|
ghostscript # TODO: imagemagick wrapper should add gs to PATH
|
||||||
|
gnupg
|
||||||
|
gocryptfs
|
||||||
|
gopass
|
||||||
|
gopass-jsonapi
|
||||||
|
ifuse
|
||||||
|
imagemagick
|
||||||
|
ipfs
|
||||||
|
kitty # TODO: move to GUI, but `ssh servo` from kitty sets `TERM=xterm-kitty` in the remove and breaks things
|
||||||
|
libimobiledevice
|
||||||
|
libsecret # for managing user keyrings
|
||||||
|
lm_sensors # for sensors-detect
|
||||||
|
lshw
|
||||||
|
ffmpeg
|
||||||
|
memtester
|
||||||
|
networkmanager
|
||||||
|
nixpkgs-review
|
||||||
|
# nixos-generators
|
||||||
|
# nettools
|
||||||
|
nmon
|
||||||
|
oathToolkit # for oathtool
|
||||||
|
# ponymix
|
||||||
|
pulsemixer
|
||||||
|
python3
|
||||||
|
rsync
|
||||||
|
# python3Packages.eyeD3 # music tagging
|
||||||
|
sane-scripts
|
||||||
|
sequoia
|
||||||
|
snapper
|
||||||
|
sops
|
||||||
|
sox
|
||||||
|
speedtest-cli
|
||||||
|
sqlite # to debug sqlite3 databases
|
||||||
|
ssh-to-age
|
||||||
|
sudo
|
||||||
|
# tageditor # music tagging
|
||||||
|
unar
|
||||||
|
visidata
|
||||||
|
w3m
|
||||||
|
wireguard-tools
|
||||||
|
# youtube-dl
|
||||||
|
yt-dlp
|
||||||
|
;
|
||||||
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
config = mkMerge [
|
config = {
|
||||||
{
|
sane.programs = mkMerge [
|
||||||
# define -- but don't enable -- the system packages
|
# define -- but don't enable -- the packages in each group
|
||||||
sane.programs = sysadminPkgs;
|
# use `mkDefault` for the package here so we can customize some of them further down this file
|
||||||
}
|
(mapAttrs (_n: p: { package = mkDefault p; }) sysadminPkgs)
|
||||||
{
|
(mapAttrs (_n: p: { package = mkDefault p; }) consolePkgs)
|
||||||
# link the system packages into a meta package
|
{
|
||||||
sane.programs.sysadminUtils = {
|
# link the various package sets into their own meta packages
|
||||||
package = null; # meta package
|
sysadminUtils = {
|
||||||
suggestedPrograms = attrNames sysadminPkgs;
|
package = null;
|
||||||
};
|
suggestedPrograms = attrNames sysadminPkgs;
|
||||||
}
|
};
|
||||||
{
|
consoleUtils = {
|
||||||
# XXX: this might not be necessary. try removing this and cacert.unbundled (servo)?
|
package = null;
|
||||||
environment.etc."ssl/certs".source = "${pkgs.cacert.unbundled}/etc/ssl/certs/*";
|
suggestedPrograms = attrNames consolePkgs;
|
||||||
}
|
};
|
||||||
];
|
}
|
||||||
|
{
|
||||||
|
# nontrivial package definitions
|
||||||
|
imagemagick.package = pkgs.imagemagick.override {
|
||||||
|
ghostscriptSupport = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
# XXX: this might not be necessary. try removing this and cacert.unbundled (servo)?
|
||||||
|
environment.etc."ssl/certs".source = "${pkgs.cacert.unbundled}/etc/ssl/certs/*";
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,62 +5,6 @@ with pkgs;
|
||||||
let
|
let
|
||||||
cfg = config.sane.packages;
|
cfg = config.sane.packages;
|
||||||
|
|
||||||
imagemagick = pkgs.imagemagick.override {
|
|
||||||
ghostscriptSupport = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
consolePkgs = [
|
|
||||||
backblaze-b2
|
|
||||||
cdrtools
|
|
||||||
dmidecode
|
|
||||||
duplicity
|
|
||||||
efivar
|
|
||||||
flashrom
|
|
||||||
fwupd
|
|
||||||
ghostscript # TODO: imagemagick wrapper should add gs to PATH
|
|
||||||
gnupg
|
|
||||||
gocryptfs
|
|
||||||
gopass
|
|
||||||
gopass-jsonapi
|
|
||||||
ifuse
|
|
||||||
imagemagick
|
|
||||||
ipfs
|
|
||||||
kitty # TODO: move to GUI, but `ssh servo` from kitty sets `TERM=xterm-kitty` in the remove and breaks things
|
|
||||||
libimobiledevice
|
|
||||||
libsecret # for managing user keyrings
|
|
||||||
lm_sensors # for sensors-detect
|
|
||||||
lshw
|
|
||||||
ffmpeg
|
|
||||||
memtester
|
|
||||||
networkmanager
|
|
||||||
nixpkgs-review
|
|
||||||
# nixos-generators
|
|
||||||
# nettools
|
|
||||||
nmon
|
|
||||||
oathToolkit # for oathtool
|
|
||||||
# ponymix
|
|
||||||
pulsemixer
|
|
||||||
python3
|
|
||||||
rsync
|
|
||||||
# python3Packages.eyeD3 # music tagging
|
|
||||||
sane-scripts
|
|
||||||
sequoia
|
|
||||||
snapper
|
|
||||||
sops
|
|
||||||
sox
|
|
||||||
speedtest-cli
|
|
||||||
sqlite # to debug sqlite3 databases
|
|
||||||
ssh-to-age
|
|
||||||
sudo
|
|
||||||
# tageditor # music tagging
|
|
||||||
unar
|
|
||||||
visidata
|
|
||||||
w3m
|
|
||||||
wireguard-tools
|
|
||||||
# youtube-dl
|
|
||||||
yt-dlp
|
|
||||||
];
|
|
||||||
|
|
||||||
guiPkgs = [
|
guiPkgs = [
|
||||||
# GUI only
|
# GUI only
|
||||||
aerc # email client
|
aerc # email client
|
||||||
|
@ -246,10 +190,6 @@ in
|
||||||
type = types.listOf toPkgSpec;
|
type = types.listOf toPkgSpec;
|
||||||
description = "packages to only ship if gui's enabled";
|
description = "packages to only ship if gui's enabled";
|
||||||
};
|
};
|
||||||
sane.packages.enableConsolePkgs = mkOption {
|
|
||||||
default = false;
|
|
||||||
type = types.bool;
|
|
||||||
};
|
|
||||||
sane.packages.enableGuiPkgs = mkOption {
|
sane.packages.enableGuiPkgs = mkOption {
|
||||||
default = false;
|
default = false;
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
|
@ -265,7 +205,6 @@ in
|
||||||
|
|
||||||
sane.packages.enabledUserPkgs = mkOption {
|
sane.packages.enabledUserPkgs = mkOption {
|
||||||
default = cfg.extraUserPkgs
|
default = cfg.extraUserPkgs
|
||||||
++ (if cfg.enableConsolePkgs then consolePkgs else [])
|
|
||||||
++ (if cfg.enableGuiPkgs then guiPkgs ++ cfg.extraGuiPkgs else [])
|
++ (if cfg.enableGuiPkgs then guiPkgs ++ cfg.extraGuiPkgs else [])
|
||||||
++ (if cfg.enableDevPkgs then devPkgs else [])
|
++ (if cfg.enableDevPkgs then devPkgs else [])
|
||||||
;
|
;
|
||||||
|
|
|
@ -24,6 +24,15 @@ let
|
||||||
description = ''
|
description = ''
|
||||||
package, or `null` if the program is some sort of meta set (in which case it much EXPLICITLY be set null).
|
package, or `null` if the program is some sort of meta set (in which case it much EXPLICITLY be set null).
|
||||||
'';
|
'';
|
||||||
|
default =
|
||||||
|
let
|
||||||
|
pkgPath = splitString "." name;
|
||||||
|
in
|
||||||
|
# package can be inferred by the attr name, allowing shorthand like
|
||||||
|
# `sane.packages.nano.enable = true;`
|
||||||
|
# this indexing will throw if the package doesn't exist and the user forgets to specify
|
||||||
|
# a valid source explicitly.
|
||||||
|
getAttrFromPath pkgPath pkgs;
|
||||||
};
|
};
|
||||||
enableFor.system = mkOption {
|
enableFor.system = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
|
@ -73,15 +82,6 @@ let
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config =
|
|
||||||
let
|
|
||||||
pkgPath = splitString "." name;
|
|
||||||
in {
|
|
||||||
# package can be inferred by the attr name, allowing shorthand like
|
|
||||||
# `sane.packages.nano.enable = true;`
|
|
||||||
package = mkIf (hasAttrByPath pkgPath pkgs) (mkDefault (getAttrFromPath pkgPath pkgs));
|
|
||||||
};
|
|
||||||
|
|
||||||
});
|
});
|
||||||
toPkgSpec = types.coercedTo types.package (p: { package = p; }) pkgSpec;
|
toPkgSpec = types.coercedTo types.package (p: { package = p; }) pkgSpec;
|
||||||
|
|
||||||
|
@ -91,8 +91,8 @@ let
|
||||||
(p.package != null && p.enableFor.system)
|
(p.package != null && p.enableFor.system)
|
||||||
p.package;
|
p.package;
|
||||||
# conditionally add to user(s) PATH
|
# conditionally add to user(s) PATH
|
||||||
users.users = mapAttrs (user: en: optionalAttrs en {
|
users.users = mapAttrs (user: en: {
|
||||||
packages = [ p.package ];
|
packages = optional (p.package != null && en) p.package;
|
||||||
}) p.enableFor.user;
|
}) p.enableFor.user;
|
||||||
# conditionally persist relevant user dirs
|
# conditionally persist relevant user dirs
|
||||||
sane.users = mapAttrs (user: en: optionalAttrs en {
|
sane.users = mapAttrs (user: en: optionalAttrs en {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user