@@ -1,700 +0,0 @@
{ pkgs
, profile
, backupFiles ? [ " . c o n f i g / m i m e a p p s . l i s t . b a c k u p " ]
, . . .
}:
let
backupFilesString = pkgs . lib . strings . concatStringsSep " " backupFiles ;
# Create the get-doom script as a dependency
get-doom-script = pkgs . writeShellScriptBin " g e t - d o o m " ''
# ! / u s r / b i n / e n v b a s h
s e t - e u o p i p e f a i l
# - - - I c o n s - - -
I C O N _ C H E C K = " ✔ "
I C O N _ I N F O = " ℹ "
I C O N _ R O C K E T = " 🚀 "
# - - - H e l p e r F u n c t i o n s - - -
p r i n t _ s t a t u s ( ) {
e c h o
e c h o " - - - $I C O N _ I N F O $1 - - - "
}
p r i n t _ s u c c e s s ( ) {
e c h o " - - - $I C O N _ C H E C K $1 - - - "
}
p r i n t _ b a n n e r ( ) {
e c h o " = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = "
e c h o " D o o m E m a c s I n s t a l l e r $I C O N _ R O C K E T "
e c h o " = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = "
}
i s _ d o o m _ i n s t a l l e d ( ) {
l o c a l d i r = " $1 "
[ [ - x " $d i r / b i n / d o o m " ] ] & & [ [ - f " $d i r / c o r e / d o o m . e l " ] ]
}
e m a c s d i r _ i s _ e m p t y ( ) {
l o c a l d i r = " $1 "
[ [ - d " $d i r " ] ] & & [ [ - z " $( l s - A " $d i r " 2 > / d e v / n u l l ) " ] ]
}
# - - - M a i n S c r i p t - - -
p r i n t _ b a n n e r
E M A C S D I R = " $H O M E / . e m a c s . d "
i f i s _ d o o m _ i n s t a l l e d " $E M A C S D I R " ; t h e n
p r i n t _ s u c c e s s " D o o m E m a c s i s a l r e a d y i n s t a l l e d . "
e x i t 0
f i
i f [ [ - d " $E M A C S D I R " ] ] ; t h e n
i f e m a c s d i r _ i s _ e m p t y " $E M A C S D I R " ; t h e n
p r i n t _ s t a t u s " F o u n d e m p t y $E M A C S D I R ; p r o c e e d i n g t o i n s t a l l D o o m E m a c s i n t o i t . . . "
e l s e
e c h o " E r r o r : F o u n d $E M A C S D I R b u t i t d o e s n o t l o o k l i k e a D o o m E m a c s i n s t a l l a t i o n . " > & 2
e c h o " R e f u s i n g t o o v e r w r i t e a n o n - e m p t y d i r e c t o r y . M o v e i t a w a y a n d r e - r u n , e . g . : " > & 2
e c h o " m v \ " $E M A C S D I R \ " \ " $E M A C S D I R . b a k \ " " > & 2
e x i t 1
f i
f i
p r i n t _ s t a t u s " C l o n i n g D o o m E m a c s . . . "
${ pkgs . git } / b i n / g i t c l o n e - - d e p t h 1 h t t p s : / / g i t h u b . c o m / d o o m e m a c s / d o o m e m a c s " $E M A C S D I R "
p r i n t _ s u c c e s s " D o o m E m a c s c l o n e d . "
p r i n t _ s t a t u s " R u n n i n g D o o m i n s t a l l . . . "
" $E M A C S D I R / b i n / d o o m " i n s t a l l
p r i n t _ s u c c e s s " D o o m i n s t a l l c o m p l e t e . "
p r i n t _ s t a t u s " R u n n i n g d o o m s y n c . . . "
" $E M A C S D I R / b i n / d o o m " s y n c
p r i n t _ s u c c e s s " D o o m s y n c c o m p l e t e . "
e c h o
p r i n t _ s u c c e s s " A l l d o n e ! D o o m E m a c s i s r e a d y t o u s e . "
'' ;
in
pkgs . writeShellScriptBin " z c l i " ''
# ! ${ pkgs . bash } / b i n / b a s h
s e t - e u o p i p e f a i l
# - - - P r o g r a m i n f o - - -
#
# z c l i - N i x O S S y s t e m M a n a g e m e n t C L I
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
#
# P u r p o s e : N i x O S s y s t e m m a n a g e m e n t u t i l i t y f o r Z a n e y O S d i s t r i b u t i o n
# A u t h o r : D o n W i l l i a m s ( d d u b s ) & Z a n e y
# S t a r t D a t e : J u n e 7 t h , 2 0 2 5
# V e r s i o n : 1 . 0 . 2
#
# A r c h i t e c t u r e :
# - N i x - g e n e r a t e d s h e l l s c r i p t u s i n g w r i t e S h e l l S c r i p t B i n
# - C o n f i g u r a t i o n v i a N i x p a r a m e t e r s ( p r o f i l e , b a c k u p F i l e s )
# - U s e s ' n h ' t o o l f o r N i x O S o p e r a t i o n s , ' i n x i ' f o r d i a g n o s t i c s
# - G i t i n t e g r a t i o n f o r h o s t c o n f i g u r a t i o n v e r s i o n i n g
#
# H e l p e r F u n c t i o n s :
# v e r i f y _ h o s t n a m e ( ) - V a l i d a t e s c u r r e n t h o s t n a m e a g a i n s t f l a k e . n i x h o s t v a r i a b l e
# E x i t s w i t h e r r o r i f m i s m a t c h o r m i s s i n g h o s t d i r e c t o r y
# d e t e c t _ g p u _ p r o f i l e ( ) - P a r s e s l s p c i o u t p u t t o i d e n t i f y G P U h a r d w a r e
# R e t u r n s : n v i d i a / n v i d i a - l a p t o p / a m d / i n t e l / v m / e m p t y
# h a n d l e _ b a c k u p s ( ) - R e m o v e s f i l e s l i s t e d i n B A C K U P _ F I L E S a r r a y f r o m $H O M E
# p a r s e _ n h _ a r g s ( ) - P a r s e s c o m m a n d - l i n e a r g u m e n t s f o r n h o p e r a t i o n s
# p r i n t _ h e l p ( ) - O u t p u t s c o m m a n d u s a g e a n d a v a i l a b l e o p e r a t i o n s
#
# C o m m a n d F u n c t i o n s :
# c l e a n u p - I n t e r a c t i v e c l e a n u p o f o l d g e n e r a t i o n s v i a ' n h c l e a n '
# d i a g - G e n e r a t e s y s t e m r e p o r t u s i n g ' i n x i - - f u l l '
# l i s t - g e n s - D i s p l a y u s e r / s y s t e m g e n e r a t i o n s v i a n i x - e n v a n d n i x p r o f i l e
# r e b u i l d - N i x O S r e b u i l d u s i n g ' n h o s s w i t c h '
# r e b u i l d - b o o t - N i x O S r e b u i l d f o r n e x t b o o t u s i n g ' n h o s b o o t '
# t r i m - S S D o p t i m i z a t i o n v i a ' s u d o f s t r i m - v / '
# u p d a t e - F l a k e u p d a t e + r e b u i l d u s i n g ' n h o s s w i t c h - - u p d a t e '
# u p d a t e - h o s t - M o d i f y f l a k e . n i x h o s t / p r o f i l e v a r i a b l e s v i a s e d
# a d d - h o s t - A d d n e w h o s t c o n f i g u r a t i o n
# d e l - h o s t - D e l e t e h o s t c o n f i g u r a t i o n
# d o o m [ s u b ] - D o o m E m a c s m a n a g e m e n t ( i n s t a l l / s t a t u s / r e m o v e / u p d a t e )
#
# V a r i a b l e s :
# P R O J E C T - B a s e d i r e c t o r y n a m e ( d d u b s o s / z a n e y o s )
# P R O F I L E - H a r d w a r e p r o f i l e f r o m N i x p a r a m e t e r
# B A C K U P _ F I L E S - A r r a y o f b a c k u p f i l e p a t h s t o c l e a n
# F L A K E _ N I X _ P A T H - P a t h t o f l a k e . n i x f o r h o s t / p r o f i l e u p d a t e s
#
# - - - C o n f i g u r a t i o n - - -
P R O J E C T = " z a n e y o s " # d d u b o s o r z a n e y o s
P R O F I L E = " ${ profile } "
B A C K U P _ F I L E S _ S T R = " ${ backupFilesString } "
V E R S I O N = " 1 . 0 . 2 "
F L A K E _ N I X _ P A T H = " $H O M E / $P R O J E C T / f l a k e . n i x "
r e a d - r - a B A C K U P _ F I L E S < < < " $B A C K U P _ F I L E S _ S T R "
# - - - H e l p e r F u n c t i o n s - - -
v e r i f y _ h o s t n a m e ( ) {
l o c a l c u r r e n t _ h o s t n a m e
l o c a l f l a k e _ h o s t n a m e
c u r r e n t _ h o s t n a m e = " $( h o s t n a m e ) "
# E x t r a c t t h e h o s t v a l u e f r o m f l a k e . n i x
i f [ - f " $F L A K E _ N I X _ P A T H " ] ; t h e n
f l a k e _ h o s t n a m e = $( ${ pkgs . gnugrep } / b i n / g r e p - E ' ^ [ [ : s p a c e : ] ] * h o s t [ [ : s p a c e : ] ] * = ' " $F L A K E _ N I X _ P A T H " | ${ pkgs . gnused } / b i n / s e d ' s / . * = [ [ : s p a c e : ] ] * " \ ( [ ^ " ] * \ ) " . * / \ 1 / ' )
i f [ - z " $f l a k e _ h o s t n a m e " ] ; t h e n
e c h o " E r r o r : C o u l d n o t f i n d ' h o s t ' v a r i a b l e i n $F L A K E _ N I X _ P A T H " > & 2
e x i t 1
f i
i f [ " $c u r r e n t _ h o s t n a m e " ! = " $f l a k e _ h o s t n a m e " ] ; t h e n
e c h o " E r r o r : H o s t n a m e m i s m a t c h ! " > & 2
e c h o " C u r r e n t h o s t n a m e : ' $c u r r e n t _ h o s t n a m e ' " > & 2
e c h o " F l a k e . n i x h o s t : ' $f l a k e _ h o s t n a m e ' " > & 2
e c h o " " > & 2
e c h o " H i n t : R u n ' z c l i u p d a t e - h o s t ' t o a u t o m a t i c a l l y u p d a t e f l a k e . n i x " > & 2
e c h o " o r m a n u a l l y e d i t $F L A K E _ N I X _ P A T H " > & 2
e x i t 1
f i
e l s e
e c h o " E r r o r : F l a k e . n i x n o t f o u n d a t $F L A K E _ N I X _ P A T H " > & 2
e x i t 1
f i
# A l s o c h e c k i f h o s t f o l d e r e x i s t s
l o c a l f o l d e r = " $H O M E / $P R O J E C T / h o s t s / $c u r r e n t _ h o s t n a m e "
i f [ ! - d " $f o l d e r " ] ; t h e n
e c h o " E r r o r : M a t c h i n g h o s t n o t f o u n d i n $P R O J E C T , M i s s i n g f o l d e r : $f o l d e r " > & 2
e x i t 1
f i
}
p r i n t _ h e l p ( ) {
e c h o " Z a n e y O S C L I U t i l i t y - - v e r s i o n $V E R S I O N "
e c h o " "
e c h o " U s a g e : z c l i [ c o m m a n d ] [ o p t i o n s ] "
e c h o " "
e c h o " C o m m a n d s : "
e c h o " c l e a n u p - C l e a n u p o l d s y s t e m g e n e r a t i o n s . C a n s p e c i f y a n u m b e r t o k e e p . "
e c h o " d i a g - C r e a t e a s y s t e m d i a g n o s t i c r e p o r t . "
e c h o " ( F i l e n a m e : h o m e d i r / d i a g . t x t ) "
e c h o " l i s t - g e n s - L i s t u s e r a n d s y s t e m g e n e r a t i o n s . "
e c h o " r e b u i l d - R e b u i l d t h e N i x O S s y s t e m c o n f i g u r a t i o n . "
e c h o " r e b u i l d - b o o t - R e b u i l d a n d s e t a s b o o t d e f a u l t ( a c t i v a t e s o n n e x t r e s t a r t ) . "
e c h o " t r i m - T r i m f i l e s y s t e m s t o i m p r o v e S S D p e r f o r m a n c e . "
e c h o " u p d a t e - U p d a t e t h e f l a k e a n d r e b u i l d t h e s y s t e m . "
e c h o " u p d a t e - h o s t - A u t o s e t h o s t a n d p r o f i l e i n f l a k e . n i x . "
e c h o " ( O p t : z c l i u p d a t e - h o s t [ h o s t n a m e ] [ p r o f i l e ] ) "
e c h o " "
e c h o " O p t i o n s f o r r e b u i l d , r e b u i l d - b o o t , a n d u p d a t e c o m m a n d s : "
e c h o " - - d r y , - n - S h o w w h a t w o u l d b e d o n e w i t h o u t d o i n g i t "
e c h o " - - a s k , - a - A s k f o r c o n f i r m a t i o n b e f o r e p r o c e e d i n g "
e c h o " - - c o r e s N - L i m i t b u i l d t o N c o r e s ( u s e f u l f o r V M s ) "
e c h o " - - v e r b o s e , - v - S h o w v e r b o s e o u t p u t "
e c h o " - - n o - n o m - D o n ' t u s e n i x - o u t p u t - m o n i t o r "
e c h o " "
e c h o " D o o m E m a c s : "
e c h o " d o o m i n s t a l l - I n s t a l l D o o m E m a c s u s i n g g e t - d o o m s c r i p t . "
e c h o " d o o m s t a t u s - C h e c k i f D o o m E m a c s i s i n s t a l l e d . "
e c h o " d o o m r e m o v e - R e m o v e D o o m E m a c s i n s t a l l a t i o n . "
e c h o " d o o m u p d a t e - U p d a t e D o o m E m a c s ( r u n s d o o m s y n c ) . "
e c h o " "
e c h o " h e l p - S h o w t h i s h e l p m e s s a g e . "
}
h a n d l e _ b a c k u p s ( ) {
i f [ ''$ { # B A C K U P _ F I L E S [ @ ] } - e q 0 ] ; t h e n
e c h o " N o b a c k u p f i l e s c o n f i g u r e d t o c h e c k . "
r e t u r n
f i
e c h o " C h e c k i n g f o r b a c k u p f i l e s t o r e m o v e . . . "
f o r f i l e _ p a t h i n " ''$ { B A C K U P _ F I L E S [ @ ] } " ; d o
f u l l _ p a t h = " $H O M E / $f i l e _ p a t h "
i f [ - f " $f u l l _ p a t h " ] ; t h e n
e c h o " R e m o v i n g s t a l e b a c k u p f i l e : $f u l l _ p a t h "
r m " $f u l l _ p a t h "
f i
d o n e
}
d e t e c t _ g p u _ p r o f i l e ( ) {
l o c a l d e t e c t e d _ p r o f i l e = " "
l o c a l h a s _ n v i d i a = f a l s e
l o c a l h a s _ i n t e l = f a l s e
l o c a l h a s _ a m d = f a l s e
l o c a l h a s _ v m = f a l s e
i f ${ pkgs . pciutils } / b i n / l s p c i & > / d e v / n u l l ; t h e n # C h e c k i f l s p c i i s a v a i l a b l e
i f ${ pkgs . pciutils } / b i n / l s p c i | ${ pkgs . gnugrep } / b i n / g r e p - q i ' v g a \ | 3 d ' ; t h e n
w h i l e r e a d - r l i n e ; d o
i f e c h o " $l i n e " | ${ pkgs . gnugrep } / b i n / g r e p - q i ' n v i d i a ' ; t h e n
h a s _ n v i d i a = t r u e
e l i f e c h o " $l i n e " | ${ pkgs . gnugrep } / b i n / g r e p - q i ' a m d ' ; t h e n
h a s _ a m d = t r u e
e l i f e c h o " $l i n e " | ${ pkgs . gnugrep } / b i n / g r e p - q i ' i n t e l ' ; t h e n
h a s _ i n t e l = t r u e
e l i f e c h o " $l i n e " | ${ pkgs . gnugrep } / b i n / g r e p - q i ' v i r t i o \ | v m w a r e ' ; t h e n
h a s _ v m = t r u e
f i
d o n e < < ( ${ pkgs . pciutils } / b i n / l s p c i | ${ pkgs . gnugrep } / b i n / g r e p - i ' v g a \ | 3 d ' )
i f " $h a s _ v m " ; t h e n
d e t e c t e d _ p r o f i l e = " v m "
e l i f " $h a s _ n v i d i a " & & " $h a s _ i n t e l " ; t h e n
d e t e c t e d _ p r o f i l e = " n v i d i a - l a p t o p "
e l i f " $h a s _ n v i d i a " ; t h e n
d e t e c t e d _ p r o f i l e = " n v i d i a "
e l i f " $h a s _ a m d " ; t h e n
d e t e c t e d _ p r o f i l e = " a m d "
e l i f " $h a s _ i n t e l " ; t h e n
d e t e c t e d _ p r o f i l e = " i n t e l "
f i
f i
e l s e
e c h o " W a r n i n g : l s p c i c o m m a n d n o t f o u n d . C a n n o t a u t o - d e t e c t G P U p r o f i l e . " > & 2
f i
e c h o " $d e t e c t e d _ p r o f i l e " # R e t u r n t h e d e t e c t e d p r o f i l e
}
# - - - H e l p e r f u n c t i o n t o p a r s e a d d i t i o n a l a r g u m e n t s - - -
p a r s e _ n h _ a r g s ( ) {
l o c a l a r g s _ s t r i n g = " "
l o c a l o p t i o n s _ s e l e c t e d = ( )
s h i f t # R e m o v e t h e m a i n c o m m a n d ( r e b u i l d , r e b u i l d - b o o t , u p d a t e )
w h i l e [ [ $# - g t 0 ] ] ; d o
c a s e $1 i n
- - d r y | - n )
a r g s _ s t r i n g = " $a r g s _ s t r i n g - - d r y "
o p t i o n s _ s e l e c t e d + = ( " d r y r u n m o d e ( s h o w i n g w h a t w o u l d b e d o n e ) " )
s h i f t
; ;
- - a s k | - a )
a r g s _ s t r i n g = " $a r g s _ s t r i n g - - a s k "
o p t i o n s _ s e l e c t e d + = ( " c o n f i r m a t i o n p r o m p t s e n a b l e d " )
s h i f t
; ;
- - c o r e s )
i f [ [ - n $2 & & $2 = ~ ^ [ 0 - 9 ] + $ ] ] ; t h e n
a r g s _ s t r i n g = " $a r g s _ s t r i n g - - - - c o r e s $2 "
o p t i o n s _ s e l e c t e d + = ( " l i m i t e d t o $2 C P U c o r e s " )
s h i f t 2
e l s e
e c h o " E r r o r : - - c o r e s r e q u i r e s a n u m e r i c a r g u m e n t " > & 2
e x i t 1
f i
; ;
- - v e r b o s e | - v )
a r g s _ s t r i n g = " $a r g s _ s t r i n g - - v e r b o s e "
o p t i o n s _ s e l e c t e d + = ( " v e r b o s e o u t p u t e n a b l e d " )
s h i f t
; ;
- - n o - n o m )
a r g s _ s t r i n g = " $a r g s _ s t r i n g - - n o - n o m "
o p t i o n s _ s e l e c t e d + = ( " n i x - o u t p u t - m o n i t o r d i s a b l e d " )
s h i f t
; ;
- - )
s h i f t
a r g s _ s t r i n g = " $a r g s _ s t r i n g - - $* "
o p t i o n s _ s e l e c t e d + = ( " a d d i t i o n a l a r g u m e n t s : $* " )
b r e a k
; ;
- * )
e c h o " W a r n i n g : U n k n o w n f l a g ' $1 ' - p a s s i n g t h r o u g h t o n h " > & 2
a r g s _ s t r i n g = " $a r g s _ s t r i n g $1 "
o p t i o n s _ s e l e c t e d + = ( " u n k n o w n f l a g ' $1 ' p a s s e d t h r o u g h " )
s h i f t
; ;
* )
e c h o " E r r o r : U n e x p e c t e d a r g u m e n t ' $1 ' " > & 2
e x i t 1
; ;
e s a c
d o n e
# P r i n t f r i e n d l y c o n f i r m a t i o n o f s e l e c t e d o p t i o n s t o s t d e r r s o i t d o e s n ' t i n t e r f e r e w i t h r e t u r n v a l u e
i f [ [ ''$ { # o p t i o n s _ s e l e c t e d [ @ ] } - g t 0 ] ] ; t h e n
e c h o " O p t i o n s s e l e c t e d : " > & 2
f o r o p t i o n i n " ''$ { o p t i o n s _ s e l e c t e d [ @ ] } " ; d o
e c h o " ✓ $o p t i o n " > & 2
d o n e
e c h o > & 2
f i
# R e t u r n o n l y t h e a r g s s t r i n g
e c h o " $a r g s _ s t r i n g "
}
# - - - M a i n L o g i c - - -
i f [ " $# " - e q 0 ] ; t h e n
e c h o " E r r o r : N o c o m m a n d p r o v i d e d . " > & 2
p r i n t _ h e l p
e x i t 1
f i
c a s e " $1 " i n
c l e a n u p )
e c h o " W a r n i n g ! T h i s w i l l r e m o v e o l d g e n e r a t i o n s o f y o u r s y s t e m . "
r e a d - p " H o w m a n y g e n e r a t i o n s t o k e e p ( d e f a u l t : a l l ) ? " k e e p _ c o u n t
i f [ - z " $k e e p _ c o u n t " ] ; t h e n
r e a d - p " T h i s w i l l r e m o v e a l l b u t t h e c u r r e n t g e n e r a t i o n . C o n t i n u e ( y / N ) ? " - n 1 - r
e c h o
i f [ [ $R E P L Y = ~ ^ [ Y y ] $ ] ] ; t h e n
${ pkgs . nh } / b i n / n h c l e a n a l l - v
e l s e
e c h o " C l e a n u p c a n c e l l e d . "
f i
e l s e
r e a d - p " T h i s w i l l k e e p t h e l a s t $k e e p _ c o u n t g e n e r a t i o n s . C o n t i n u e ( y / N ) ? " - n 1 - r
e c h o
i f [ [ $R E P L Y = ~ ^ [ Y y ] $ ] ] ; t h e n
${ pkgs . nh } / b i n / n h c l e a n a l l - k " $k e e p _ c o u n t " - v
e l s e
e c h o " C l e a n u p c a n c e l l e d . "
f i
f i
L O G _ D I R = " $H O M E / z c l i - c l e a n u p - l o g s "
m k d i r - p " $L O G _ D I R "
L O G _ F I L E = " $L O G _ D I R / z c l i - c l e a n u p - $( ${ pkgs . coreutils } / b i n / d a t e + % Y - % m - % d _ % H - % M - % S ) . l o g "
e c h o " C l e a n i n g u p o l d l o g f i l e s . . . " > > " $L O G _ F I L E "
${ pkgs . findutils } / b i n / f i n d " $L O G _ D I R " - t y p e f - m t i m e + 3 - n a m e " * . l o g " - d e l e t e > > " $L O G _ F I L E " 2 > & 1
e c h o " C l e a n u p p r o c e s s l o g g e d t o $L O G _ F I L E "
; ;
d i a g )
e c h o " G e n e r a t i n g s y s t e m d i a g n o s t i c r e p o r t . . . "
${ pkgs . inxi } / b i n / i n x i - - f u l l > " $H O M E / d i a g . t x t "
e c h o " D i a g n o s t i c r e p o r t s a v e d t o $H O M E / d i a g . t x t "
; ;
h e l p )
p r i n t _ h e l p
; ;
l i s t - g e n s )
e c h o " - - - U s e r G e n e r a t i o n s - - - "
${ pkgs . nix } / b i n / n i x - e n v - - l i s t - g e n e r a t i o n s | ${ pkgs . coreutils } / b i n / c a t | | e c h o " C o u l d n o t l i s t u s e r g e n e r a t i o n s . "
e c h o " "
e c h o " - - - S y s t e m G e n e r a t i o n s - - - "
${ pkgs . nix } / b i n / n i x p r o f i l e h i s t o r y - - p r o f i l e / n i x / v a r / n i x / p r o f i l e s / s y s t e m | ${ pkgs . coreutils } / b i n / c a t | | e c h o " C o u l d n o t l i s t s y s t e m g e n e r a t i o n s . "
; ;
r e b u i l d )
v e r i f y _ h o s t n a m e
h a n d l e _ b a c k u p s
# P a r s e a d d i t i o n a l a r g u m e n t s
e x t r a _ a r g s = $( p a r s e _ n h _ a r g s " $@ " )
e c h o " S t a r t i n g N i x O S r e b u i l d f o r h o s t : $( ${ pkgs . nettools } / b i n / h o s t n a m e ) "
i f e v a l " ${ pkgs . nh } / b i n / n h o s s w i t c h - - h o s t n a m e ' $P R O F I L E ' $e x t r a _ a r g s " ; t h e n
e c h o " R e b u i l d f i n i s h e d s u c c e s s f u l l y "
e l s e
e c h o " R e b u i l d F a i l e d " > & 2
e x i t 1
f i
; ;
r e b u i l d - b o o t )
v e r i f y _ h o s t n a m e
h a n d l e _ b a c k u p s
# P a r s e a d d i t i o n a l a r g u m e n t s
e x t r a _ a r g s = $( p a r s e _ n h _ a r g s " $@ " )
e c h o " S t a r t i n g N i x O S r e b u i l d ( b o o t ) f o r h o s t : $( ${ pkgs . nettools } / b i n / h o s t n a m e ) "
e c h o " N o t e : C o n f i g u r a t i o n w i l l b e a c t i v a t e d o n n e x t r e b o o t "
i f e v a l " ${ pkgs . nh } / b i n / n h o s b o o t - - h o s t n a m e ' $P R O F I L E ' $e x t r a _ a r g s " ; t h e n
e c h o " R e b u i l d - b o o t f i n i s h e d s u c c e s s f u l l y "
e c h o " N e w c o n f i g u r a t i o n s e t a s b o o t d e f a u l t - r e s t a r t t o a c t i v a t e "
e l s e
e c h o " R e b u i l d - b o o t F a i l e d " > & 2
e x i t 1
f i
; ;
t r i m )
e c h o " R u n n i n g ' s u d o f s t r i m - v / ' m a y t a k e a f e w m i n u t e s a n d i m p a c t s y s t e m p e r f o r m a n c e . "
r e a d - p " E n t e r ( y / Y ) t o r u n n o w o r e n t e r t o e x i t ( y / N ) : " - n 1 - r
e c h o # m o v e t o a n e w l i n e
i f [ [ $R E P L Y = ~ ^ [ Y y ] $ ] ] ; t h e n
e c h o " R u n n i n g f s t r i m . . . "
s u d o ${ pkgs . util-linux } / b i n / f s t r i m - v /
e c h o " f s t r i m c o m p l e t e . "
e l s e
e c h o " T r i m o p e r a t i o n c a n c e l l e d . "
f i
; ;
u p d a t e )
v e r i f y _ h o s t n a m e
h a n d l e _ b a c k u p s
# P a r s e a d d i t i o n a l a r g u m e n t s
e x t r a _ a r g s = $( p a r s e _ n h _ a r g s " $@ " )
e c h o " U p d a t i n g f l a k e a n d r e b u i l d i n g s y s t e m f o r h o s t : $( ${ pkgs . nettools } / b i n / h o s t n a m e ) "
i f e v a l " ${ pkgs . nh } / b i n / n h o s s w i t c h - - h o s t n a m e ' $P R O F I L E ' - - u p d a t e $e x t r a _ a r g s " ; t h e n
e c h o " U p d a t e a n d r e b u i l d f i n i s h e d s u c c e s s f u l l y "
e l s e
e c h o " U p d a t e a n d r e b u i l d F a i l e d " > & 2
e x i t 1
f i
; ;
u p d a t e - h o s t )
t a r g e t _ h o s t n a m e = " "
t a r g e t _ p r o f i l e = " "
i f [ " $# " - e q 3 ] ; t h e n # z c l i u p d a t e - h o s t < h o s t n a m e > < p r o f i l e >
t a r g e t _ h o s t n a m e = " $2 "
t a r g e t _ p r o f i l e = " $3 "
e l i f [ " $# " - e q 1 ] ; t h e n # z c l i u p d a t e - h o s t ( a u t o - d e t e c t )
e c h o " A t t e m p t i n g t o a u t o - d e t e c t h o s t n a m e a n d G P U p r o f i l e . . . "
t a r g e t _ h o s t n a m e = $( ${ pkgs . nettools } / b i n / h o s t n a m e )
t a r g e t _ p r o f i l e = $( d e t e c t _ g p u _ p r o f i l e )
i f [ - z " $t a r g e t _ p r o f i l e " ] ; t h e n
e c h o " E r r o r : C o u l d n o t a u t o - d e t e c t a s p e c i f i c G P U p r o f i l e . P l e a s e p r o v i d e i t m a n u a l l y . " > & 2
e c h o " U s a g e : z c l i u p d a t e - h o s t [ h o s t n a m e ] [ p r o f i l e ] " > & 2
e x i t 1
f i
e c h o " A u t o - d e t e c t e d H o s t n a m e : $t a r g e t _ h o s t n a m e "
e c h o " A u t o - d e t e c t e d P r o f i l e : $t a r g e t _ p r o f i l e "
e l s e
e c h o " E r r o r : I n v a l i d n u m b e r o f a r g u m e n t s f o r ' u p d a t e - h o s t ' . " > & 2
e c h o " U s a g e : z c l i u p d a t e - h o s t [ h o s t n a m e ] [ p r o f i l e ] " > & 2
e x i t 1
f i
e c h o " U p d a t i n g $F L A K E _ N I X _ P A T H . . . "
# U p d a t e h o s t
i f ${ pkgs . gnused } / b i n / s e d - i " s / ^ [ [ : s p a c e : ] ] * h o s t [ [ : s p a c e : ] ] * = [ [ : s p a c e : ] ] * \ " . * \ " / h o s t = \ " $t a r g e t _ h o s t n a m e \ " / " " $F L A K E _ N I X _ P A T H " ; t h e n
e c h o " S u c c e s s f u l l y u p d a t e d h o s t t o : $t a r g e t _ h o s t n a m e "
e l s e
e c h o " E r r o r : F a i l e d t o u p d a t e h o s t i n $F L A K E _ N I X _ P A T H " > & 2
e x i t 1
f i
# U p d a t e p r o f i l e
i f ${ pkgs . gnused } / b i n / s e d - i " s / ^ [ [ : s p a c e : ] ] * p r o f i l e [ [ : s p a c e : ] ] * = [ [ : s p a c e : ] ] * \ " . * \ " / p r o f i l e = \ " $t a r g e t _ p r o f i l e \ " / " " $F L A K E _ N I X _ P A T H " ; t h e n
e c h o " S u c c e s s f u l l y u p d a t e d p r o f i l e t o : $t a r g e t _ p r o f i l e "
e l s e
e c h o " E r r o r : F a i l e d t o u p d a t e p r o f i l e i n $F L A K E _ N I X _ P A T H " > & 2
e x i t 1
f i
e c h o " F l a k e . n i x u p d a t e d s u c c e s s f u l l y ! "
; ;
a d d - h o s t )
h o s t n a m e = " "
p r o f i l e _ a r g = " "
i f [ " $# " - g e 2 ] ; t h e n
h o s t n a m e = " $2 "
f i
i f [ " $# " - e q 3 ] ; t h e n
p r o f i l e _ a r g = " $3 "
f i
i f [ - z " $h o s t n a m e " ] ; t h e n
r e a d - p " E n t e r t h e n e w h o s t n a m e : " h o s t n a m e
f i
i f [ - d " $H O M E / $P R O J E C T / h o s t s / $h o s t n a m e " ] ; t h e n
e c h o " E r r o r : H o s t ' $h o s t n a m e ' a l r e a d y e x i s t s . " > & 2
e x i t 1
f i
e c h o " C o p y i n g d e f a u l t h o s t c o n f i g u r a t i o n . . . "
${ pkgs . coreutils } / b i n / c p - r " $H O M E / $P R O J E C T / h o s t s / d e f a u l t " " $H O M E / $P R O J E C T / h o s t s / $h o s t n a m e "
d e t e c t e d _ p r o f i l e = " "
i f [ [ - n " $p r o f i l e _ a r g " & & " $p r o f i l e _ a r g " = ~ ^ ( i n t e l | a m d | n v i d i a | n v i d i a - h y b r i d | v m ) $ ] ] ; t h e n
d e t e c t e d _ p r o f i l e = " $p r o f i l e _ a r g "
e l s e
e c h o " D e t e c t i n g G P U p r o f i l e . . . "
d e t e c t e d _ p r o f i l e = $( d e t e c t _ g p u _ p r o f i l e )
e c h o " D e t e c t e d G P U p r o f i l e : $d e t e c t e d _ p r o f i l e "
r e a d - p " I s t h i s c o r r e c t ? ( y / n ) " - n 1 - r
e c h o
i f [ [ $R E P L Y = ~ ^ [ N n ] $ ] ] ; t h e n
r e a d - p " E n t e r t h e c o r r e c t p r o f i l e ( i n t e l , a m d , n v i d i a , n v i d i a - h y b r i d , v m ) : " n e w _ p r o f i l e
w h i l e [ [ ! " $n e w _ p r o f i l e " = ~ ^ ( i n t e l | a m d | n v i d i a | n v i d i a - h y b r i d | v m ) $ ] ] ; d o
e c h o " I n v a l i d p r o f i l e . P l e a s e e n t e r o n e o f t h e f o l l o w i n g : i n t e l , a m d , n v i d i a , n v i d i a - h y b r i d , v m "
r e a d - p " E n t e r t h e c o r r e c t p r o f i l e : " n e w _ p r o f i l e
d o n e
d e t e c t e d _ p r o f i l e = $n e w _ p r o f i l e
f i
f i
e c h o " S e t t i n g p r o f i l e t o ' $d e t e c t e d _ p r o f i l e ' . . . "
${ pkgs . gnused } / b i n / s e d - i " s / p r o f i l e = . * / p r o f i l e = \ " $d e t e c t e d _ p r o f i l e \ " ; / " " $H O M E / $P R O J E C T / h o s t s / $h o s t n a m e / d e f a u l t . n i x "
r e a d - p " G e n e r a t e n e w h a r d w a r e . n i x ? ( y / n ) " - n 1 - r
e c h o
i f [ [ $R E P L Y = ~ ^ [ Y y ] $ ] ] ; t h e n
e c h o " G e n e r a t i n g h a r d w a r e . n i x . . . "
s u d o n i x o s - g e n e r a t e - c o n f i g - - s h o w - h a r d w a r e - c o n f i g > " $H O M E / $P R O J E C T / h o s t s / $h o s t n a m e / h a r d w a r e . n i x "
e c h o " h a r d w a r e . n i x g e n e r a t e d . "
f i
e c h o " A d d i n g n e w h o s t t o g i t . . . "
${ pkgs . git } / b i n / g i t - C " $H O M E / $P R O J E C T " a d d .
e c h o " h o s t n a m e : $h o s t n a m e a d d e d "
; ;
d e l - h o s t )
h o s t n a m e = " "
i f [ " $# " - e q 2 ] ; t h e n
h o s t n a m e = " $2 "
e l s e
r e a d - p " E n t e r t h e h o s t n a m e t o d e l e t e : " h o s t n a m e
f i
i f [ ! - d " $H O M E / $P R O J E C T / h o s t s / $h o s t n a m e " ] ; t h e n
e c h o " E r r o r : H o s t ' $h o s t n a m e ' d o e s n o t e x i s t . " > & 2
e x i t 1
f i
r e a d - p " A r e y o u s u r e y o u w a n t t o d e l e t e t h e h o s t ' $h o s t n a m e ' ? ( y / N ) " - n 1 - r
e c h o
i f [ [ $R E P L Y = ~ ^ [ Y y ] $ ] ] ; t h e n
e c h o " D e l e t i n g h o s t ' $h o s t n a m e ' . . . "
${ pkgs . coreutils } / b i n / r m - r f " $H O M E / $P R O J E C T / h o s t s / $h o s t n a m e "
${ pkgs . git } / b i n / g i t - C " $H O M E / $P R O J E C T " a d d .
e c h o " h o s t n a m e : $h o s t n a m e r e m o v e d "
e l s e
e c h o " D e l e t i o n c a n c e l l e d . "
f i
; ;
d o o m )
i f [ " $# " - l t 2 ] ; t h e n
e c h o " E r r o r : d o o m c o m m a n d r e q u i r e s a s u b c o m m a n d . " > & 2
e c h o " U s a g e : z c l i d o o m [ i n s t a l l | s t a t u s | r e m o v e | u p d a t e ] " > & 2
e x i t 1
f i
# E n s u r e w e ' r e a c t i n g o n a v a l i d h o s t a n d w e c a n l o c a t e v a r i a b l e s . n i x
v e r i f y _ h o s t n a m e
c u r r e n t _ h o s t n a m e = " $( h o s t n a m e ) "
h o s t _ v a r s _ f i l e = " $H O M E / $P R O J E C T / h o s t s / $c u r r e n t _ h o s t n a m e / v a r i a b l e s . n i x "
i f [ ! - f " $h o s t _ v a r s _ f i l e " ] ; t h e n
e c h o " E r r o r : H o s t v a r i a b l e s f i l e n o t f o u n d : $h o s t _ v a r s _ f i l e " > & 2
e c h o " P l e a s e e n s u r e y o u r h o s t f o l d e r e x i s t s a n d c o n t a i n s v a r i a b l e s . n i x . " > & 2
e x i t 1
f i
i s _ d o o m _ e n a b l e d ( ) {
# R e t u r n 0 i f d o o m E m a c s E n a b l e = t r u e ; a p p e a r s ( i g n o r i n g l e a d i n g s p a c e s )
${ pkgs . gnugrep } / b i n / g r e p - E q ' ^ [ [ : s p a c e : ] ] * d o o m E m a c s E n a b l e [ [ : s p a c e : ] ] * = [ [ : s p a c e : ] ] * t r u e [ [ : s p a c e : ] ] * ; ' " $h o s t _ v a r s _ f i l e "
}
e n s u r e _ d o o m _ e n a b l e d ( ) {
# I f t h e v a r i a b l e i s p r e s e n t b u t f a l s e , f l i p i t ; i f m i s s i n g , a p p e n d i t
i f ${ pkgs . gnugrep } / b i n / g r e p - E q ' ^ [ [ : s p a c e : ] ] * d o o m E m a c s E n a b l e [ [ : s p a c e : ] ] * = ' " $h o s t _ v a r s _ f i l e " ; t h e n
${ pkgs . gnused } / b i n / s e d - i ' s / ^ [ [ : s p a c e : ] ] * d o o m E m a c s E n a b l e [ [ : s p a c e : ] ] * = . * / d o o m E m a c s E n a b l e = t r u e ; / ' " $h o s t _ v a r s _ f i l e "
e l s e
e c h o " " > > " $h o s t _ v a r s _ f i l e "
e c h o " # E n a b l e d b y z c l i d o o m o n $( d a t e ) " > > " $h o s t _ v a r s _ f i l e "
e c h o " d o o m E m a c s E n a b l e = t r u e ; " > > " $h o s t _ v a r s _ f i l e "
f i
}
d o o m _ s u b c o m m a n d = " $2 "
c a s e " $d o o m _ s u b c o m m a n d " i n
i n s t a l l )
i f ! i s _ d o o m _ e n a b l e d ; t h e n
e c h o " ✗ D o o m E m a c s i s d i s a b l e d f o r h o s t ' $c u r r e n t _ h o s t n a m e ' ( d o o m E m a c s E n a b l e = f a l s e ) . " > & 2
e c h o " T o e n a b l e , s e t d o o m E m a c s E n a b l e = t r u e ; i n : " > & 2
e c h o " $h o s t _ v a r s _ f i l e " > & 2
e c h o " a n d r e b u i l d y o u r s y s t e m b e f o r e i n s t a l l i n g D o o m . " > & 2
e c h o
r e a d - p " E n a b l e D o o m f o r t h i s h o s t n o w a n d r e b u i l d ? ( y / N ) " - n 1 - r
e c h o
i f [ [ $R E P L Y = ~ ^ [ Y y ] $ ] ] ; t h e n
e c h o " E n a b l i n g D o o m E m a c s i n $h o s t _ v a r s _ f i l e . . . "
e n s u r e _ d o o m _ e n a b l e d
e c h o " R e b u i l d i n g s y s t e m s o u s e r m o d u l e s a r e a p p l i e d . . . "
i f ${ pkgs . nh } / b i n / n h o s s w i t c h - - h o s t n a m e " $P R O F I L E " ; t h e n
e c h o " R e b u i l d c o m p l e t e . P r o c e e d i n g w i t h D o o m i n s t a l l a t i o n . "
e l s e
e c h o " E r r o r : R e b u i l d f a i l e d . P l e a s e f i x t h e b u i l d a n d r e - r u n ' z c l i d o o m i n s t a l l ' . " > & 2
e x i t 1
f i
e l s e
e c h o " A b o r t i n g . P l e a s e e n a b l e d o o m E m a c s E n a b l e a n d r e b u i l d b e f o r e i n s t a l l i n g . " > & 2
e x i t 1
f i
f i
e c h o " I n s t a l l i n g D o o m E m a c s . . . "
${ get-doom-script } / b i n / g e t - d o o m
; ;
s t a t u s )
i f [ - x " $H O M E / . e m a c s . d / b i n / d o o m " ] & & [ - f " $H O M E / . e m a c s . d / c o r e / d o o m . e l " ] ; t h e n
e c h o " ✔ D o o m E m a c s a p p e a r s i n s t a l l e d a t $H O M E / . e m a c s . d "
i f [ - f " $H O M E / . d o o m . d / i n i t . e l " ] ; t h e n
e c h o " • U s e r c o n f i g f o u n d : $H O M E / . d o o m . d / i n i t . e l "
e l s e
e c h o " • W a r n i n g : U s e r c o n f i g ( ~ / . d o o m . d ) n o t f o u n d "
f i
e c h o " V e r s i o n i n f o r m a t i o n : "
" $H O M E / . e m a c s . d / b i n / d o o m " v e r s i o n 2 > / d e v / n u l l | | e c h o " C o u l d n o t g e t v e r s i o n i n f o r m a t i o n "
e l s e
i f [ - d " $H O M E / . e m a c s . d " ] ; t h e n
i f [ - z " $( l s - A " $H O M E / . e m a c s . d " 2 > / d e v / n u l l ) " ] ; t h e n
e c h o " ✗ F o u n d e m p t y ~ / . e m a c s . d ( n o t a v a l i d D o o m i n s t a l l a t i o n ) "
e l s e
e c h o " ✗ ~ / . e m a c s . d e x i s t s b u t D o o m w a s n o t d e t e c t e d "
f i
e l s e
e c h o " ✗ D o o m E m a c s i s n o t i n s t a l l e d "
f i
e c h o " R u n ' z c l i d o o m i n s t a l l ' t o i n s t a l l i t "
f i
; ;
r e m o v e )
i f [ ! - d " $H O M E / . e m a c s . d " ] ; t h e n
e c h o " D o o m E m a c s i s n o t i n s t a l l e d "
e x i t 0
f i
e c h o " W a r n i n g : T h i s w i l l c o m p l e t e l y r e m o v e D o o m E m a c s a n d a l l y o u r c o n f i g u r a t i o n ! "
r e a d - p " A r e y o u s u r e y o u w a n t t o c o n t i n u e ? ( y / N ) " - n 1 - r
e c h o
i f [ [ $R E P L Y = ~ ^ [ Y y ] $ ] ] ; t h e n
e c h o " R e m o v i n g D o o m E m a c s . . . "
${ pkgs . coreutils } / b i n / r m - r f " $H O M E / . e m a c s . d "
e c h o " ✔ D o o m E m a c s h a s b e e n r e m o v e d "
e l s e
e c h o " R e m o v a l c a n c e l l e d "
f i
; ;
u p d a t e )
i f [ ! - x " $H O M E / . e m a c s . d / b i n / d o o m " ] | | [ ! - f " $H O M E / . e m a c s . d / c o r e / d o o m . e l " ] ; t h e n
e c h o " E r r o r : D o o m E m a c s i s n o t i n s t a l l e d c o r r e c t l y . R u n ' z c l i d o o m i n s t a l l ' f i r s t . " > & 2
e x i t 1
f i
e c h o " U p d a t i n g D o o m E m a c s . . . "
" $H O M E / . e m a c s . d / b i n / d o o m " s y n c
e c h o " ✔ D o o m E m a c s u p d a t e c o m p l e t e "
; ;
* )
e c h o " E r r o r : I n v a l i d d o o m s u b c o m m a n d ' $d o o m _ s u b c o m m a n d ' " > & 2
e c h o " U s a g e : z c l i d o o m [ i n s t a l l | s t a t u s | r e m o v e | u p d a t e ] " > & 2
e x i t 1
; ;
e s a c
; ;
* )
e c h o " E r r o r : I n v a l i d c o m m a n d ' $1 ' " > & 2
p r i n t _ h e l p
e x i t 1
; ;
e s a c
''