Compare commits

...

10 commits

Author SHA1 Message Date
84bf107f49
feat(bat): Switch to Rose Pine
Some checks are pending
CI / Format Nix files (push) Waiting to run
CI / Test Modules (push) Waiting to run
CI / Validate sources (push) Waiting to run
Release / Make release (push) Waiting to run
Release / Publish to Flake registries (push) Blocked by required conditions
Build & deploy website / Build site (push) Waiting to run
Build & deploy website / Deploy website (push) Blocked by required conditions
2024-10-19 11:24:15 -07:00
c2d446f07d
feat(alacritty): Switch to Rose Pine 2024-10-19 11:15:31 -07:00
2434f0038f
feat(tests): Catppuccin -> Rose Pine 2024-10-19 11:14:58 -07:00
326ef12cfe
feat: Update base module name to rose-pine 2024-10-19 10:53:12 -07:00
847491e797
feat: Remove aerc 2024-10-19 10:44:04 -07:00
4ffde6b6bc
feat: Switch from Catppuccin org to Rose Pine 2024-10-19 10:41:16 -07:00
Ben Brown
96cf8b4a05
feat(home-manager): add support for aerc (#338) 2024-10-08 13:10:14 -04:00
renovate[bot]
4e08dd54fb
ci: update determinatesystems/update-flake-lock action to v24 (#344)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-08 12:59:52 -04:00
Weathercold
65f2a8a364
fix(home-manager/hyprland): import accents from file (#347)
Ensure accents are defined before user vars
Partially reverts 512306ae
2024-10-08 12:59:36 -04:00
vdbe
bad96d3fab
docs: remove kitty from README's IFD FAQ (#342)
Upstream removed the ifd in home-manger/kitty, #337 made the required
changes and removed it from the ifd faq in docs/src/faq.md but not
README.md.
2024-10-02 19:08:54 -04:00
14 changed files with 139 additions and 129 deletions

View file

@ -23,7 +23,7 @@ jobs:
- name: Install Nix - name: Install Nix
uses: cachix/install-nix-action@V27 uses: cachix/install-nix-action@V27
- uses: DeterminateSystems/update-flake-lock@v23 - uses: DeterminateSystems/update-flake-lock@v24
with: with:
path-to-flake-dir: "./dev" path-to-flake-dir: "./dev"
commit-msg: "chore: update dev flake inputs" commit-msg: "chore: update dev flake inputs"

View file

@ -4,13 +4,13 @@
"type": "Git", "type": "Git",
"repository": { "repository": {
"type": "GitHub", "type": "GitHub",
"owner": "catppuccin", "owner": "rose-pine",
"repo": "alacritty" "repo": "alacritty"
}, },
"branch": "main", "branch": "main",
"revision": "343cf8d65459ac8f6449cc98dd3648bcbd7e3766", "revision": "3c3e36eb5225b0eb6f1aa989f9d9e783a5b47a83",
"url": "https://github.com/catppuccin/alacritty/archive/343cf8d65459ac8f6449cc98dd3648bcbd7e3766.tar.gz", "url": "https://github.com/rose-pine/alacritty/archive/3c3e36eb5225b0eb6f1aa989f9d9e783a5b47a83.tar.gz",
"hash": "1nh29kkviqp0mz0w7cjmxcp5lgmd4hg5r67fzrvgkg9wgcfidig4" "hash": "1b9ff2a1mmhagmajvq49p2mrb22skdcq3hx6d6pjgk2vxvhhfkrd"
}, },
"bat": { "bat": {
"type": "Git", "type": "Git",
@ -316,13 +316,13 @@
"type": "Git", "type": "Git",
"repository": { "repository": {
"type": "GitHub", "type": "GitHub",
"owner": "catppuccin", "owner": "rose-pine",
"repo": "palette" "repo": "palette"
}, },
"branch": "main", "branch": "main",
"revision": "cf765d2269d8a4391355b7f6a6dffe580c69e1c2", "revision": "d5bbdaaed9b5ad575bce5d924a5a5032f16d8450",
"url": "https://github.com/catppuccin/palette/archive/cf765d2269d8a4391355b7f6a6dffe580c69e1c2.tar.gz", "url": "https://github.com/rose-pine/palette/archive/d5bbdaaed9b5ad575bce5d924a5a5032f16d8450.tar.gz",
"hash": "1i3swy8qlqqfkjh2c3rb6qb2cdggvcgcakwn1z6wk9yjbvh6vsrp" "hash": "12zqwps9l7r1dil7in6x0gv6i4cp10915ydy5ydalwrryywp84z3"
}, },
"polybar": { "polybar": {
"type": "Git", "type": "Git",
@ -420,6 +420,18 @@
"url": "https://github.com/catppuccin/swaylock/archive/77246bbbbf8926bdb8962cffab6616bc2b9e8a06.tar.gz", "url": "https://github.com/catppuccin/swaylock/archive/77246bbbbf8926bdb8962cffab6616bc2b9e8a06.tar.gz",
"hash": "02nql7ry71fxlhj0vsbsxi3jrmfajxmapr9gg0mzp0k0bxwqxa00" "hash": "02nql7ry71fxlhj0vsbsxi3jrmfajxmapr9gg0mzp0k0bxwqxa00"
}, },
"tm-theme": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "rose-pine",
"repo": "tm-theme"
},
"branch": "main",
"revision": "c4235f9a65fd180ac0f5e4396e3a86e21a0884ec",
"url": "https://github.com/rose-pine/tm-theme/archive/c4235f9a65fd180ac0f5e4396e3a86e21a0884ec.tar.gz",
"hash": "19k0r1mrhqhlf1xfzvd1q8ihpic86f84kbmgy0m314w3w9cbqf4f"
},
"tmux": { "tmux": {
"type": "Git", "type": "Git",
"repository": { "repository": {
@ -494,4 +506,4 @@
} }
}, },
"version": 3 "version": 3
} }

