From defae228414e00c2b378d645eedd0bef6f65a608 Mon Sep 17 00:00:00 2001 From: Brian Ketelsen Date: Fri, 17 Mar 2023 13:14:50 -0400 Subject: [PATCH] feat: starter set of profiles --- clean.sh | 3 +- core/config.go | 62 +++++++++++++++++++++++++++--------------- core/flake.go | 48 ++++++++++++++++++++++++++------ core/home.nix.tmpl | 14 +++++++++- core/programs.nix.tmpl | 16 +++++++++++ core/shell.nix.tmpl | 9 ++++++ 6 files changed, 119 insertions(+), 33 deletions(-) diff --git a/clean.sh b/clean.sh index 186f3efe..7989f5d6 100755 --- a/clean.sh +++ b/clean.sh @@ -1,4 +1,5 @@ #!/bin/sh rm ~/.fleek.yml -rm -rf ~/.config/home-manager \ No newline at end of file +rm -rf ~/.config/home-manager +rm -rf dist \ No newline at end of file diff --git a/core/config.go b/core/config.go index 2bab4457..513ea3b2 100644 --- a/core/config.go +++ b/core/config.go @@ -3,14 +3,30 @@ package core import ( "errors" "os" + "strings" "gopkg.in/yaml.v3" ) +var ( + shells = []string{"bash", "zsh"} + blingLevels = []string{"low", "default", "high"} + lowPackages = []string{"htop"} + defaultPackages = []string{"fzf", "ripgrep", "vscode"} + highPackages = []string{"lazygit", "jq", "yq", "neovim", "neofetch", "btop", "cheat"} + lowPrograms = []string{"starship"} + defaultPrograms = []string{"gh", "direnv"} + highPrograms = []string{"exa", "bat", "atuin", "zoxide"} +) + // Config holds the options that will be // merged into the home-manager flake. type Config struct { - Unfree bool `yaml:"unfree"` + Unfree bool `yaml:"unfree"` + // bash or zsh + Shell string `yaml:"shell"` + // low, default, high + Bling string `yaml:"bling"` Repository string `yaml:"repo"` Name string `yaml:"name"` Packages []string `yaml:",flow"` @@ -24,6 +40,25 @@ type Me struct { Email string `yaml:"email"` } +func (c Config) Validate() error { + if !isValueInList(c.Shell, shells) { + return errors.New("fleek.yml: invalid shell, valid shells are: " + strings.Join(shells, ", ")) + } + if !isValueInList(c.Bling, blingLevels) { + return errors.New("fleek.yml: invalid bling level, valid levels are: " + strings.Join(blingLevels, ", ")) + } + return nil +} + +func isValueInList(value string, list []string) bool { + for _, v := range list { + if v == value { + return true + } + } + return false +} + // ReadConfig returns the configuration data // stored in $HOME/.fleek.yml func ReadConfig() (*Config, error) { @@ -50,32 +85,15 @@ func WriteSampleConfig(email, name string, force bool) error { aliases["cdfleek"] = "cd ~/.config/home-manager" c := Config{ Unfree: true, + Shell: "bash", + Bling: "default", Name: "My Fleek Configuration", Repository: "git@github.com/my/homeconfig", Packages: []string{ - "neovim", - "fzf", - "nixfmt", - "lazygit", - "ripgrep", - "jq", - "dive", - "htop", - "yq", - "vscode", - "go_1_20", - "gnumake", - "gcc", - "statix", - "rustup", - "goreleaser", + "helix", }, Programs: []string{ - "direnv", - "starship", - "atuin", - "gh", - "zellij", + "dircolors", }, Aliases: aliases, Paths: []string{ diff --git a/core/flake.go b/core/flake.go index 46808906..9afa1167 100644 --- a/core/flake.go +++ b/core/flake.go @@ -11,9 +11,15 @@ import ( ) type Data struct { - Config *Config - UserName string - Home string + Config *Config + UserName string + Home string + LowPackages []string + DefaultPackages []string + HighPackages []string + LowPrograms []string + DefaultPrograms []string + HighPrograms []string } // InitFlake writes the first flake configuration @@ -26,6 +32,10 @@ func InitFlake(force bool) error { if err != nil { return err } + err = conf.Validate() + if err != nil { + return err + } user, err := user.Current() if err != nil { return err @@ -38,9 +48,15 @@ func InitFlake(force bool) error { return err } data := Data{ - Config: conf, - UserName: username, - Home: home, + Config: conf, + UserName: username, + Home: home, + LowPackages: lowPackages, + DefaultPackages: defaultPackages, + HighPackages: highPackages, + LowPrograms: lowPrograms, + DefaultPrograms: defaultPrograms, + HighPrograms: highPrograms, } err = writeFile("flake.nix", t, data, force) @@ -86,6 +102,10 @@ func WriteFlake() error { if err != nil { return err } + err = conf.Validate() + if err != nil { + return err + } user, err := user.Current() if err != nil { return err @@ -98,9 +118,15 @@ func WriteFlake() error { return err } data := Data{ - Config: conf, - UserName: username, - Home: home, + Config: conf, + UserName: username, + Home: home, + LowPackages: lowPackages, + DefaultPackages: defaultPackages, + HighPackages: highPackages, + LowPrograms: lowPrograms, + DefaultPrograms: defaultPrograms, + HighPrograms: highPrograms, } err = writeFile("home.nix", t, data, true) @@ -131,6 +157,10 @@ func ApplyFlake() error { if err != nil { return err } + err = conf.Validate() + if err != nil { + return err + } workdir, err := FlakeLocation() if err != nil { return err diff --git a/core/home.nix.tmpl b/core/home.nix.tmpl index 144c5d4a..1a783f86 100644 --- a/core/home.nix.tmpl +++ b/core/home.nix.tmpl @@ -16,7 +16,19 @@ # packages are just installed home.packages = [{{ range .Config.Packages }} pkgs.{{ . }}{{ end }} - (pkgs.nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" ]; }) + {{ range .LowPackages }} + pkgs.{{ . }}{{end}} + {{ if eq .Config.Bling "default" }} + {{ range .DefaultPackages }} + pkgs.{{ . }}{{end}} + {{ end }} + {{ if eq .Config.Bling "high" }} + {{ range .DefaultPackages }} + pkgs.{{ . }}{{end}} + {{ range .HighPackages }} + pkgs.{{ . }}{{end}} + {{ end }} + (pkgs.nerdfonts.override { fonts = [ "FiraCode" ]; }) ]; fonts.fontconfig.enable = true; home.stateVersion = diff --git a/core/programs.nix.tmpl b/core/programs.nix.tmpl index 753df032..a6f948da 100644 --- a/core/programs.nix.tmpl +++ b/core/programs.nix.tmpl @@ -3,4 +3,20 @@ # programs are installed and configured. # add your program configuration in ./user.nix{{ range .Config.Programs }} programs.{{ . }}.enable = true;{{ end }} + # low bling + {{ range .LowPrograms }} + programs.{{ . }}.enable = true;{{ end }} + {{ if eq .Config.Bling "default" }} + # default bling + {{ range .DefaultPrograms }} + programs.{{ . }}.enable = true;{{ end }} + {{ end }} + {{ if eq .Config.Bling "high" }} + # default bling + {{ range .DefaultPrograms }} + programs.{{ . }}.enable = true;{{ end }} + # high bling + {{ range .HighPrograms }} + programs.{{ . }}.enable = true;{{ end }} + {{ end }} } diff --git a/core/shell.nix.tmpl b/core/shell.nix.tmpl index b8d68f57..9d05ea98 100644 --- a/core/shell.nix.tmpl +++ b/core/shell.nix.tmpl @@ -3,8 +3,17 @@ programs.git.userEmail = "{{.Config.Me.Email}}"; programs.git.userName = "{{.Config.Me.Name}}"; + # {{ .Config.Shell }} + {{ if eq .Config.Shell "bash" }} programs.bash.profileExtra = ". {{.Home}}/.nix-profile/etc/profile.d/nix.sh"; programs.bash.enableCompletion = true; programs.bash.enableVteIntegration = true; programs.bash.enable = true; + {{ end }} + + {{ if eq .Config.Shell "zsh" }} + programs.zsh.profileExtra = ". {{.Home}}/.nix-profile/etc/profile.d/nix.sh"; + programs.zsh.enableCompletion = true; + programs.zsh.enable = true; + {{ end }} }