Reworked pkgsets implementation again, still not really what I want yet.

This commit is contained in:
Kevin Baensch 2019-10-23 03:44:17 +02:00
parent cc21ece351
commit c33b4517a7
20 changed files with 364 additions and 290 deletions

View file

@ -1,4 +1,4 @@
{ lib, ... }: { pkgs, lib, ... }:
with lib; with lib;
@ -7,7 +7,6 @@ with lib;
../../options/machine.nix ../../options/machine.nix
../../options/copySysConf.nix ../../options/copySysConf.nix
]; ];
config.machine = { config.machine = {
allowUnfree = true; allowUnfree = true;
hostName = "Lilim"; hostName = "Lilim";

View file

@ -1,16 +1,42 @@
{ lib, ... }: { config, lib, ... }:
with builtins;
with lib; with lib;
{ let
cfg = config.machine;
metapkgs = (lists.forEach
(attrNames (filterAttrs (n: v: v == "regular" ) (readDir ../pkgs/pkgsets)))
(v: replaceStrings [ ".nix" ] [ "" ] v));
pkgOption = pname: {
name = pname;
value = rec {
pkgwrap = mkOption {
type = types.listOf types.package;
default = cfg.pkgsets."${pname}".pkgs;
description = ''
Package Wrapper for packages using a wrapper function (like python, emacs, haskell, ...)
'';
};
pkgs = mkOption {
type = with types; listOf (nullOr attrs);
default = [];
description = ''
${pname} package list.
'';
};
};
};
in {
options.machine = { options.machine = {
pkgs = mkOption { pkgs = mkOption {
type = types.listOf types.str; type = (types.listOf (types.enum metapkgs));
default = [ "base" ]; default = [ "base" ];
description = '' description = ''
The list of metapackages to be installed. The list of metapackages to be installed.
''; '';
}; };
pkgsets = listToAttrs (map pkgOption metapkgs);
services = mkOption { services = mkOption {
type = types.listOf types.str; type = types.listOf types.str;
default = []; default = [];

View file

@ -1,12 +1,16 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
{ let
callPackage = pkgs.callPackage;
in {
nixpkgs.config = { nixpkgs.config = {
allowUnfree = true; allowUnfree = true;
mpv.vaapiSupport = (lib.elem "xserver" config.machine.services); mpv.vaapiSupport = (lib.elem "xserver" config.machine.services);
packageOverrides = { packageOverrides = {
pkgsets = import ./pkgsets.nix { inherit config lib pkgs; }; theme_flat-remix = callPackage ./flat-remix { };
theme_sddm_midnight = callPackage ./sddm_midnight { };
xdiskusage = callPackage ./xdiskusage { };
}; };
}; };
} }

View file

@ -1,279 +0,0 @@
{ config, lib, pkgs }:
with lib;
let
cfg = config.machine;
gitpkgs = import /nixpkgs {};
stablepkgs = import <nixos-stable> {};
callPackage = pkgs.callPackage;
theme_flat-remix = callPackage ./flat-remix { };
theme_sddm_midnight = callPackage ./sddm_midnight { };
xdiskusage = callPackage ./xdiskusage { };
in {
# Programms I'm likely to want on every machine and/or may execute as root
base = with pkgs; [
alsaUtils
finger_bsd
ccze
cksfv
cryptsetup
dhcpcd
dnsutils
gitFull git-lfs
gnupg
gptfdisk
haskellPackages.nix-derivation
home-manager
htop
hwinfo
indent
iptables
jp
lrzip
lsof
lshw
macchanger
mkpasswd
netcat
nix-diff
nix-index
nix-plugins
nix-prefetch-git
nix-serve
nix-update-source
nix-zsh-completions
nixbang
nixops
nmap
nox
ntfs3g
oh-my-zsh
openssl
parted
p7zip
pciutils
psmisc
rfkill
ripgrep
rsync
sl
sysvtools
telnet
traceroute
tree
unrar
unzipNLS
usbutils
vim
vulnix
wget
whois
wirelesstools
wpa_supplicant
zip unzipNLS
zlib
zsh
];
dict = with pkgs; [
translate-shell
( hunspellWithDicts (with pkgs.hunspellDicts; [ de-de en-us ] ))
( aspellWithDicts (d: with d; [ de en en-computers en-science ] ))
];
emacs = gitpkgs.emacsWithPackages (epkgs: with epkgs; [
/* Theming */
solarized-theme color-theme-sanityinc-tomorrow moe-theme powerline moody minions
/*General Stuff */
rainbow-delimiters # color parenthesis by indentation
color-identifiers-mode
/* Python */
company-jedi pylint elpy flycheck-mypy
/* Git support */
magit
emms # multimedia support
wsd-mode
plantuml-mode
/* Other Stuff, not yet sorted */
mu4e-alert
google-translate
tramp
transmission
org-plus-contrib orgit ox-gfm ox-rst
easy-jekyll markdown-mode impatient-mode simple-httpd htmlize
eclim
auto-complete
pkgs.aspell pkgs.aspellDicts.en pkgs.aspellDicts.de
use-package diminish bind-key
smartparens
evil-surround evil-indent-textobject evil-cleverparens avy undo-tree
cdlatex # for math expressions
helm
/* LaTeX */ auctex helm-bibtex cdlatex
markdown-mode
flycheck
pkgs.ledger
yaml-mode
company
# Irony is currently broken.
/* C/C++ */ irony company-irony company-irony-c-headers flycheck-irony clang-format pkgs.clang-tools
/* Haskell */ haskell-mode flycheck-haskell
/* Org */ org org-ref pdf-tools org-bullets org-caldav
/* Rust */ rust-mode flycheck-rust racer
/* mail */ messages-are-flowing
/* Nix */ nix-buffer nix-mode nixos-options company-nixos-options nix-sandbox
paganini-theme
json-navigator
spaceline # modeline beautification
winum eyebrowse # window management
auto-compile
/* Maxima */ pkgs.maxima
visual-fill-column
web-mode
melpaStablePackages.idris-mode helm-idris
/* Java */
# projectile yasnippet lsp-mode hydra company-lsp lsp-ui lsp-java dap-mode
cl-lib meghanada autodisass-java-bytecode google-c-style realgud
weechat
]);
extra = with pkgs; [
imagemagick
texlive.combined.scheme-full
transmission
];
mail_utils = with pkgs; [
fetchmail
isync
mailutils
gitpkgs.mu
pandoc
postfix
];
cpp = with pkgs; [
clang
cmake
gcc
global
irony-server
];
haskell = pkgs.haskellPackages.ghcWithPackages (pkgs: with pkgs; [
hindent
mtl
random
]);
haskell-tools = with pkgs; [ cabal-install hlint]; # ghcid
java = with pkgs; [
openjdk11
maven
(with gitpkgs.eclipses; eclipseWithPlugins {
eclipse = eclipse-platform;
jvmArgs = [ "-Xmx2048m" ];
plugins = with plugins; [
color-theme
# emacsplus
checkstyle
eclemma
];
})
];
python3 = gitpkgs.python3Full.withPackages(ps: with ps; [
GitPython
bpython
# cairosvg cairocffi
configparser
django
emoji
epc
flake8
genanki
mypy
numpy
opencv3
paho-mqtt
pep8
pillow
pip
plotly
pyflakes
pygame pygame_sdl2
pylama
pylint
pyopengl
pyproj
pytest
requests
schedule
scipy
selenium
telegram
tkinter
toolz
virtualenv
xdot
# flask
# flask-common
# flask-compress
# flask-cors
# flask-limiter
# flask-pymongo
# flask-restful
# flask-restplus
# flask_assets
# flask_elastic
# flask_login
# flask_mail
# flask_marshmallow
# flask_migrate
# flask_oauthlib
# flask_principal
# flask_script
# flask_sqlalchemy
# flask_testing
# flask_wtf
# flaskbabel
] ++ optionals (elem "i3" config.machine.desktop.wms) [ py3status pytz tzlocal ]);
rustpkgs = with stablepkgs; [
rustup
carnix
rustracer
];
server = with pkgs; [
audit
letsencrypt
php
simp_le
];
uniProgs = with pkgs; [
qucs
];
xpkgs = with pkgs; [
feh
scrot
theme_flat-remix
theme_sddm_midnight
gnome3.dconf
gnome3.gnome-terminal
gnome3.gvfs
gvfs
oneko
pcmanfm lxmenu-data shared_mime_info
pavucontrol
xclip
xlibs.xkill
xorg.xbacklight
xdiskusage
];
}

68
pkgs/pkgsets/base.nix Normal file
View file

@ -0,0 +1,68 @@
# Programms I'm likely to want on every machine and/or may execute as root
{ config, pkgs, ... }:
{
config.machine.pkgsets.base.pkgs = with pkgs; [
alsaUtils
finger_bsd
ccze
cksfv
cryptsetup
dhcpcd
dnsutils
gitFull git-lfs
gnupg
gptfdisk
haskellPackages.nix-derivation
home-manager
htop
hwinfo
indent
iptables
jp
lrzip
lsof
lshw
macchanger
mkpasswd
netcat
nix-diff
nix-index
nix-plugins
nix-prefetch-git
nix-serve
nix-update-source
nix-zsh-completions
nixbang
nixops
nmap
nox
ntfs3g
oh-my-zsh
openssl
parted
p7zip
pciutils
psmisc
rfkill
ripgrep
rsync
sl
sysvtools
telnet
traceroute
tree
unrar
unzipNLS
usbutils
vim
vulnix
wget
whois
wirelesstools
wpa_supplicant
zip unzipNLS
zlib
zsh
];
}

11
pkgs/pkgsets/cpp.nix Normal file
View file

@ -0,0 +1,11 @@
{ config, pkgs, ... }:
{
config.machine.pkgsets.cpp.pkgs = with pkgs; [
clang
cmake
gcc
global
irony-server
];
}

9
pkgs/pkgsets/dict.nix Normal file
View file

@ -0,0 +1,9 @@
{ config, pkgs, ... }:
{
config.machine.pkgsets.dict.pkgs = with pkgs; [
translate-shell
( hunspellWithDicts (with pkgs.hunspellDicts; [ de-de en-us ] ))
( aspellWithDicts (d: with d; [ de en en-computers en-science ] ))
];
}

62
pkgs/pkgsets/emacs.nix Normal file
View file

@ -0,0 +1,62 @@
{ config, pkgs, ... }:
let
gitpkgs = import /nixpkgs {};
in {
config.machine.pkgsets.emacs.pkgwrap = [ (gitpkgs.emacsWithPackages (epkgs: with epkgs; config.machine.pkgsets.emacs.pkgs)) ];
config.machine.pkgsets.emacs.pkgs = with pkgs; with pkgs.emacsPackages; [
/* Theming */
solarized-theme color-theme-sanityinc-tomorrow moe-theme powerline moody minions
/*General Stuff */
rainbow-delimiters # color parenthesis by indentation
color-identifiers-mode
/* Python */
company-jedi pylint elpy flycheck-mypy
/* Git support */
magit
emms # multimedia support
wsd-mode
plantuml-mode
/* Other Stuff, not yet sorted */
mu4e-alert
google-translate
tramp
transmission
org-plus-contrib orgit ox-gfm ox-rst
easy-jekyll markdown-mode impatient-mode simple-httpd htmlize
eclim
auto-complete
pkgs.aspell pkgs.aspellDicts.en pkgs.aspellDicts.de
use-package diminish bind-key
smartparens
evil-surround evil-indent-textobject evil-cleverparens avy undo-tree
cdlatex # for math expressions
helm
/* LaTeX */ auctex helm-bibtex cdlatex
markdown-mode
flycheck
pkgs.ledger
yaml-mode
company
# Irony is currently broken.
/* C/C++ */ irony company-irony company-irony-c-headers flycheck-irony clang-format pkgs.clang-tools
/* Haskell */ haskell-mode flycheck-haskell
/* Org */ org org-ref pdf-tools org-bullets org-caldav
/* Rust */ rust-mode flycheck-rust racer
/* mail */ messages-are-flowing
/* Nix */ nix-buffer nix-mode nixos-options company-nixos-options nix-sandbox
paganini-theme
json-navigator
spaceline # modeline beautification
winum eyebrowse # window management
auto-compile
/* Maxima */ pkgs.maxima
visual-fill-column
web-mode
melpaStablePackages.idris-mode helm-idris
/* Java */
# projectile yasnippet lsp-mode hydra company-lsp lsp-ui lsp-java dap-mode
cl-lib meghanada autodisass-java-bytecode google-c-style realgud
weechat
];
}

9
pkgs/pkgsets/extra.nix Normal file
View file

@ -0,0 +1,9 @@
{ config, pkgs, ... }:
{
config.machine.pkgsets.extra.pkgs = with pkgs; [
imagemagick
texlive.combined.scheme-full
transmission
];
}

View file

@ -0,0 +1,5 @@
{ config, pkgs, ... }:
{
config.machine.pkgsets.haskell-tools.pkgs = with pkgs; [ cabal-install hlint ]; # ghcid
}

10
pkgs/pkgsets/haskell.nix Normal file
View file

@ -0,0 +1,10 @@
{ config, pkgs, ... }:
{
config.machine.pkgsets.haskell.pkgwrap = [ (pkgs.haskellPackages.ghcWithPackages (pkgs: config.machine.pkgsets.haskell.pkgs)) ];
config.machine.pkgsets.haskell.pkgs = with pkgs.haskellPackages; [
hindent
mtl
random
];
}

18
pkgs/pkgsets/java.nix Normal file
View file

@ -0,0 +1,18 @@
{ config, pkgs, ... }:
{
config.machine.pkgsets.java.pkgs = with pkgs; [
openjdk11
maven
(with gitpkgs.eclipses; eclipseWithPlugins {
eclipse = eclipse-platform;
jvmArgs = [ "-Xmx2048m" ];
plugins = with plugins; [
color-theme
# emacsplus
checkstyle
eclemma
];
})
];
}

View file

@ -0,0 +1,14 @@
{ config, pkgs, ... }:
let
gitpkgs = import /nixpkgs {};
in {
config.machine.pkgsets.mail_utils.pkgs = with pkgs; [
fetchmail
isync
mailutils
gitpkgs.mu
pandoc
postfix
];
}

63
pkgs/pkgsets/python3.nix Normal file
View file

@ -0,0 +1,63 @@
{ config, pkgs, ... }:
let
gitpkgs = import /nixpkgs {};
in {
config.machine.pkgsets.python3.pkgwrap = [ (gitpkgs.python3Full.withPackages (ps: with ps; config.machine.pkgsets.python3.pkgs)) ];
config.machine.pkgsets.python3.pkgs = with gitpkgs.python3Packages; [
GitPython
bpython
# cairosvg cairocffi
configparser
django
emoji
epc
flake8
genanki
mypy
numpy
opencv3
paho-mqtt
pep8
pillow
pip
plotly
pyflakes
pygame pygame_sdl2
pylama
pylint
pyopengl
pyproj
pytest
requests
schedule
scipy
selenium
telegram
tkinter
toolz
virtualenv
xdot
# flask
# flask-common
# flask-compress
# flask-cors
# flask-limiter
# flask-pymongo
# flask-restful
# flask-restplus
# flask_assets
# flask_elastic
# flask_login
# flask_mail
# flask_marshmallow
# flask_migrate
# flask_oauthlib
# flask_principal
# flask_script
# flask_sqlalchemy
# flask_testing
# flask_wtf
# flaskbabel
];
}

11
pkgs/pkgsets/rustpkgs.nix Normal file
View file

@ -0,0 +1,11 @@
{ config, pkgs, ... }:
let
stablepkgs = import <nixos-stable> {};
in {
config.machine.pkgsets.rustpkgs.pkgs = with stablepkgs; [
rustup
carnix
rustracer
];
}

10
pkgs/pkgsets/server.nix Normal file
View file

@ -0,0 +1,10 @@
{ config, pkgs, ... }:
{
config.machine.pkgsets.server.pkgs = with pkgs; [
audit
letsencrypt
php
simp_le
];
}

View file

@ -0,0 +1,5 @@
{ config, pkgs, ... }:
{
config.machine.pkgsets.uniProgs.pkgs = with pkgs; [ qucs ];
}

21
pkgs/pkgsets/xpkgs.nix Normal file
View file

@ -0,0 +1,21 @@
{ config, pkgs, ... }:
{
config.machine.pkgsets.xpkgs.pkgs = with pkgs; [
feh
scrot
theme_flat-remix
theme_sddm_midnight
gnome3.dconf
gnome3.gnome-terminal
gnome3.gvfs
gvfs
oneko
pcmanfm lxmenu-data shared_mime_info
pavucontrol
xclip
xlibs.xkill
xorg.xbacklight
xdiskusage
];
}

View file

@ -4,13 +4,20 @@ with lib;
let let
cfg = config.machine; cfg = config.machine;
pkgsets = (lists.forEach
(attrNames (filterAttrs (n: v: v == "regular") (builtins.readDir ./pkgsets)))
(v: (./. + "/pkgsets/${v}")));
in { in {
environment.systemPackages = flatten (attrVals cfg.pkgs pkgs.pkgsets); imports = pkgsets;
environment.systemPackages = flatten (lists.forEach
(attrVals cfg.pkgs cfg.pkgsets)
(v: v.pkgwrap));
services.emacs = mkIf (elem "emacs" cfg.pkgs) { services.emacs = mkIf (elem "emacs" cfg.pkgs) {
defaultEditor = true; defaultEditor = true;
enable = true; enable = true;
install = true; install = true;
package = pkgs.pkgsets.emacs; package = (elemAt cfg.pkgsets.emacs.pkgwrap 0);
}; };
} }

View file

@ -56,4 +56,5 @@ in mkIf (elem "desktop" cfg.services) {
horizontalScrolling = true; horizontalScrolling = true;
}; };
}; };
machine.pkgsets.python3.pkgs = with pkgs.python3Packages; [ py3status pytz tzlocal ];
} }