@@ -3,8 +3,6 @@
{ config , lib , pkgs , . . . }:
with lib ;
let
makeProg = args : pkgs . substituteAll ( args // {
dir = " b i n " ;
@@ -17,11 +15,6 @@ let
'' ;
} ) ;
inherit ( pkgs ) nixos-build-vms ;
nixos-install = pkgs . nixos-install . override { nix = config . nix . package ; } ;
nixos-rebuild = pkgs . nixos-rebuild . override { nix = config . nix . package . out ; } ;
nixos-generate-config = makeProg {
name = " n i x o s - g e n e r a t e - c o n f i g " ;
src = ./nixos-generate-config.pl ;
@@ -34,8 +27,6 @@ let
manPage = ./manpages/nixos-generate-config.8 ;
} ;
inherit ( pkgs ) nixos-option ;
nixos-version = makeProg {
name = " n i x o s - v e r s i o n " ;
src = ./nixos-version.sh ;
@@ -44,23 +35,141 @@ let
inherit ( config . system ) configurationRevision ;
json = builtins . toJSON ( {
nixosVersion = config . system . nixos . version ;
} // optionalAttrs ( config . system . nixos . revision != null ) {
} // lib . optionalAttrs ( config . system . nixos . revision != null ) {
nixpkgsRevision = config . system . nixos . revision ;
} // optionalAttrs ( config . system . configurationRevision != null ) {
} // lib . optionalAttrs ( config . system . configurationRevision != null ) {
configurationRevision = config . system . configurationRevision ;
} ) ;
manPage = ./manpages/nixos-version.8 ;
} ;
inherit ( pkgs ) nixos-enter ;
nixos-install = pkgs . nixos-install . override { nix = config . nix . package ; } ;
nixos-rebuild = pkgs . nixos-rebuild . override { nix = config . nix . package ; } ;
defaultConfigTemplate = ''
# E d i t t h i s c o n f i g u r a t i o n f i l e t o d e f i n e w h a t s h o u l d b e i n s t a l l e d o n
# y o u r s y s t e m . H e l p i s a v a i l a b l e i n t h e c o n f i g u r a t i o n . n i x ( 5 ) m a n p a g e , o n
# h t t p s : / / s e a r c h . n i x o s . o r g / o p t i o n s a n d i n t h e N i x O S m a n u a l ( ` n i x o s - h e l p ` ) .
{ c o n f i g , l i b , p k g s , . . . } :
{
i m p o r t s =
[ # I n c l u d e t h e r e s u l t s o f t h e h a r d w a r e s c a n .
. / h a r d w a r e - c o n f i g u r a t i o n . n i x
] ;
$b o o t L o a d e r C o n f i g
# n e t w o r k i n g . h o s t N a m e = " n i x o s " ; # D e f i n e y o u r h o s t n a m e .
# P i c k o n l y o n e o f t h e b e l o w n e t w o r k i n g o p t i o n s .
# n e t w o r k i n g . w i r e l e s s . e n a b l e = t r u e ; # E n a b l e s w i r e l e s s s u p p o r t v i a w p a _ s u p p l i c a n t .
# n e t w o r k i n g . n e t w o r k m a n a g e r . e n a b l e = t r u e ; # E a s i e s t t o u s e a n d m o s t d i s t r o s u s e t h i s b y d e f a u l t .
# S e t y o u r t i m e z o n e .
# t i m e . t i m e Z o n e = " E u r o p e / A m s t e r d a m " ;
# C o n f i g u r e n e t w o r k p r o x y i f n e c e s s a r y
# n e t w o r k i n g . p r o x y . d e f a u l t = " h t t p : / / u s e r : p a s s w o r d \ @ p r o x y : p o r t / " ;
# n e t w o r k i n g . p r o x y . n o P r o x y = " 1 2 7 . 0 . 0 . 1 , l o c a l h o s t , i n t e r n a l . d o m a i n " ;
# S e l e c t i n t e r n a t i o n a l i s a t i o n p r o p e r t i e s .
# i 1 8 n . d e f a u l t L o c a l e = " e n _ U S . U T F - 8 " ;
# c o n s o l e = {
# f o n t = " L a t 2 - T e r m i n u s 1 6 " ;
# k e y M a p = " u s " ;
# u s e X k b C o n f i g = t r u e ; # u s e x k b . o p t i o n s i n t t y .
# } ;
$x s e r v e r C o n f i g
$d e s k t o p C o n f i g u r a t i o n
# C o n f i g u r e k e y m a p i n X 1 1
# s e r v i c e s . x s e r v e r . x k b . l a y o u t = " u s " ;
# s e r v i c e s . x s e r v e r . x k b . o p t i o n s = " e u r o s i g n : e , c a p s : e s c a p e " ;
# E n a b l e C U P S t o p r i n t d o c u m e n t s .
# s e r v i c e s . p r i n t i n g . e n a b l e = t r u e ;
# E n a b l e s o u n d .
# h a r d w a r e . p u l s e a u d i o . e n a b l e = t r u e ;
# O R
# s e r v i c e s . p i p e w i r e = {
# e n a b l e = t r u e ;
# p u l s e . e n a b l e = t r u e ;
# } ;
# E n a b l e t o u c h p a d s u p p o r t ( e n a b l e d d e f a u l t i n m o s t d e s k t o p M a n a g e r ) .
# s e r v i c e s . l i b i n p u t . e n a b l e = t r u e ;
# D e f i n e a u s e r a c c o u n t . D o n ' t f o r g e t t o s e t a p a s s w o r d w i t h ‘ p a s s w d ’ .
# u s e r s . u s e r s . a l i c e = {
# i s N o r m a l U s e r = t r u e ;
# e x t r a G r o u p s = [ " w h e e l " ] ; # E n a b l e ‘ s u d o ’ f o r t h e u s e r .
# p a c k a g e s = w i t h p k g s ; [
# f i r e f o x
# t r e e
# ] ;
# } ;
# L i s t p a c k a g e s i n s t a l l e d i n s y s t e m p r o f i l e . T o s e a r c h , r u n :
# \ $ n i x s e a r c h w g e t
# e n v i r o n m e n t . s y s t e m P a c k a g e s = w i t h p k g s ; [
# v i m # D o n o t f o r g e t t o a d d a n e d i t o r t o e d i t c o n f i g u r a t i o n . n i x ! T h e N a n o e d i t o r i s a l s o i n s t a l l e d b y d e f a u l t .
# w g e t
# ] ;
# S o m e p r o g r a m s n e e d S U I D w r a p p e r s , c a n b e c o n f i g u r e d f u r t h e r o r a r e
# s t a r t e d i n u s e r s e s s i o n s .
# p r o g r a m s . m t r . e n a b l e = t r u e ;
# p r o g r a m s . g n u p g . a g e n t = {
# e n a b l e = t r u e ;
# e n a b l e S S H S u p p o r t = t r u e ;
# } ;
# L i s t s e r v i c e s t h a t y o u w a n t t o e n a b l e :
# E n a b l e t h e O p e n S S H d a e m o n .
# s e r v i c e s . o p e n s s h . e n a b l e = t r u e ;
# O p e n p o r t s i n t h e f i r e w a l l .
# n e t w o r k i n g . f i r e w a l l . a l l o w e d T C P P o r t s = [ . . . ] ;
# n e t w o r k i n g . f i r e w a l l . a l l o w e d U D P P o r t s = [ . . . ] ;
# O r d i s a b l e t h e f i r e w a l l a l t o g e t h e r .
# n e t w o r k i n g . f i r e w a l l . e n a b l e = f a l s e ;
# C o p y t h e N i x O S c o n f i g u r a t i o n f i l e a n d l i n k i t f r o m t h e r e s u l t i n g s y s t e m
# ( / r u n / c u r r e n t - s y s t e m / c o n f i g u r a t i o n . n i x ) . T h i s i s u s e f u l i n c a s e y o u
# a c c i d e n t a l l y d e l e t e c o n f i g u r a t i o n . n i x .
# s y s t e m . c o p y S y s t e m C o n f i g u r a t i o n = t r u e ;
# T h i s o p t i o n d e f i n e s t h e f i r s t v e r s i o n o f N i x O S y o u h a v e i n s t a l l e d o n t h i s p a r t i c u l a r m a c h i n e ,
# a n d i s u s e d t o m a i n t a i n c o m p a t i b i l i t y w i t h a p p l i c a t i o n d a t a ( e . g . d a t a b a s e s ) c r e a t e d o n o l d e r N i x O S v e r s i o n s .
#
# M o s t u s e r s s h o u l d N E V E R c h a n g e t h i s v a l u e a f t e r t h e i n i t i a l i n s t a l l , f o r a n y r e a s o n ,
# e v e n i f y o u ' v e u p g r a d e d y o u r s y s t e m t o a n e w N i x O S r e l e a s e .
#
# T h i s v a l u e d o e s N O T a f f e c t t h e N i x p k g s v e r s i o n y o u r p a c k a g e s a n d O S a r e p u l l e d f r o m ,
# s o c h a n g i n g i t w i l l N O T u p g r a d e y o u r s y s t e m - s e e h t t p s : / / n i x o s . o r g / m a n u a l / n i x o s / s t a b l e / # s e c - u p g r a d i n g f o r h o w
# t o a c t u a l l y d o t h a t .
#
# T h i s v a l u e b e i n g l o w e r t h a n t h e c u r r e n t N i x O S r e l e a s e d o e s N O T m e a n y o u r s y s t e m i s
# o u t o f d a t e , o u t o f s u p p o r t , o r v u l n e r a b l e .
#
# D o N O T c h a n g e t h i s v a l u e u n l e s s y o u h a v e m a n u a l l y i n s p e c t e d a l l t h e c h a n g e s i t w o u l d m a k e t o y o u r c o n f i g u r a t i o n ,
# a n d m i g r a t e d y o u r d a t a a c c o r d i n g l y .
#
# F o r m o r e i n f o r m a t i o n , s e e ` m a n c o n f i g u r a t i o n . n i x ` o r h t t p s : / / n i x o s . o r g / m a n u a l / n i x o s / s t a b l e / o p t i o n s # o p t - s y s t e m . s t a t e V e r s i o n .
s y s t e m . s t a t e V e r s i o n = " ${ config . system . nixos . release } " ; # D i d y o u r e a d t h e c o m m e n t ?
}
'' ;
in
{
options . system . nixos-generate-config = {
configuration = mkOption {
configuration = lib . mkOption {
internal = true ;
type = types . str ;
type = lib . types . str ;
default = defaultConfigTemplate ;
description = ''
T h e N i x O S m o d u l e t h a t ` n i x o s - g e n e r a t e - c o n f i g `
s a v e s t o ` / e t c / n i x o s / c o n f i g u r a t i o n . n i x ` .
@@ -74,9 +183,9 @@ in
'' ;
} ;
desktopConfiguration = mkOption {
desktopConfiguration = lib . mkOption {
internal = true ;
type = types . listOf types . lines ;
type = lib . types . listOf lib . types . lines ;
default = [ ] ;
description = ''
T e x t t o p r e s e e d t h e d e s k t o p c o n f i g u r a t i o n t h a t ` n i x o s - g e n e r a t e - c o n f i g `
@@ -92,9 +201,9 @@ in
} ;
} ;
options . system . disableInstallerTools = mkOption {
options . system . disableInstallerTools = lib . mkOption {
internal = true ;
type = types . bool ;
type = lib . types . bool ;
default = false ;
description = ''
D i s a b l e n i x o s - r e b u i l d , n i x o s - g e n e r a t e - c o n f i g , n i x o s - i n s t a l l e r
@@ -104,145 +213,48 @@ in
'' ;
} ;
config = lib . mkMerge [ ( lib . mkIf ( config . nix . enable && ! config . system . disableInstallerTools ) {
imports = let
mkToolModule = { name , package ? pkgs . ${ name } }: { config , . . . }: {
options . system . tools . ${ name } . enable = lib . mkEnableOption " ${ name } s c r i p t " // {
default = true ;
internal = true ;
} ;
system . nixos-generate-config . configuration = mkDefault ''
# E d i t t h i s c o n f i g u r a t i o n f i l e t o d e f i n e w h a t s h o u l d b e i n s t a l l e d o n
# y o u r s y s t e m . H e l p i s a v a i l a b l e i n t h e c o n f i g u r a t i o n . n i x ( 5 ) m a n p a g e , o n
# h t t p s : / / s e a r c h . n i x o s . o r g / o p t i o n s a n d i n t h e N i x O S m a n u a l ( ` n i x o s - h e l p ` ) .
{ c o n f i g , l i b , p k g s , . . . } :
{
i m p o r t s =
[ # I n c l u d e t h e r e s u l t s o f t h e h a r d w a r e s c a n .
. / h a r d w a r e - c o n f i g u r a t i o n . n i x
] ;
$b o o t L o a d e r C o n f i g
# n e t w o r k i n g . h o s t N a m e = " n i x o s " ; # D e f i n e y o u r h o s t n a m e .
# P i c k o n l y o n e o f t h e b e l o w n e t w o r k i n g o p t i o n s .
# n e t w o r k i n g . w i r e l e s s . e n a b l e = t r u e ; # E n a b l e s w i r e l e s s s u p p o r t v i a w p a _ s u p p l i c a n t .
# n e t w o r k i n g . n e t w o r k m a n a g e r . e n a b l e = t r u e ; # E a s i e s t t o u s e a n d m o s t d i s t r o s u s e t h i s b y d e f a u l t .
# S e t y o u r t i m e z o n e .
# t i m e . t i m e Z o n e = " E u r o p e / A m s t e r d a m " ;
# C o n f i g u r e n e t w o r k p r o x y i f n e c e s s a r y
# n e t w o r k i n g . p r o x y . d e f a u l t = " h t t p : / / u s e r : p a s s w o r d \ @ p r o x y : p o r t / " ;
# n e t w o r k i n g . p r o x y . n o P r o x y = " 1 2 7 . 0 . 0 . 1 , l o c a l h o s t , i n t e r n a l . d o m a i n " ;
# S e l e c t i n t e r n a t i o n a l i s a t i o n p r o p e r t i e s .
# i 1 8 n . d e f a u l t L o c a l e = " e n _ U S . U T F - 8 " ;
# c o n s o l e = {
# f o n t = " L a t 2 - T e r m i n u s 1 6 " ;
# k e y M a p = " u s " ;
# u s e X k b C o n f i g = t r u e ; # u s e x k b . o p t i o n s i n t t y .
# } ;
$x s e r v e r C o n f i g
$d e s k t o p C o n f i g u r a t i o n
# C o n f i g u r e k e y m a p i n X 1 1
# s e r v i c e s . x s e r v e r . x k b . l a y o u t = " u s " ;
# s e r v i c e s . x s e r v e r . x k b . o p t i o n s = " e u r o s i g n : e , c a p s : e s c a p e " ;
# E n a b l e C U P S t o p r i n t d o c u m e n t s .
# s e r v i c e s . p r i n t i n g . e n a b l e = t r u e ;
# E n a b l e s o u n d .
# h a r d w a r e . p u l s e a u d i o . e n a b l e = t r u e ;
# O R
# s e r v i c e s . p i p e w i r e = {
# e n a b l e = t r u e ;
# p u l s e . e n a b l e = t r u e ;
# } ;
# E n a b l e t o u c h p a d s u p p o r t ( e n a b l e d d e f a u l t i n m o s t d e s k t o p M a n a g e r ) .
# s e r v i c e s . l i b i n p u t . e n a b l e = t r u e ;
# D e f i n e a u s e r a c c o u n t . D o n ' t f o r g e t t o s e t a p a s s w o r d w i t h ‘ p a s s w d ’ .
# u s e r s . u s e r s . a l i c e = {
# i s N o r m a l U s e r = t r u e ;
# e x t r a G r o u p s = [ " w h e e l " ] ; # E n a b l e ‘ s u d o ’ f o r t h e u s e r .
# p a c k a g e s = w i t h p k g s ; [
# f i r e f o x
# t r e e
# ] ;
# } ;
# L i s t p a c k a g e s i n s t a l l e d i n s y s t e m p r o f i l e . T o s e a r c h , r u n :
# \ $ n i x s e a r c h w g e t
# e n v i r o n m e n t . s y s t e m P a c k a g e s = w i t h p k g s ; [
# v i m # D o n o t f o r g e t t o a d d a n e d i t o r t o e d i t c o n f i g u r a t i o n . n i x ! T h e N a n o e d i t o r i s a l s o i n s t a l l e d b y d e f a u l t .
# w g e t
# ] ;
# S o m e p r o g r a m s n e e d S U I D w r a p p e r s , c a n b e c o n f i g u r e d f u r t h e r o r a r e
# s t a r t e d i n u s e r s e s s i o n s .
# p r o g r a m s . m t r . e n a b l e = t r u e ;
# p r o g r a m s . g n u p g . a g e n t = {
# e n a b l e = t r u e ;
# e n a b l e S S H S u p p o r t = t r u e ;
# } ;
# L i s t s e r v i c e s t h a t y o u w a n t t o e n a b l e :
# E n a b l e t h e O p e n S S H d a e m o n .
# s e r v i c e s . o p e n s s h . e n a b l e = t r u e ;
# O p e n p o r t s i n t h e f i r e w a l l .
# n e t w o r k i n g . f i r e w a l l . a l l o w e d T C P P o r t s = [ . . . ] ;
# n e t w o r k i n g . f i r e w a l l . a l l o w e d U D P P o r t s = [ . . . ] ;
# O r d i s a b l e t h e f i r e w a l l a l t o g e t h e r .
# n e t w o r k i n g . f i r e w a l l . e n a b l e = f a l s e ;
# C o p y t h e N i x O S c o n f i g u r a t i o n f i l e a n d l i n k i t f r o m t h e r e s u l t i n g s y s t e m
# ( / r u n / c u r r e n t - s y s t e m / c o n f i g u r a t i o n . n i x ) . T h i s i s u s e f u l i n c a s e y o u
# a c c i d e n t a l l y d e l e t e c o n f i g u r a t i o n . n i x .
# s y s t e m . c o p y S y s t e m C o n f i g u r a t i o n = t r u e ;
# T h i s o p t i o n d e f i n e s t h e f i r s t v e r s i o n o f N i x O S y o u h a v e i n s t a l l e d o n t h i s p a r t i c u l a r m a c h i n e ,
# a n d i s u s e d t o m a i n t a i n c o m p a t i b i l i t y w i t h a p p l i c a t i o n d a t a ( e . g . d a t a b a s e s ) c r e a t e d o n o l d e r N i x O S v e r s i o n s .
#
# M o s t u s e r s s h o u l d N E V E R c h a n g e t h i s v a l u e a f t e r t h e i n i t i a l i n s t a l l , f o r a n y r e a s o n ,
# e v e n i f y o u ' v e u p g r a d e d y o u r s y s t e m t o a n e w N i x O S r e l e a s e .
#
# T h i s v a l u e d o e s N O T a f f e c t t h e N i x p k g s v e r s i o n y o u r p a c k a g e s a n d O S a r e p u l l e d f r o m ,
# s o c h a n g i n g i t w i l l N O T u p g r a d e y o u r s y s t e m - s e e h t t p s : / / n i x o s . o r g / m a n u a l / n i x o s / s t a b l e / # s e c - u p g r a d i n g f o r h o w
# t o a c t u a l l y d o t h a t .
#
# T h i s v a l u e b e i n g l o w e r t h a n t h e c u r r e n t N i x O S r e l e a s e d o e s N O T m e a n y o u r s y s t e m i s
# o u t o f d a t e , o u t o f s u p p o r t , o r v u l n e r a b l e .
#
# D o N O T c h a n g e t h i s v a l u e u n l e s s y o u h a v e m a n u a l l y i n s p e c t e d a l l t h e c h a n g e s i t w o u l d m a k e t o y o u r c o n f i g u r a t i o n ,
# a n d m i g r a t e d y o u r d a t a a c c o r d i n g l y .
#
# F o r m o r e i n f o r m a t i o n , s e e ` m a n c o n f i g u r a t i o n . n i x ` o r h t t p s : / / n i x o s . o r g / m a n u a l / n i x o s / s t a b l e / o p t i o n s # o p t - s y s t e m . s t a t e V e r s i o n .
s y s t e m . s t a t e V e r s i o n = " ${ config . system . nixos . release } " ; # D i d y o u r e a d t h e c o m m e n t ?
}
'' ;
environment . systemPackages =
[ nixos-build-vms
nixos-install
nixos-rebuild
nixos-generate-config
nixos-option
nixos-version
nixos-enter
] ;
documentation . man . man-db . skipPackages = [ nixos-version ] ;
} )
# These may be used in auxiliary scripts (ie not part of toplevel), so they are defined unconditionally.
( {
system . build = {
inherit nixos-install nixos-generate-config nixos-option nixos-rebuild nixos-enter ;
config = lib . mkIf config . system . tools . ${ name } . enable {
environment . systemPackages = [ package ] ;
} ;
} ;
} ) ] ;
in [
( mkToolModule { name = " n i x o s - b u i l d - v m s " ; } )
( mkToolModule { name = " n i x o s - e n t e r " ; } )
( mkToolModule { name = " n i x o s - g e n e r a t e - c o n f i g " ; package = nixos-generate-config ; } )
( mkToolModule { name = " n i x o s - i n s t a l l " ; package = nixos-install ; } )
( mkToolModule { name = " n i x o s - o p t i o n " ; } )
( mkToolModule { name = " n i x o s - r e b u i l d " ; package = nixos-rebuild ; } )
( mkToolModule { name = " n i x o s - v e r s i o n " ; package = nixos-version ; } )
] ;
config = lib . mkMerge [
( lib . mkIf config . system . disableInstallerTools {
system . tools = {
nixos-build-vms . enable = false ;
nixos-enter . enable = false ;
nixos-generate-config . enable = false ;
nixos-install . enable = false ;
nixos-option . enable = false ;
nixos-rebuild . enable = false ;
nixos-version . enable = false ;
} ;
} )
{
documentation . man . man-db . skipPackages = [ nixos-version ] ;
# These may be used in auxiliary scripts (ie not part of toplevel), so they are defined unconditionally.
system . build = {
inherit nixos-generate-config nixos-install nixos-rebuild ;
nixos-option = lib . warn " A c c e s s i n g n i x o s - o p t i o n t h r o u g h ` c o n f i g . s y s t e m . b u i l d ` i s d e p r e c a t e d , u s e ` p k g s . n i x o s - o p t i o n ` i n s t e a d . " pkgs . nixos-option ;
nixos-enter = lib . warn " A c c e s s i n g n i x o s - e n t e r t h r o u g h ` c o n f i g . s y s t e m . b u i l d ` i s d e p r e c a t e d , u s e ` p k g s . n i x o s - e n t e r ` i n s t e a d . " pkgs . nixos-enter ;
} ;
}
] ;
}