View file

@ -185,7 +185,6 @@ For [standalone installations](https://nix-community.github.io/home-manager/inde
cava.catppuccin.enable = false; cava.catppuccin.enable = false;
gh-dash.catppuccin.enable = false; gh-dash.catppuccin.enable = false;
imv.catppuccin.enable = false; imv.catppuccin.enable = false;
kitty.catppuccin.enable = false; # IFD is introduced by home-manager
swaylock.catppuccin.enable = false; swaylock.catppuccin.enable = false;
}; };

View file

@ -16,12 +16,12 @@ repo_name="${1:-}"
branch_name="${2:-main}" branch_name="${2:-main}"
if [ "${repo_name:-}" = "" ]; then if [ "${repo_name:-}" = "" ]; then
echo "error: a repository name is required!" >&2 echo "error: a repository name is required!" >&2
echo "$_usage" echo "$_usage"
exit 1 exit 1
fi fi
npins add github \ npins add github \
catppuccin "$repo_name" \ rose-pine "$repo_name" \
--directory ./.sources \ --directory ./.sources \
--branch "$branch_name" --branch "$branch_name"

View file

@ -1,8 +1,8 @@
{ {
description = "Soothing pastel theme for Nix"; description = "Soho vibes for Nix";
outputs = _: { outputs = _: {
homeManagerModules.catppuccin = import ./modules/home-manager; homeManagerModules.rose-pine = import ./modules/home-manager;
nixosModules.catppuccin = import ./modules/nixos; nixosModules.rose-pine = import ./modules/nixos;
}; };
} }

View file

@ -1,13 +1,18 @@
{ config, lib, ... }:
let
inherit (config.catppuccin) sources;
cfg = config.programs.alacritty.catppuccin;
enable = cfg.enable && config.programs.alacritty.enable;
in
{ {
options.programs.alacritty.catppuccin = lib.ctp.mkCatppuccinOpt { name = "alacritty"; }; config,
lib,
...
}: let
inherit (config.rose-pine) sources;
cfg = config.programs.alacritty.rose-pine;
enable = cfg.enable && config.programs.alacritty.enable;
in {
options.programs.alacritty.rose-pine = lib.rp.mkRosePineOpt {name = "alacritty";};
config = lib.mkIf enable { config = lib.mkIf enable {
programs.alacritty.settings = lib.importTOML "${sources.alacritty}/catppuccin-${cfg.flavor}.toml"; programs.alacritty.settings =
if (cfg.flavor == "main")
then lib.importTOML "${sources.alacritty}/dist/rose-pine.toml"
else lib.importTOML "${sources.alacritty}/dist/rose-pine-${cfg.flavor}.toml";
}; };
} }

