diff --git a/lib/module.nix b/lib/module.nix index 9c07469..2c89c8f 100644 --- a/lib/module.nix +++ b/lib/module.nix @@ -36,4 +36,22 @@ else "Whether to enable ${name}."; type = lib.types.bool; }; + + ## Like lib.mkDefault, but uses lib.mapAttrsRecursive to apply mkDefault to + ## every attr in the set. + ## + ## ```nix + ## starship.settings.username = mkDefault' { + ## enabled = true; + ## show_always = false; + ## }; + ## ``` + ## is equivalent to: + ## ```nix + ## starship.settings.username = { + ## enabled = mkDefault true; + ## show_always = mkDefault false; + ## }; + ## ``` + mkDefault' = set: lib.mapAttrsRecursive (_: value: lib.mkDefault value) set; } diff --git a/modules/home/profiles.nix b/modules/home/profiles.nix index 25126bb..7a74634 100644 --- a/modules/home/profiles.nix +++ b/modules/home/profiles.nix @@ -29,6 +29,7 @@ in { nh = enabled; ripgrep = enabled; ssh = enabled; + starship = enabled; }; } # diff --git a/modules/home/programs/default.nix b/modules/home/programs/default.nix index edaa783..9fc68d3 100644 --- a/modules/home/programs/default.nix +++ b/modules/home/programs/default.nix @@ -26,6 +26,7 @@ ./nh.nix ./ripgrep.nix ./ssh.nix + ./starship ./waybar.nix # TODO: uncomment when swaylock is figured out diff --git a/snowflake/modules/home/programs/cli/starship/default.nix b/modules/home/programs/starship/default.nix similarity index 100% rename from snowflake/modules/home/programs/cli/starship/default.nix rename to modules/home/programs/starship/default.nix index 4f21d35..7c7c9cd 100644 --- a/snowflake/modules/home/programs/cli/starship/default.nix +++ b/modules/home/programs/starship/default.nix @@ -1,6 +1,6 @@ { - lib, config, + lib, ... }: let cfg = config.marleyos.programs.starship; diff --git a/snowflake/modules/home/programs/cli/starship/nerd-font-symbols.nix b/modules/home/programs/starship/nerd-font-symbols.nix similarity index 100% rename from snowflake/modules/home/programs/cli/starship/nerd-font-symbols.nix rename to modules/home/programs/starship/nerd-font-symbols.nix diff --git a/modules/home/programs/starship/theme.nix b/modules/home/programs/starship/theme.nix new file mode 100644 index 0000000..83efa75 --- /dev/null +++ b/modules/home/programs/starship/theme.nix @@ -0,0 +1,208 @@ +{ + marleylib, + lib, + config, + ... +}: let + cfg = config.marleyos.programs.starship; +in { + config = lib.mkIf cfg.enable { + programs.starship.settings = with config.lib.stylix.colors.withHashtag; let + mkFormat = t: " [](fg:${base02})[${t}]($style)[](fg:${base02}) "; + langFormat = mkFormat "$symbol$version"; + in + marleylib.module.mkDefault' { + format = lib.concatStrings [ + "$username" + "$hostname" + "$directory" + "$nix_shell" + "$git_branch" + "$git_status" + "$fill" + "$c" + "$elixir" + "$elm" + "$golang" + "$haskell" + "$java" + "$julia" + "$nodejs" + "$nim" + "$rust" + "$scala" + "$python" + "$time" + "$line_break" + "$character" + ]; + + username = { + disabled = false; + format = " [](fg:${base02})[ 󰧱 $user@]($style)"; + show_always = true; + style_root = "bg:${base02} fg:${base0D}"; + style_user = "bg:${base02} fg:${base0D}"; + }; + + hostname = { + ssh_only = false; + format = "[$hostname ]($style)[](fg:${base02}) "; + style = "bg:${base02} fg:${base0D}"; + }; + + directory = { + format = mkFormat " $path "; + style = "bg:${base02} fg:${base0B}"; + truncation_length = 3; + truncation_symbol = "…/"; + + substitutions = { + Documents = "󰈙"; + Downloads = " "; + Music = " "; + Pictures = " "; + }; + }; + + git_branch = { + format = mkFormat " $symbol $branch "; + style = "bg:${base02} fg:${base0C}"; + symbol = ""; + }; + + git_status = { + disabled = false; + style = "bg:${base02} fg:${base08}"; + format = mkFormat "$all_status$ahead_behind"; + up_to_date = "[ ✓ ](bg:${base02} fg:${base0D})"; + untracked = "[?\\($count\\)](bg:${base02} fg:${base09})"; + stashed = "[\\$](bg:${base02} fg:${base0D})"; + modified = "[!\\($count\\)](bg:${base02} fg:${base09})"; + renamed = "[»\\($count\\)](bg:${base02} fg:${base0D})"; + deleted = "[✘\\($count\\)](style)"; + staged = "[++\\($count\\)](bg:${base02} fg:${base09})"; + ahead = "[⇡\\(\${count}\\)](bg:${base02} fg:${base0C})"; + diverged = "⇕[\\[](bg:${base02} fg:${base0D})[⇡\\(\${ahead_count}\\)](bg:${base02} fg:${base0C})[⇣\\(\${behind_count}\\)](bg:${base02} fg:${base0A})[\\]](bg:${base02} fg:${base0D})"; + behind = "[⇣\\(\${count}\\)](bg:${base02} fg:${base0A})"; + }; + + fill = { + style = "fg:${base02}"; + symbol = " "; + }; + + time = { + disabled = false; + format = mkFormat " $time 󰴈 "; + style = "bg:${base02} fg:${base0A}"; + time_format = "%I:%M%P"; + use_12hr = true; + }; + + character = let + vim = ""; + mkChar = sym: col: " [${sym}](fg:${col}) [󰄾](fg:${base0C})"; + in { + success_symbol = mkChar "" "${base0D}"; + error_symbol = mkChar "󰋔" "${base08}"; + vimcmd_symbol = mkChar vim "${base0A}"; + vimcmd_replace_one_symbol = mkChar vim "${base0C}"; + vimcmd_replace_symbol = mkChar vim "${base0C}"; + vimcmd_visual_symbol = mkChar vim "${base0D}"; + }; + + ### Languages ### + c = { + style = "bg:${base02} fg:${base0B}"; + format = langFormat; + disabled = false; + symbol = " "; + }; + + elixir = { + style = "bg:${base02} fg:${base0B}"; + format = langFormat; + disabled = false; + symbol = " "; + }; + + elm = { + style = "bg:${base02} fg:${base0B}"; + format = langFormat; + disabled = false; + symbol = " "; + }; + + haskell = { + style = "bg:${base02} fg:${base0B}"; + format = langFormat; + disabled = false; + symbol = " "; + }; + + java = { + style = "bg:${base02} fg:${base0B}"; + format = langFormat; + disabled = false; + symbol = " "; + }; + + julia = { + style = "bg:${base02} fg:${base0B}"; + format = langFormat; + disabled = false; + symbol = " "; + }; + + nodejs = { + style = "bg:${base02} fg:${base0B}"; + format = langFormat; + disabled = false; + symbol = "󰎙 "; + }; + + nim = { + style = "bg:${base02} fg:${base0B}"; + format = langFormat; + disabled = false; + symbol = "󰆥 "; + }; + + python = { + style = "bg:${base02} fg:${base0B}"; + disabled = false; + symbol = " "; + }; + + rust = { + style = "bg:${base02} fg:${base0B}"; + format = langFormat; + disabled = false; + symbol = ""; + }; + + scala = { + style = "bg:${base02} fg:${base0B}"; + format = langFormat; + disabled = false; + symbol = " "; + }; + + ### Tools ### + conda = { + style = "bg:${base02} fg:${base0B}"; + format = mkFormat "$symbol$environment"; + disabled = false; + symbol = "🅒 "; + }; + + nix_shell = { + style = "bg:${base02} fg:${base0C}"; + format = mkFormat " $symbol $state( \($name\)) "; + disabled = false; + symbol = " "; + }; + }; + }; +} diff --git a/snowflake/modules/home/programs/cli/starship/theme.nix b/snowflake/modules/home/programs/cli/starship/theme.nix deleted file mode 100644 index ae30e38..0000000 --- a/snowflake/modules/home/programs/cli/starship/theme.nix +++ /dev/null @@ -1,208 +0,0 @@ -{ - lib, - config, - ... -}: let - inherit (lib) mkDefault; - - cfg = config.marleyos.programs.starship; -in { - config = lib.mkIf cfg.enable { - programs.starship.settings = with config.lib.stylix.colors.withHashtag; let - mkFormat = t: " [](fg:${base02})[${t}]($style)[](fg:${base02}) "; - langFormat = mkFormat "$symbol$version"; - in { - format = mkDefault (lib.concatStrings [ - "$username" - "$hostname" - "$directory" - "$nix_shell" - "$git_branch" - "$git_status" - "$fill" - "$c" - "$elixir" - "$elm" - "$golang" - "$haskell" - "$java" - "$julia" - "$nodejs" - "$nim" - "$rust" - "$scala" - "$python" - "$time" - "$line_break" - "$character" - ]); - - username = { - disabled = mkDefault false; - format = mkDefault " [](fg:${base02})[ 󰧱 $user@]($style)"; - show_always = mkDefault true; - style_root = mkDefault "bg:${base02} fg:${base0D}"; - style_user = mkDefault "bg:${base02} fg:${base0D}"; - }; - - hostname = { - ssh_only = mkDefault false; - format = mkDefault "[$hostname ]($style)[](fg:${base02}) "; - style = mkDefault "bg:${base02} fg:${base0D}"; - }; - - directory = { - format = mkDefault (mkFormat " $path "); - style = mkDefault "bg:${base02} fg:${base0B}"; - truncation_length = mkDefault 3; - truncation_symbol = mkDefault "…/"; - - substitutions = { - Documents = mkDefault "󰈙"; - Downloads = mkDefault " "; - Music = mkDefault " "; - Pictures = mkDefault " "; - }; - }; - - git_branch = { - format = mkDefault (mkFormat " $symbol $branch "); - style = mkDefault "bg:${base02} fg:${base0C}"; - symbol = mkDefault ""; - }; - - git_status = { - disabled = mkDefault false; - style = mkDefault "bg:${base02} fg:${base08}"; - format = mkDefault (mkFormat "$all_status$ahead_behind"); - up_to_date = mkDefault "[ ✓ ](bg:${base02} fg:${base0D})"; - untracked = mkDefault "[?\\($count\\)](bg:${base02} fg:${base09})"; - stashed = mkDefault "[\\$](bg:${base02} fg:${base0D})"; - modified = mkDefault "[!\\($count\\)](bg:${base02} fg:${base09})"; - renamed = mkDefault "[»\\($count\\)](bg:${base02} fg:${base0D})"; - deleted = mkDefault "[✘\\($count\\)](style)"; - staged = mkDefault "[++\\($count\\)](bg:${base02} fg:${base09})"; - ahead = mkDefault "[⇡\\(\${count}\\)](bg:${base02} fg:${base0C})"; - diverged = mkDefault "⇕[\\[](bg:${base02} fg:${base0D})[⇡\\(\${ahead_count}\\)](bg:${base02} fg:${base0C})[⇣\\(\${behind_count}\\)](bg:${base02} fg:${base0A})[\\]](bg:${base02} fg:${base0D})"; - behind = mkDefault "[⇣\\(\${count}\\)](bg:${base02} fg:${base0A})"; - }; - - fill = { - style = mkDefault "fg:${base02}"; - symbol = mkDefault " "; - }; - - time = { - disabled = mkDefault false; - format = mkDefault (mkFormat " $time 󰴈 "); - style = mkDefault "bg:${base02} fg:${base0A}"; - time_format = mkDefault "%I:%M%P"; - use_12hr = mkDefault true; - }; - - character = let - vim = ""; - mkChar = sym: col: " [${sym}](fg:${col}) [󰄾](fg:${base0C})"; - in { - success_symbol = mkChar "" "${base0D}"; - error_symbol = mkChar "󰋔" "${base08}"; - vimcmd_symbol = mkChar vim "${base0A}"; - vimcmd_replace_one_symbol = mkChar vim "${base0C}"; - vimcmd_replace_symbol = mkChar vim "${base0C}"; - vimcmd_visual_symbol = mkChar vim "${base0D}"; - }; - - ### Languages ### - c = { - style = mkDefault "bg:${base02} fg:${base0B}"; - format = mkDefault langFormat; - disabled = mkDefault false; - symbol = mkDefault " "; - }; - - elixir = { - style = mkDefault "bg:${base02} fg:${base0B}"; - format = mkDefault langFormat; - disabled = mkDefault false; - symbol = mkDefault " "; - }; - - elm = { - style = mkDefault "bg:${base02} fg:${base0B}"; - format = mkDefault langFormat; - disabled = mkDefault false; - symbol = mkDefault " "; - }; - - haskell = { - style = mkDefault "bg:${base02} fg:${base0B}"; - format = mkDefault langFormat; - disabled = mkDefault false; - symbol = mkDefault " "; - }; - - java = { - style = mkDefault "bg:${base02} fg:${base0B}"; - format = mkDefault langFormat; - disabled = mkDefault false; - symbol = mkDefault " "; - }; - - julia = { - style = mkDefault "bg:${base02} fg:${base0B}"; - format = mkDefault langFormat; - disabled = mkDefault false; - symbol = mkDefault " "; - }; - - nodejs = { - style = mkDefault "bg:${base02} fg:${base0B}"; - format = mkDefault langFormat; - disabled = mkDefault false; - symbol = mkDefault "󰎙 "; - }; - - nim = { - style = mkDefault "bg:${base02} fg:${base0B}"; - format = mkDefault langFormat; - disabled = mkDefault false; - symbol = mkDefault "󰆥 "; - }; - - python = { - style = mkDefault "bg:${base02} fg:${base0B}"; - disabled = mkDefault false; - symbol = mkDefault " "; - }; - - rust = { - style = mkDefault "bg:${base02} fg:${base0B}"; - format = mkDefault langFormat; - disabled = mkDefault false; - symbol = mkDefault ""; - }; - - scala = { - style = "bg:${base02} fg:${base0B}"; - format = mkDefault langFormat; - disabled = false; - symbol = " "; - }; - - ### Tools ### - conda = { - style = mkDefault "bg:${base02} fg:${base0B}"; - format = mkDefault (mkFormat "$symbol$environment"); - disabled = mkDefault false; - symbol = mkDefault "🅒 "; - }; - - nix_shell = { - style = "bg:${base02} fg:${base0C}"; - format = mkDefault (mkFormat " $symbol $state( \($name\)) "); - disabled = mkDefault false; - symbol = mkDefault " "; - }; - }; - }; -}