2022-05-21 00:07:49 +00:00
# docs:
# https://nixos.wiki/wiki/Flakes
# https://serokell.io/blog/practical-nix-flakes
2022-05-22 20:35:04 +00:00
# TODO:
# cross compiling:
# https://nixos.wiki/wiki/Cross_Compiling
# https://nixos.wiki/wiki/NixOS_on_ARM
# overlays = [{ ... }: {
# nixpkgs.crossSystem.system = "aarch64-linux";
# }];
2022-05-21 00:07:49 +00:00
{
inputs = {
nixpkgs . url = " n i x p k g s / n i x o s - 2 1 . 1 1 " ;
2022-05-24 03:45:33 +00:00
pkgs-unstable . url = " n i x p k g s / n i x o s - u n s t a b l e " ;
2022-05-21 04:14:19 +00:00
pkgs-gitea . url = " n i x p k g s / c 7 7 7 c d f 5 c 5 6 4 0 1 5 d 5 f 6 3 b 0 9 c c 9 3 b e f 4 1 7 8 b 1 9 b 0 1 " ;
2022-05-22 09:55:36 +00:00
# pkgs-mobile.url = "nixpkgs/6daa4a5c045d40e6eae60a3b6e427e8700f1c07f"; # currently pinned to mobile-nixos tip -> fails building lvgui
pkgs-mobile . url = " n i x p k g s / 7 e 5 6 7 a 3 d 0 9 2 b 7 d e 6 9 c d f 5 d e a e b 8 d 9 5 2 6 d e 2 3 0 9 1 6 " ; # 2021/06/21, coordinated with mobile-nixos 85557dca93ae574eaa7dc7b1877edf681a280d35 ; builds linux, but no errors after running for 4 hours
2022-05-21 06:53:44 +00:00
# pkgs-mobile.url = "nixpkgs/cbe587c735b734405f56803e267820ee1559e6c1"; # successful mobile-nixos build https://hydra.nixos.org/eval/1759474#tabs-inputs
# pkgs-mobile.url = "nixpkgs/48037fd90426e44e4bf03e6479e88a11453b9b66"; # successful mobile-nixos build 2022/05/19 https://hydra.nixos.org/eval/1762659#tabs-inputs
# pkgs-mobile.url = "nixpkgs/1d7db1b9e4cf1ee075a9f52e5c36f7b9f4207502";
# pkgs-mobile.url = "nixpkgs/43ff6cb1c027d13dc938b88eb099462210fea52f";
# pkgs-mobile.url = "nixpkgs/98bb5b77c8c6666824a4c13d23befa1e07210ef1"; # mobile-nixos build 2022/02/10 https://hydra.nixos.org/eval/1743260#tabs-inputs fails building lvgui
# pkgs-mobile.url = "nixpkgs/nixos-21.11"; # linux fails at config time
# pkgs-mobile.url = "nixpkgs/5aaed40d22f0d9376330b6fa413223435ad6fee5"; # (untested) associated with HN comment 2022/01/16 https://hydra.nixos.org/build/164693256#tabs-buildinputs -- still tries to compile linux from source
# pkgs-mobile.url = "nixpkgs/23d785aa6f853e6cf3430119811c334025bbef55"; # latest mobile-nixos:unstable:device.pine64-pinephone.aarch64-linux build 2022/02/20 https://hydra.nixos.org/build/167888996#tabs-buildinputs -- still tries to compile linux from source, fails building lvgui
2022-05-23 02:45:54 +00:00
mobile-nixos = {
2022-05-24 05:47:32 +00:00
# this includes a patch to enable flake support
# url = "github:ngi-nix/mobile-nixos/afe022e1898aa05381077a89c3681784e6074458";
url = " g i t h u b : n i x o s / m o b i l e - n i x o s " ;
flake = false ;
# XXX colin: does this work for non-flakes?
2022-05-23 02:45:54 +00:00
inputs . nixpkgs . follows = " p k g s - m o b i l e " ;
} ;
2022-05-22 01:05:32 +00:00
home-manager = {
url = " g i t h u b : n i x - c o m m u n i t y / h o m e - m a n a g e r / r e l e a s e - 2 1 . 1 1 " ;
inputs . nixpkgs . follows = " n i x p k g s " ;
} ;
2022-05-22 11:03:30 +00:00
nurpkgs . url = " g i t h u b : n i x - c o m m u n i t y / N U R " ;
2022-05-21 00:07:49 +00:00
} ;
2022-05-21 07:30:29 +00:00
2022-05-24 03:45:33 +00:00
outputs = { self , nixpkgs , pkgs-unstable , pkgs-gitea , pkgs-mobile , mobile-nixos , home-manager , nurpkgs }: {
2022-05-22 21:39:52 +00:00
machines . uninsane = self . decl-bootable-machine { name = " u n i n s a n e " ; system = " a a r c h 6 4 - l i n u x " ; } ;
machines . desko = self . decl-bootable-machine { name = " d e s k o " ; system = " x 8 6 _ 6 4 - l i n u x " ; } ;
machines . lappy = self . decl-bootable-machine { name = " l a p p y " ; system = " x 8 6 _ 6 4 - l i n u x " ; } ;
2022-05-22 08:27:02 +00:00
2022-05-24 07:53:13 +00:00
machines . moby =
let machine = self . decl-machine {
name = " m o b y " ;
2022-05-22 21:39:52 +00:00
system = " a a r c h 6 4 - l i n u x " ;
2022-05-24 07:53:13 +00:00
extraModules = [
2022-05-24 05:47:32 +00:00
( import " ${ mobile-nixos } / l i b / c o n f i g u r a t i o n . n i x " {
device = " p i n e 6 4 - p i n e p h o n e " ;
2022-05-22 21:39:52 +00:00
} )
] ;
} ;
2022-05-24 07:53:13 +00:00
in {
nixosConfiguration = machine ;
img = machine . config . mobile . outputs . u-boot . disk-image ;
} ;
2022-05-22 01:05:32 +00:00
2022-05-22 22:11:08 +00:00
nixosConfigurations = builtins . mapAttrs ( name : value : value . nixosConfiguration ) self . machines ;
imgs = builtins . mapAttrs ( name : value : value . img ) self . machines ;
2022-05-21 07:30:29 +00:00
2022-05-24 00:15:38 +00:00
decl-machine = { name , system , extraModules ? [ ] }: ( nixpkgs . lib . nixosSystem {
2022-05-22 21:39:52 +00:00
inherit system ;
2022-05-22 20:36:30 +00:00
specialArgs = { inherit home-manager ; inherit nurpkgs ; } ;
2022-05-21 07:40:56 +00:00
modules = [
./configuration.nix
./modules
2022-05-24 00:15:38 +00:00
./machines / $ { name }
2022-05-24 03:20:05 +00:00
( import ./helpers/set-hostname.nix name )
2022-05-24 07:45:55 +00:00
( self . overlaysModule system )
2022-05-21 07:40:56 +00:00
] ++ extraModules ;
} ) ;
2022-05-22 08:38:19 +00:00
# this produces a EFI-bootable .img file (GPT with / and /boot).
# after building this, steps are:
# run `btrfs-convert --uuid copy <device>`
# boot, checkout this flake into /etc/nixos AND UPDATE THE UUIDS IT REFERENCES.
# then `nixos-rebuild ...`
2022-05-24 00:15:38 +00:00
decl-img = { name , system , extraModules ? [ ] }: (
( self . decl-machine { inherit name ; inherit system ; extraModules = extraModules ++ [ ./image.nix ] ; } )
2022-05-22 20:35:04 +00:00
. config . system . build . raw
2022-05-22 08:38:19 +00:00
) ;
2022-05-24 00:15:38 +00:00
decl-bootable-machine = { name , system }: {
nixosConfiguration = self . decl-machine { inherit name ; inherit system ; } ;
img = self . decl-img { inherit name ; inherit system ; } ;
} ;
2022-05-22 21:39:52 +00:00
2022-05-24 07:45:55 +00:00
overlaysModule = system : { config , pkgs , . . . }: {
nixpkgs . config . allowUnfree = true ;
nixpkgs . overlays = [
#mobile-nixos.overlay
nurpkgs . overlay
( next : prev : {
#### customized packages
# nixos-unstable pleroma is too far out-of-date for our db
pleroma = prev . callPackage ./pkgs/pleroma { } ;
# jackett doesn't allow customization of the bind address: this will probably always be here.
jackett = next . callPackage ./pkgs/jackett { pkgs = prev ; } ;
# fix abrupt HDD poweroffs as during reboot. patching systemd requires rebuilding nearly every package.
# systemd = import ./pkgs/systemd { pkgs = prev; };
# patch rpi uboot with something that fixes USB HDD boot
ubootRaspberryPi4_64bit = next . callPackage ./pkgs/ubootRaspberryPi4_64bit { pkgs = prev ; } ;
#### nixos-unstable packages
# gitea: 1.16.5 contains a fix which makes manual user approval *actually* work.
# https://github.com/go-gitea/gitea/pull/19119
# safe to remove after 1.16.5 (or 1.16.7 if we need db compat?)
gitea = pkgs-gitea . legacyPackages . ${ system } . gitea ;
# nixos-21.11 whalebird uses an insecure electron version.
# TODO: remove this on next nixos release.
whalebird = pkgs-unstable . legacyPackages . ${ system } . whalebird ;
# we care about keeping these packages up-to-date
electrum = pkgs-unstable . legacyPackages . ${ system } . electrum ;
} )
] ;
} ;
2022-05-21 00:07:49 +00:00
} ;
}