View file

@ -1,4 +1,5 @@
[ [
./aerc.nix
./alacritty.nix ./alacritty.nix
./bat.nix ./bat.nix
./bottom.nix ./bottom.nix

View file

@ -1,20 +1,25 @@
{ config, lib, ... }:
let
inherit (config.catppuccin) sources;
cfg = config.programs.bat.catppuccin;
enable = cfg.enable && config.programs.bat.enable;
themeName = "Catppuccin ${lib.ctp.mkUpper cfg.flavor}";
in
{ {
options.programs.bat.catppuccin = lib.ctp.mkCatppuccinOpt { name = "bat"; }; config,
lib,
...
}: let
inherit (config.rose-pine) sources;
cfg = config.programs.bat.rose-pine;
enable = cfg.enable && config.programs.bat.enable;
themeName =
if (cfg.flavor == "main")
then "rose-pine"
else "rose-pine-${cfg.flavor}";
in {
options.programs.bat.rose-pine = lib.rp.mkRosePineOpt {name = "bat";};
config = lib.mkIf enable { config = lib.mkIf enable {
programs.bat = { programs.bat = {
config.theme = themeName; config.theme = themeName;
themes.${themeName} = { themes.${themeName} = {
src = sources.bat; src = sources.tm-theme;
file = "themes/${themeName}.tmTheme"; file = "dist/themes/${themeName}.tmTheme";
}; };
}; };
}; };

View file

@ -18,9 +18,14 @@ in
}; };
wayland.windowManager.hyprland.settings = { wayland.windowManager.hyprland.settings = {
source = [ "${sources.hyprland}/themes/${cfg.flavor}.conf" ]; source = [
"$accent" = "\$${cfg.accent}"; "${sources.hyprland}/themes/${cfg.flavor}.conf"
"$accentAlpha" = "\$${cfg.accent}Alpha"; # Define accents in file to ensure they appear before user vars
(builtins.toFile "hyprland-${cfg.accent}-accent.conf" ''
$accent = ''$${cfg.accent}
$accentAlpha = ''$${cfg.accent}Alpha
'')
];
}; };
}; };
} }

View file

@ -11,9 +11,14 @@ in
config = lib.mkIf enable { config = lib.mkIf enable {
programs.hyprlock.settings = { programs.hyprlock.settings = {
source = [ "${sources.hyprland}/themes/${cfg.flavor}.conf" ]; source = [
"$accent" = "\$${cfg.accent}"; "${sources.hyprland}/themes/${cfg.flavor}.conf"
"$accentAlpha" = "\$${cfg.accent}Alpha"; # Define accents in file to ensure they appear before user vars
(builtins.toFile "hyprland-${cfg.accent}-accent.conf" ''
$accent = ''$${cfg.accent}
$accentAlpha = ''$${cfg.accent}Alpha
'')
];
}; };
}; };
} }

View file

