Skip to content
This repository was archived by the owner on Mar 24, 2024. It is now read-only.

Commit b1d840e

Browse files
authored
feat: migrate users to system (#292)
1 parent a281af6 commit b1d840e

File tree

4 files changed

+90
-25
lines changed

4 files changed

+90
-25
lines changed

internal/flake/flake.go

+17-16
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,8 @@ func (f *Flake) Create(force bool, symlink bool) error {
131131
if err != nil {
132132
return err
133133
}
134-
user := f.Config.UserForSystem(sys.Hostname)
134+
//user := f.Config.UserForSystem(sys.Hostname)
135+
user := sys.User
135136
data := Data{
136137
Config: f.Config,
137138
Bling: bling,
@@ -167,7 +168,7 @@ func (f *Flake) Create(force bool, symlink bool) error {
167168
return err
168169
}
169170

170-
err = f.writeSystem(*sys, "templates/host.nix.tmpl", force)
171+
err = f.writeSystem(sys, "templates/host.nix.tmpl", force)
171172
if err != nil {
172173
return err
173174
}
@@ -218,11 +219,8 @@ func (f *Flake) Join() error {
218219
return err
219220
}
220221
csym := filepath.Join(home, ".fleek.yml")
221-
err = os.Symlink(cfile, csym)
222-
if err != nil {
223-
fin.Debug.Println("first symlink attempt failed")
224-
return err
225-
}
222+
// ignore if it exists, could have been created by caller
223+
_ = os.Symlink(cfile, csym)
226224

227225
err = f.Config.Validate()
228226
if err != nil {
@@ -246,7 +244,7 @@ func (f *Flake) Join() error {
246244
}
247245
if !found {
248246
f.Config.Systems = append(f.Config.Systems, sys)
249-
err = f.writeSystem(*sys, "templates/host.nix.tmpl", true)
247+
err = f.writeSystem(sys, "templates/host.nix.tmpl", true)
250248
if err != nil {
251249
return err
252250
}
@@ -257,8 +255,8 @@ func (f *Flake) Join() error {
257255
return err
258256
}
259257
userFound := false
260-
for _, u := range f.Config.Users {
261-
if u.Username == username {
258+
if sys.User != nil {
259+
if sys.User.Username == username {
262260
userFound = true
263261
}
264262
}
@@ -267,7 +265,8 @@ func (f *Flake) Join() error {
267265
if err != nil {
268266
return err
269267
}
270-
f.Config.Users = append(f.Config.Users, user)
268+
269+
sys.User = user
271270
err = f.writeUser(*sys, *user, "templates/user.nix.tmpl", true)
272271
if err != nil {
273272
return err
@@ -383,14 +382,15 @@ func (f *Flake) Write(message string, writeHost, writeUser bool) error {
383382
}
384383
if writeHost {
385384

386-
err = f.writeSystem(*sys, "templates/host.nix.tmpl", force)
385+
err = f.writeSystem(sys, "templates/host.nix.tmpl", force)
387386
if err != nil {
388387
return err
389388
}
390389
}
391390
if writeUser {
392391

393-
user := f.Config.UserForSystem(sys.Hostname)
392+
//user := f.Config.UserForSystem(sys.Hostname)
393+
user := sys.User
394394
err = f.writeUser(*sys, *user, "templates/user.nix.tmpl", true)
395395
if err != nil {
396396
return err
@@ -462,7 +462,7 @@ func (f *Flake) writeFile(template string, path string, d Data, force bool) erro
462462
return nil
463463
}
464464

465-
func (f *Flake) writeSystem(sys fleek.System, template string, force bool) error {
465+
func (f *Flake) writeSystem(sys *fleek.System, template string, force bool) error {
466466
var user *fleek.User
467467
var err error
468468
user = f.Config.UserForSystem(sys.Hostname)
@@ -471,14 +471,15 @@ func (f *Flake) writeSystem(sys fleek.System, template string, force bool) error
471471
if err != nil {
472472
return err
473473
}
474-
f.Config.Users = append(f.Config.Users, user)
474+
475+
sys.User = user
475476
err = f.Config.Save()
476477
if err != nil {
477478
return err
478479
}
479480
}
480481
sysData := SystemData{
481-
System: sys,
482+
System: *sys,
482483
User: *user,
483484
}
484485
if f.Config.BYOGit {

internal/flake/templates/flake.nix.tmpl

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
{{ $overlays := .Config.Overlays }}
3030
homeConfigurations = {
3131
{{ range .Config.Systems }}
32-
"{{ .Username }}@{{ .Hostname }}" = home-manager.lib.homeManagerConfiguration {
32+
"{{ .User.Username }}@{{ .Hostname }}" = home-manager.lib.homeManagerConfiguration {
3333
pkgs = nixpkgs.legacyPackages.{{ .Arch }}-{{ .OS }}; # Home-manager requires 'pkgs' instance
3434
extraSpecialArgs = { inherit inputs; }; # Pass flake inputs to our config
3535
modules = [
@@ -40,7 +40,7 @@
4040
./aliases.nix
4141
./programs.nix
4242
# Host Specific configs
43-
./{{.Hostname}}/{{.Username}}.nix
43+
./{{.Hostname}}/{{.User.Username}}.nix
4444
./{{.Hostname}}/custom.nix
4545
# self-manage fleek
4646
{

internal/fleek/config.go

+27-7
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var (
2323
shells = []string{"bash", "zsh"}
2424
blingLevels = []string{"none", "low", "default", "high"}
2525
LowPackages = []string{"htop", "git", "github-cli", "glab"}
26-
DefaultPackages = []string{"fzf", "ripgrep", "vscode"}
26+
DefaultPackages = []string{"fzf", "ripgrep", "vscode", "just"}
2727
HighPackages = []string{"lazygit", "jq", "yq", "neovim", "neofetch", "btop", "cheat"}
2828
LowPrograms = []string{"starship"}
2929
DefaultPrograms = []string{"direnv"}
@@ -80,6 +80,7 @@ type System struct {
8080
Arch string `yaml:"arch"`
8181
OS string `yaml:"os"`
8282
Home string `yaml:"home"`
83+
User *User `yaml:"user"`
8384
}
8485

8586
type User struct {
@@ -344,6 +345,10 @@ func (c *Config) UserForSystem(system string) *User {
344345
userSystem = sys
345346
}
346347
}
348+
if userSystem.User != nil {
349+
return userSystem.User
350+
}
351+
// legacy unmigrated users
347352
for _, u := range c.Users {
348353
if u.Username == userSystem.Username {
349354
return u
@@ -490,6 +495,12 @@ func (c *Config) WriteInitialConfig(force bool, symlink bool) error {
490495
fin.Debug.Printfln("new system err: %s ", err)
491496
return err
492497
}
498+
user, err := NewUser()
499+
if err != nil {
500+
fin.Debug.Printfln("new user err: %s ", err)
501+
return err
502+
}
503+
sys.User = user
493504
c.Unfree = true
494505
c.AutoGC = true
495506
c.Name = "Fleek Configuration"
@@ -512,12 +523,6 @@ func (c *Config) WriteInitialConfig(force bool, symlink bool) error {
512523
c.Git.AutoCommit = true
513524
c.Git.AutoPull = true
514525
c.Git.AutoPush = true
515-
user, err := NewUser()
516-
if err != nil {
517-
fin.Debug.Printfln("new user err: %s ", err)
518-
return err
519-
}
520-
c.Users = []*User{user}
521526

522527
cfile, err := c.Location()
523528
if err != nil {
@@ -643,6 +648,11 @@ func (c *Config) NeedsMigration() bool {
643648

644649
return true
645650
}
651+
if s.User == nil {
652+
fin.Info.Println("Found unmigrated system users")
653+
return true
654+
}
655+
646656
}
647657
return false
648658
}
@@ -684,6 +694,16 @@ func (c *Config) Migrate() error {
684694
return err
685695
}
686696
}
697+
if s.User == nil {
698+
fin.Info.Println("Migrating Users to System:", s.Hostname)
699+
sysuser := c.UserForSystem(s.Hostname)
700+
701+
s.User = sysuser
702+
err := c.Save()
703+
if err != nil {
704+
return err
705+
}
706+
}
687707
}
688708
return nil
689709
}

internal/fleekcli/join.go

+44
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,50 @@ func join(cmd *cobra.Command, args []string) error {
6363
if err != nil {
6464
return err
6565
}
66+
// reload config and flake
67+
config, err = fleek.ReadConfig(config.UserFlakeDir())
68+
if err != nil {
69+
return err
70+
}
71+
migrate := config.NeedsMigration()
72+
if migrate {
73+
fin.Info.Println("Migration required")
74+
err := config.Migrate()
75+
if err != nil {
76+
fin.Error.Println("error migrating host files:", err)
77+
os.Exit(1)
78+
}
79+
fl, err := flake.Load(config, app)
80+
if err != nil {
81+
fin.Error.Println("error loading flake:", err)
82+
os.Exit(1)
83+
}
84+
85+
// Symlink the yaml file to home
86+
cfile, err := fl.Config.Location()
87+
if err != nil {
88+
fin.Debug.Printfln("location err: %s ", err)
89+
return err
90+
}
91+
fin.Debug.Printfln("init cfile: %s ", cfile)
92+
93+
home, err := os.UserHomeDir()
94+
if err != nil {
95+
return err
96+
}
97+
csym := filepath.Join(home, ".fleek.yml")
98+
err = os.Symlink(cfile, csym)
99+
if err != nil {
100+
fin.Debug.Println("symlink failed")
101+
return err
102+
}
103+
err = fl.Write("update host and user files", true, false)
104+
if err != nil {
105+
fin.Error.Println("error writing flake:", err)
106+
os.Exit(1)
107+
}
108+
}
109+
66110
fin.Info.Println(app.Trans("init.joining"))
67111
fl, err := flake.Load(config, app)
68112
if err != nil {

0 commit comments

Comments
 (0)