diff --git a/Justfile b/Justfile new file mode 100644 index 00000000..c9f792d7 --- /dev/null +++ b/Justfile @@ -0,0 +1,34 @@ +# Note: +# add `--option substitute false` and or `--no-net` to the command so it builds properly offline +os host action: + #!/usr/bin/env bash + set -euo pipefail + + nixpkgs=$(nix-instantiate --eval -E "let sources = import ./npins; in sources.nixpkgs.outPath" | jq -r .) + nixos-rebuild {{ action }} \ + -I nixpkgs=${nixpkgs} \ + -I nixos-config=./nix/configurations/{{ host }}.nix \ + --no-reexec \ + --file ./default.nix \ + --attr "nixosConfigurations.{{ host }}" + +install host: + #!/usr/bin/env bash + set -euo pipefail + + nixpkgs=$(nix-instantiate --eval -E "let sources = import ./npins; in sources.nixpkgs.outPath" | jq -r .) + nixos-install \ + -I nixpkgs=${nixpkgs} \ + -I nixos-config=./nix/configurations/{{ host }}.nix \ + --file ./default.nix \ + --attr "nixosConfigurations.{{ host }}" + +# Retain four weeks of generations so I don't fuck up +clean-os: + nix-env --delete-generations 28d -p /nix/var/nix/profiles/system + +clean-hm: + nix-env --delete-generations 28d -p ~/.local/state/nix/profiles/home-manager + +update: + npins update diff --git a/nix/configurations/installer.nix b/nix/configurations/installer.nix index 3b9d56db..027168d7 100644 --- a/nix/configurations/installer.nix +++ b/nix/configurations/installer.nix @@ -56,7 +56,6 @@ in environment.systemPackages = [ pkgs.disko - pkgs.manage pkgs.git pkgs.pastebinit # for sharing cli output & debugging pkgs.hdparm # to ATA secure wipe disks diff --git a/nix/packages/by-name/manage/package.nix b/nix/packages/by-name/manage/package.nix deleted file mode 100644 index ea15fc56..00000000 --- a/nix/packages/by-name/manage/package.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ - haskellPackages, - haskell, -}: -let - inherit (haskell.lib.compose) justStaticExecutables; - - drv = haskellPackages.callCabal2nix "manage" ./src { }; -in -justStaticExecutables drv diff --git a/nix/packages/by-name/manage/src/.gitignore b/nix/packages/by-name/manage/src/.gitignore deleted file mode 100644 index c33954f5..00000000 --- a/nix/packages/by-name/manage/src/.gitignore +++ /dev/null @@ -1 +0,0 @@ -dist-newstyle/ diff --git a/nix/packages/by-name/manage/src/Main.hs b/nix/packages/by-name/manage/src/Main.hs deleted file mode 100755 index dc112e47..00000000 --- a/nix/packages/by-name/manage/src/Main.hs +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/env runhaskell -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE ViewPatterns #-} - -import Control.Monad -import System.Environment -import System.Exit -import System.IO -import System.Process - --- Note: to type check this code --- `ghc manage.hs -Werror=all -fno-code' - -main :: IO () -main = do - let showHelpOr args elseDo = - if "--help" `elem` args then putStr help - else elseDo - - getArgs >>= \case - ( "os" : host : action - : (partitionArgs -> (manageArgs, extraArgs)) - ) -> - manageArgs `showHelpOr` do - nixpkgs <- readNixpkgsPath - void $ readProcessFriendly "nixos-rebuild" (action : nixosRebuildArgs nixpkgs host <> extraArgs) - - ( "install" : host - : (partitionArgs -> (manageArgs, extraArgs)) - ) -> - manageArgs `showHelpOr` do - nixpkgs <- readNixpkgsPath - void $ readProcessFriendly "nixos-install" (nixosInstallArgs nixpkgs host <> extraArgs) - - _ -> putStr help >> exitFailure - -newtype StorePath = StorePath { unStorePath :: String } - -defaultNixosCmdArgs :: StorePath -> String -> [String] -defaultNixosCmdArgs (unStorePath -> nixpkgsPath) hostname = - [ "-I", "nixpkgs=" <> nixpkgsPath - , "-I", "nixos-config=./nix/configurations/" <> hostname <> ".nix" - , "--file", "./default.nix" - , "--attr", "nixosConfigurations." <> hostname - ] - -nixosInstallArgs :: StorePath -> String -> [String] -nixosInstallArgs = defaultNixosCmdArgs - -nixosRebuildArgs :: StorePath -> String -> [String] -nixosRebuildArgs = - defaultNixosCmdArgs - -- This is not a nixos-install flag - <> (\_ _ -> ["--no-reexec"]) - -help :: String -help = - unlines - [ "Manage.hs" - , "" - , "Manage.hs is a thin wrapper to make nixos-{install,rebuild} easier to use." - , "Black lives matter. Trans rights are human rights. No nazi bullsh*t." - , "" - , "Available commands:" - , indent "os :" <> indent "run perhost action with nixos-rebuild" - , indent "install :" <> indent "run perhost action with nixos-install" - , indent "--help:" <> indent "show this help menu" - ] - where indent = ("\t" <>) - -partitionArgs :: [String] -> ([String], [String]) -partitionArgs = finalize . span (/= "--") - where finalize (xs, ys) = (xs, drop 1 ys) - -quote :: String -> String -quote x = "\"" <> x <> "\"" - --- https://stackoverflow.com/a/70162369 -blueForeground :: String -> String -blueForeground x = "\ESC[34m" <> x <> "\ESC[0m" - -readProcessFriendly :: String -> [String] -> IO String -readProcessFriendly cmdName args = do - hPutStrLn stderr - $ "Executing: " <> (quote . blueForeground) (showCommandForUser cmdName args) - (_, _, _, pid) <- createProcess - ( proc cmdName args - ) { std_in = UseHandle stdin - , std_out = UseHandle stdout - , std_err = UseHandle stderr - } - _ <- waitForProcess pid - pure "" - -readNixpkgsPath :: IO StorePath -readNixpkgsPath = - StorePath . clean <$> readProcessFriendly - "nix-instantiate" - [ "--eval" - , "-E" - , "let sources = import ./npins; in sources.nixpkgs.outPath" - ] - where - clean = filter (\c -> c /= '\n' && c /= '"') diff --git a/nix/packages/by-name/manage/src/manage.cabal b/nix/packages/by-name/manage/src/manage.cabal deleted file mode 100644 index a59349a3..00000000 --- a/nix/packages/by-name/manage/src/manage.cabal +++ /dev/null @@ -1,21 +0,0 @@ -cabal-version: 3.0 -name: manage -version: 0.1.0.0 -description: NixOS Helper -author: Léana 江 -maintainer: leana.jiang+git@icloud.com -build-type: Simple - -common common - ghc-options: - -Wall -Wcompat -Widentities -Wincomplete-record-updates - -Wincomplete-patterns -Wincomplete-uni-patterns - -Wredundant-constraints -Werror=missing-fields - build-depends: base - default-language: Haskell2010 - -executable manage - import: common - main-is: ./Main.hs - build-depends: - process diff --git a/npins/sources.json b/npins/sources.json index 15e6974a..c6de909e 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -182,11 +182,11 @@ "owner": "nixos", "repo": "nixpkgs" }, - "branch": "nixos-25.11", + "branch": "nixos-25.11-small", "submodules": false, - "revision": "fa83fd837f3098e3e678e6cf017b2b36102c7211", - "url": "https://github.com/nixos/nixpkgs/archive/fa83fd837f3098e3e678e6cf017b2b36102c7211.tar.gz", - "hash": "sha256-e7VO/kGLgRMbWtpBqdWl0uFg8Y2XWFMdz0uUJvlML8o=" + "revision": "6c1fc6e4c93c084d0ae654ee85dc16cfe53b12b0", + "url": "https://github.com/nixos/nixpkgs/archive/6c1fc6e4c93c084d0ae654ee85dc16cfe53b12b0.tar.gz", + "hash": "sha256-3tAkeUYt7WBVgNfaXDW6HnrrGSuZooZ8nIAnbmKsY2A=" }, "npins": { "type": "GitRelease", diff --git a/shell.nix b/shell.nix index 5b89b246..31c91133 100644 --- a/shell.nix +++ b/shell.nix @@ -6,7 +6,6 @@ in overlays = map import [ ./nix/overlays/disko.nix ./nix/overlays/npins.nix - ./nix/packages/overlay.nix ]; }, withGHC ? false, @@ -18,10 +17,11 @@ pkgs.mkShell { packages = with pkgs; [ - npins # from npins repo - disko # from disko flake - manage + just + jq + npins nixos-anywhere # comes from nixpkgs + disko # comes from disko flake ] ++ lib.optionals withGHC [ (haskellPackages.ghcWithPackages (self: [