@ -3,54 +3,42 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
# this is a recursive attribute with all the functions below # this is a recursive attribute with all the functions below
inherit (lib) ctp; inherit (lib) rp;
in in {
{
# string -> type -> string -> a # string -> type -> string -> a
# this is an internal function and shouldn't be # this is an internal function and shouldn't be
# used unless you know what you're doing. it takes # used unless you know what you're doing. it takes
# a string (the name of the property, i.e., flavor # a string (the name of the property, i.e., flavor
# or accent), the type of the property, the name of # or accent), the type of the property, the name of
# the module, followed by local config attrset # the module, followed by local config attrset
mkBasicOpt = mkBasicOpt = attr: type: name:
attr: type: name:
lib.mkOption { lib.mkOption {
inherit type; inherit type;
default = config.catppuccin.${attr}; default = config.rose-pine.${attr};
description = "Catppuccin ${attr} for ${name}"; description = "Rose Pine ${attr} for ${name}";
}; };
# string -> a # string -> a
# this creates a flavor option for modules # this creates a flavor option for modules
# the first string should be the name of the module, # the first string should be the name of the module,
# followed by the local config attrset # followed by the local config attrset
mkFlavorOpt = ctp.mkBasicOpt "flavor" ctp.types.flavorOption; mkFlavorOpt = rp.mkBasicOpt "flavor" rp.types.flavorOption;
types = { types = {
flavorOption = lib.types.enum [ flavorOption = lib.types.enum [
"latte" "dawn"
"frappe" "moon"
"macchiato" "main"
"mocha"
]; ];
accentOption = lib.types.enum [ accentOption = lib.types.enum [
"blue" "love"
"flamingo" "gold"
"green" "rose"
"lavender" "pine"
"maroon" "foam"
"mauve" "iris"
"peach"
"pink"
"red"
"rosewater"
"sapphire"
"sky"
"teal"
"yellow"
]; ];
}; };
@ -58,51 +46,43 @@ in
# this capitalizes the first letter in a string, # this capitalizes the first letter in a string,
# which is sometimes needed in order to format # which is sometimes needed in order to format
# the names of themes correctly # the names of themes correctly
mkUpper = mkUpper = str:
str:
(lib.toUpper (builtins.substring 0 1 str)) + (builtins.substring 1 (builtins.stringLength str) str); (lib.toUpper (builtins.substring 0 1 str)) + (builtins.substring 1 (builtins.stringLength str) str);
# a -> path -> a # a -> path -> a
# fromJSON but for yaml (and without readFile) # fromJSON but for yaml (and without readFile)
# a should be the local pkgs attrset # a should be the local pkgs attrset
fromYaml = fromYaml = file: let
file: # convert to json
let json = pkgs.runCommand "converted.json" {} ''
# convert to json ${lib.getExe pkgs.yj} < ${file} > $out
json = pkgs.runCommand "converted.json" { } '' '';
${lib.getExe pkgs.yj} < ${file} > $out in
'';
in
builtins.fromJSON (builtins.readFile json); builtins.fromJSON (builtins.readFile json);
# a -> path -> a # a -> path -> a
# fromJSON but for ini (and without readFile) # fromJSON but for ini (and without readFile)
# a should be the local pkgs attrset # a should be the local pkgs attrset
fromINI = fromINI = file: let
file: # convert to json
let json = pkgs.runCommand "converted.json" {} ''
# convert to json ${lib.getExe pkgs.jc} --ini < ${file} > $out
json = pkgs.runCommand "converted.json" { } '' '';
${lib.getExe pkgs.jc} --ini < ${file} > $out in
'';
in
builtins.fromJSON (builtins.readFile json); builtins.fromJSON (builtins.readFile json);
# a -> path -> a # a -> path -> a
# fromJSON but for raw ini (and without readFile) # fromJSON but for raw ini (and without readFile)
# a should be the local pkgs attrset # a should be the local pkgs attrset
fromINIRaw = fromINIRaw = file: let
file: inherit (builtins) fromJSON readFile;
let
inherit (builtins) fromJSON readFile;
# convert to json # convert to json
json = json = with pkgs;
with pkgs; runCommand "converted.json" {} ''
runCommand "converted.json" { } '' ${jc}/bin/jc --ini -r < ${file} > $out
${jc}/bin/jc --ini -r < ${file} > $out '';
''; in
in
fromJSON (readFile json); fromJSON (readFile json);
# string -> a # string -> a
@ -111,24 +91,24 @@ in
# of the module, while `enableDefault` is a boolean # of the module, while `enableDefault` is a boolean
# representing the default of the created `enable` # representing the default of the created `enable`
# option # option
mkCatppuccinOpt = mkRosePineOpt = {
{ name,
name, enableDefault ? config.rose-pine.enable,
enableDefault ? config.catppuccin.enable, }: {
}: enable =
{ lib.mkEnableOption "Rose Pine theme for ${name}"
enable = lib.mkEnableOption "Catppuccin theme for ${name}" // { // {
default = enableDefault; default = enableDefault;
}; };
flavor = ctp.mkFlavorOpt name; flavor = rp.mkFlavorOpt name;
}; };
# string -> a # string -> a
# this creates an accent option for modules # this creates an accent option for modules
# the first string should be the name of the module, # the first string should be the name of the module,
# followed by the local config attrset # followed by the local config attrset
mkAccentOpt = ctp.mkBasicOpt "accent" ctp.types.accentOption; mkAccentOpt = rp.mkBasicOpt "accent" rp.types.accentOption;
# a -> a -> a # a -> a -> a
# see https://nlewo.github.io/nixos-manual-sphinx/development/option-types.xml.html # see https://nlewo.github.io/nixos-manual-sphinx/development/option-types.xml.html
@ -140,23 +120,22 @@ in
# returns the current release version of nixos or home-manager. throws an evaluation error if neither are # returns the current release version of nixos or home-manager. throws an evaluation error if neither are
# found # found
getModuleRelease = getModuleRelease =
config.home.version.release or config.system.nixos.release config.home.version.release
or (throw "Couldn't determine release version!"); or config.system.nixos.release
or (throw "Couldn't determine release version!");
# string -> a -> a # string -> a -> a
# if the current module release is less than `minVersion`, all options are made no-ops with # if the current module release is less than `minVersion`, all options are made no-ops with
# `lib.mkSinkUndeclaredOptions` # `lib.mkSinkUndeclaredOptions`
mkVersionedOpts = mkVersionedOpts = minVersion: option:
minVersion: option: if lib.versionAtLeast rp.getModuleRelease minVersion
if lib.versionAtLeast ctp.getModuleRelease minVersion then then option
option else lib.mkSinkUndeclaredOptions {};
else
lib.mkSinkUndeclaredOptions { };
# string -> a # string -> a
# this is to ensure users are running a supported version of nixos/home-manager # this is to ensure users are running a supported version of nixos/home-manager
assertMinimumVersion = version: { assertMinimumVersion = version: {
assertion = lib.versionAtLeast ctp.getModuleRelease version; assertion = lib.versionAtLeast rp.getModuleRelease version;
message = "`catppuccin/nix` requires at least version ${version} of NixOS/home-manager"; message = "`rose-pine/nix` requires at least version ${version} of NixOS/home-manager";
}; };
} }

