❄ Personal NixOS Flake Manager
nixos home-manager go nix
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat(rui): build action for home and os

Fuwn 6ca478c9 ef21d2f7

+133 -74
+1 -1
flake.nix
··· 41 41 { 42 42 packages.default = pkgs.buildGoModule { 43 43 pname = "rui"; 44 - version = "2024.09.21"; 44 + version = "2024.09.22"; 45 45 src = pkgs.lib.cleanSource ./.; 46 46 vendorHash = "sha256-mN/QjzJ4eGfbW1H92cCKvC0wDhCR6IUes2HCZ5YBdPA="; 47 47
+132 -73
rui.go
··· 18 18 19 19 var configuration Configuration 20 20 21 + const ( 22 + Build = iota 23 + Switch 24 + ) 25 + 21 26 func init() { 22 27 configurationPath := os.Getenv("RUI_CONFIG") 23 28 ··· 101 106 }, 102 107 }, 103 108 Action: func(c *cli.Context) error { 104 - nh, err := exec.LookPath("nh") 105 - extraArgs := c.Args().Slice() 106 - 107 - if err := notify("Queued home switch"); err != nil { 108 - return err 109 - } 110 - 111 - if err == nil && !c.Bool("force-home-manager") { 112 - err = command(nh, append([]string{"home", "switch", "--"}, 113 - extraArgs...)...) 114 - } else { 115 - user := c.String("user") 116 - 117 - if user == "" { 118 - user = os.Getenv("USER") 119 - } 120 - 121 - flake := configuration.Flake 122 - 123 - if flake == "" { 124 - flake = os.Getenv("FLAKE") 125 - } 126 - 127 - err = command("home-manager", append([]string{"switch", 128 - "--flake", fmt.Sprintf("%s#%s", flake, user)}, 129 - extraArgs...)...) 130 - } 131 - 132 - if err != nil { 133 - return notify(fmt.Sprintf("Failed to switch home: %s", err.Error())) 134 - } 135 - 136 - return notify("Home switched") 109 + return home(c, Switch) 110 + }, 111 + }, 112 + { 113 + Name: "build", 114 + Flags: []cli.Flag{ 115 + &cli.BoolFlag{ 116 + Name: "force-home-manager", 117 + }, 118 + &cli.StringFlag{ 119 + Name: "user", 120 + }, 121 + }, 122 + Action: func(c *cli.Context) error { 123 + return home(c, Build) 137 124 }, 138 125 }, 139 126 { ··· 176 163 }, 177 164 }, 178 165 Action: func(c *cli.Context) error { 179 - nh, err := exec.LookPath("nh") 180 - 181 - if err := notify("Queued OS switch"); err != nil { 182 - return err 183 - } 184 - 185 - if err == nil && !c.Bool("force-nixos-rebuild") { 186 - err = command(nh, "os", "switch") 187 - } else { 188 - escalator := "sudo" 189 - 190 - if doas, err := exec.LookPath("doas"); err != nil { 191 - escalator = doas 192 - } 193 - 194 - hostname := c.String("hostname") 195 - 196 - if hostname == "" { 197 - hostname, err = os.Hostname() 198 - 199 - if err != nil { 200 - return err 201 - } 202 - } 203 - 204 - flake := configuration.Flake 205 - 206 - if flake == "" { 207 - flake = os.Getenv("FLAKE") 208 - } 209 - 210 - err = command(escalator, "nixos-rebuild", "switch", "--flake", 211 - fmt.Sprintf("%s#%s", flake, hostname)) 212 - } 213 - 214 - if err != nil { 215 - return notify(fmt.Sprintf("Failed to switch OS: %s", err.Error())) 216 - } 217 - 218 - return notify("OS switched") 166 + return ruiOS(c, Switch) 167 + }, 168 + }, 169 + { 170 + Name: "build", 171 + Flags: []cli.Flag{ 172 + &cli.BoolFlag{ 173 + Name: "force-nixos-rebuild", 174 + }, 175 + &cli.StringFlag{ 176 + Name: "hostname", 177 + }, 178 + }, 179 + Action: func(c *cli.Context) error { 180 + return ruiOS(c, Build) 219 181 }, 220 182 }, 221 183 }, ··· 271 233 272 234 return nil 273 235 } 236 + 237 + func actionName(action int) string { 238 + if action == Build { 239 + return "build" 240 + } 241 + 242 + return "switch" 243 + } 244 + 245 + func actionVerb(action int) string { 246 + if action == Build { 247 + return "built" 248 + } 249 + 250 + return "switched" 251 + } 252 + 253 + func home(c *cli.Context, action int) error { 254 + nh, err := exec.LookPath("nh") 255 + extraArgs := c.Args().Slice() 256 + actionName := actionName(action) 257 + 258 + if err := notify("Queued home " + actionName); err != nil { 259 + return err 260 + } 261 + 262 + if err == nil && !c.Bool("force-home-manager") { 263 + err = command(nh, append([]string{"home", actionName, "--"}, 264 + extraArgs...)...) 265 + } else { 266 + user := c.String("user") 267 + 268 + if user == "" { 269 + user = os.Getenv("USER") 270 + } 271 + 272 + flake := configuration.Flake 273 + 274 + if flake == "" { 275 + flake = os.Getenv("FLAKE") 276 + } 277 + 278 + err = command("home-manager", append([]string{actionName, 279 + "--flake", fmt.Sprintf("%s#%s", flake, user)}, 280 + extraArgs...)...) 281 + } 282 + 283 + if err != nil { 284 + return notify(fmt.Sprintf("Failed to %s home: %s", actionName, err.Error())) 285 + } 286 + 287 + return notify("Home " + actionVerb(action)) 288 + } 289 + 290 + func ruiOS(c *cli.Context, action int) error { 291 + nh, err := exec.LookPath("nh") 292 + actionName := actionName(action) 293 + 294 + if err := notify("Queued OS " + actionName); err != nil { 295 + return err 296 + } 297 + 298 + if err == nil && !c.Bool("force-nixos-rebuild") { 299 + err = command(nh, "os", actionName) 300 + } else { 301 + escalator := "sudo" 302 + 303 + if doas, err := exec.LookPath("doas"); err != nil { 304 + escalator = doas 305 + } 306 + 307 + hostname := c.String("hostname") 308 + 309 + if hostname == "" { 310 + hostname, err = os.Hostname() 311 + 312 + if err != nil { 313 + return err 314 + } 315 + } 316 + 317 + flake := configuration.Flake 318 + 319 + if flake == "" { 320 + flake = os.Getenv("FLAKE") 321 + } 322 + 323 + err = command(escalator, "nixos-rebuild", actionName, "--flake", 324 + fmt.Sprintf("%s#%s", flake, hostname)) 325 + } 326 + 327 + if err != nil { 328 + return notify(fmt.Sprintf("Failed to %s OS: %s", actionName, err.Error())) 329 + } 330 + 331 + return notify("OS " + actionVerb(action)) 332 + }