Compare commits

...

4 commits

Author SHA1 Message Date
acf4bba56d
fix manage script
It now work with nixos-rebuild repl properly
2026-01-31 14:25:20 +01:00
f0c393977f
npins: switch to nixos-25.11
We were on -small, and the rebuild was starting to be too much.
2026-01-31 11:34:01 +01:00
Léana
6e46babd4d Merge pull request 'add manage.hs to replace Justfile' (#30) from manage.hs into trunk
Reviewed-on: https://codeberg.org/leana8959/.files/pulls/30
2026-01-31 10:47:43 +01:00
55fa2198bc
init manage.hs script
colors and helpful output

remove Justfile

build manage as a package

add manage as a precompiled tool to installer
2026-01-31 10:43:48 +01:00
8 changed files with 145 additions and 42 deletions

View file

@ -1,34 +0,0 @@
# 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

View file

@ -56,6 +56,7 @@ in
environment.systemPackages = [
pkgs.disko
pkgs.manage
pkgs.git
pkgs.pastebinit # for sharing cli output & debugging
pkgs.hdparm # to ATA secure wipe disks

View file

@ -0,0 +1,10 @@
{
haskellPackages,
haskell,
}:
let
inherit (haskell.lib.compose) justStaticExecutables;
drv = haskellPackages.callCabal2nix "manage" ./src { };
in
justStaticExecutables drv

View file

@ -0,0 +1 @@
dist-newstyle/

View file

@ -0,0 +1,104 @@
#!/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 <hostname> <action>:" <> indent "run perhost action with nixos-rebuild"
, indent "install <hostname>:" <> 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 /= '"')

View file

@ -0,0 +1,21 @@
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

View file

@ -182,11 +182,11 @@
"owner": "nixos",
"repo": "nixpkgs"
},
"branch": "nixos-25.11-small",
"branch": "nixos-25.11",
"submodules": false,
"revision": "6c1fc6e4c93c084d0ae654ee85dc16cfe53b12b0",
"url": "https://github.com/nixos/nixpkgs/archive/6c1fc6e4c93c084d0ae654ee85dc16cfe53b12b0.tar.gz",
"hash": "sha256-3tAkeUYt7WBVgNfaXDW6HnrrGSuZooZ8nIAnbmKsY2A="
"revision": "fa83fd837f3098e3e678e6cf017b2b36102c7211",
"url": "https://github.com/nixos/nixpkgs/archive/fa83fd837f3098e3e678e6cf017b2b36102c7211.tar.gz",
"hash": "sha256-e7VO/kGLgRMbWtpBqdWl0uFg8Y2XWFMdz0uUJvlML8o="
},
"npins": {
"type": "GitRelease",

View file

@ -6,6 +6,7 @@ in
overlays = map import [
./nix/overlays/disko.nix
./nix/overlays/npins.nix
./nix/packages/overlay.nix
];
},
withGHC ? false,
@ -17,11 +18,10 @@ pkgs.mkShell {
packages =
with pkgs;
[
just
jq
npins
npins # from npins repo
disko # from disko flake
manage
nixos-anywhere # comes from nixpkgs
disko # comes from disko flake
]
++ lib.optionals withGHC [
(haskellPackages.ghcWithPackages (self: [