View file

@ -6,7 +6,7 @@
}: }:
lib.extend ( lib.extend (
final: _: { final: _: {
ctp = import ./. { rp = import ./. {
inherit config pkgs; inherit config pkgs;
lib = final; lib = final;
}; };

View file

@ -1,15 +1,14 @@
{ pkgs, ... }: {pkgs, ...}: {
{ rose-pine = {
catppuccin = {
enable = true; enable = true;
sources = { sources = {
# this is used to ensure that we are able to apply # this is used to ensure that we are able to apply
# source overrides without breaking the other sources # source overrides without breaking the other sources
palette = pkgs.fetchFromGitHub { palette = pkgs.fetchFromGitHub {
owner = "catppuccin"; owner = "rose-pine";
repo = "palette"; repo = "palette";
rev = "16726028c518b0b94841de57cf51f14c095d43d8"; # refs/tags/1.1.1~1 rev = "d5bbdaaed9b5ad575bce5d924a5a5032f16d8450"; # refs/tags/4.0.1
hash = "sha256-qZjMlZFTzJotOYjURRQMsiOdR2XGGba8XzXwx4+v9tk="; hash = "12zqwps9l7r1dil7in6x0gv6i4cp10915ydy5ydalwrryywp84z3";
}; };
}; };
}; };

View file

@ -1,5 +1,4 @@
{ lib, ... }: {lib, ...}: {
{
imports = [ imports = [
../modules/home-manager ../modules/home-manager
./common.nix ./common.nix
@ -17,6 +16,7 @@
i18n.inputMethod.enabled = "fcitx5"; i18n.inputMethod.enabled = "fcitx5";
programs = { programs = {
aerc.enable = true;
alacritty.enable = true; alacritty.enable = true;
bat.enable = true; bat.enable = true;
bottom.enable = true; bottom.enable = true;
@ -35,7 +35,7 @@
gitui.enable = true; gitui.enable = true;
# this is enabled by default already, but still # this is enabled by default already, but still
# listing explicitly so we know it's tested # listing explicitly so we know it's tested
glamour.catppuccin.enable = true; glamour.rose-pine.enable = true;
helix.enable = true; helix.enable = true;
hyprlock.enable = true; hyprlock.enable = true;
imv.enable = true; imv.enable = true;