diff --git a/bacon.toml b/bacon.toml new file mode 100644 index 0000000..6e55f7e --- /dev/null +++ b/bacon.toml @@ -0,0 +1,26 @@ +default_job = "run" +env.CARGO_TERM_COLOR = "always" + +[jobs.check] +command = ["cargo", "check"] +need_stdout = false + +# Run clippy on the default target +[jobs.clippy] +command = ["cargo", "clippy"] +need_stdout = false + +# You can run your application and have the result displayed in bacon, +# if it makes sense for this crate. +[jobs.run] +command = [ + "just", "run", +] +need_stdout = true +allow_warnings = true +background = true +watch = [ + "content/", + "static/", + "styles/" +] diff --git a/nix/shell.nix b/nix/shell.nix index c001046..a775b2d 100644 --- a/nix/shell.nix +++ b/nix/shell.nix @@ -1,20 +1,22 @@ { - just, - dart-sass, + mkShell, + callPackage, + + bacon, clippy, rustfmt, - callPackage, rust-analyzer, }: let mainPkg = callPackage ./default.nix { }; in -mainPkg.overrideAttrs (oa: { - nativeBuildInputs = [ - just - dart-sass +mkShell { + inputsFrom = [ mainPkg ]; + + packages = [ + bacon clippy rustfmt rust-analyzer - ] ++ (oa.nativeBuildInputs or [ ]); -}) + ]; +} diff --git a/styles/main.scss b/styles/main.scss index 66b50b8..2363380 100644 --- a/styles/main.scss +++ b/styles/main.scss @@ -10,6 +10,7 @@ @use 'layouts/base.scss'; // reusable styles +@use 'partials/alerts.scss'; @use 'partials/donations.scss'; @use 'partials/blog-preview.scss'; @use 'partials/project.scss'; diff --git a/styles/partials/alerts.scss b/styles/partials/alerts.scss new file mode 100644 index 0000000..d26b1f8 --- /dev/null +++ b/styles/partials/alerts.scss @@ -0,0 +1,35 @@ +.alert { + padding-left: 1rem; + border-left: 0.25rem solid; + + border-left-color: var(--alert-color, var(--blue)); + + .alert-title { + font-weight: 700; + color: var(--alert-color, var(--blue)); + } +} + +$alerts: + "note" "" "blue", + "tip" "" "green", + "warning" "" "yellow", + "important" "" "purple", + "caution" "" "red"; + +@each $name, $icon, $color in $alerts { + .alert-#{$name} { + --alert-color: var(--#{$color}); + + .alert-title::before { + content: ""; + mask: url("data:image/svg+xml;charset=utf-8,#{$icon}"); + display: inline-block; + margin-right: 0.5rem; + vertical-align: middle; + width: 1rem; + height: 1rem; + background-color: var(--alert-color, var(--blue)); + } + } +} diff --git a/styles/themes.scss b/styles/themes.scss index a55c8ce..ccfc10e 100644 --- a/styles/themes.scss +++ b/styles/themes.scss @@ -6,7 +6,13 @@ --bg-lighter: #121212; --card: #1f1f1f; - --special: #74c7ec; + --special: var(--blue); + + --blue: #74c7ec; + --green: #a6e3a1; + --yellow: #f9e2af; + --purple: #cba6f7; + --red: #f38ba8; code.hljs{color:#cdd6f4};code .hljs-keyword{color:#cba6f7;};code .hljs-built_in{color:#f38ba8};code .hljs-type{color:#f9e2af};code .hljs-literal{color:#fab387};code .hljs-number{color:#fab387};code .hljs-operator{color:#94e2d5};code .hljs-punctuation{color:#bac2de};code .hljs-property{color:#94e2d5};code .hljs-regexp{color:#f5c2e7};code .hljs-string{color:#a6e3a1};code .hljs-char.escape_{color:#a6e3a1};code .hljs-subst{color:#a6adc8};code .hljs-symbol{color:#f2cdcd};code .hljs-variable{color:#cba6f7};code .hljs-variable.language_{color:#cba6f7};code .hljs-variable.constant_{color:#fab387};code .hljs-title{color:#89b4fa};code .hljs-title.class_{color:#f9e2af};code .hljs-title.function_{color:#89b4fa};code .hljs-params{color:#cdd6f4};code .hljs-comment{color:#585b70};code .hljs-doctag{color:#f38ba8};code .hljs-meta{color:#fab387};code .hljs-section{color:#89b4fa};code .hljs-tag{color:#a6adc8};code .hljs-name{color:#cba6f7};code .hljs-attr{color:#89b4fa};code .hljs-attribute{color:#a6e3a1};code .hljs-bullet{color:#94e2d5};code .hljs-code{color:#a6e3a1};code .hljs-emphasis{color:#f38ba8;font-style:italic};code .hljs-strong{color:#f38ba8;font-weight:bold};code .hljs-formula{color:#94e2d5};code .hljs-link{color:#74c7ec;font-style:italic};code .hljs-quote{color:#a6e3a1;font-style:italic};code .hljs-selector-tag{color:#f9e2af};code .hljs-selector-id{color:#89b4fa};code .hljs-selector-class{color:#94e2d5};code .hljs-selector-attr{color:#cba6f7};code .hljs-selector-pseudo{color:#94e2d5};code .hljs-template-tag{color:#f2cdcd};code .hljs-template-variable{color:#f2cdcd};code .hljs-addition{color:#a6e3a1};code .hljs-deletion{color:#f38ba8}; } @@ -20,7 +26,13 @@ --bg-lighter: #eaeef3; --card: #d0d5df; - --special: #1a90c4; + --special: var(--blue); + + --blue: #1a90c4; + --green: #40a02b; + --yellow: #df8e1d; + --purple: #8839ef; + --red: #d20f39; code.hljs{color:#4c4f69};code .hljs-keyword{color:#8839ef};code .hljs-built_in{color:#d20f39};code .hljs-type{color:#df8e1d};code .hljs-literal{color:#fe640b};code .hljs-number{color:#fe640b};code .hljs-operator{color:#179299};code .hljs-punctuation{color:#5c5f77};code .hljs-property{color:#179299};code .hljs-regexp{color:#ea76cb};code .hljs-string{color:#40a02b};code .hljs-char.escape_{color:#40a02b};code .hljs-subst{color:#6c6f85};code .hljs-symbol{color:#dd7878};code .hljs-variable{color:#8839ef};code .hljs-variable.language_{color:#8839ef};code .hljs-variable.constant_{color:#fe640b};code .hljs-title{color:#1e66f5};code .hljs-title.class_{color:#df8e1d};code .hljs-title.function_{color:#1e66f5};code .hljs-params{color:#4c4f69};code .hljs-comment{color:#acb0be};code .hljs-doctag{color:#d20f39};code .hljs-meta{color:#fe640b};code .hljs-section{color:#1e66f5};code .hljs-tag{color:#6c6f85};code .hljs-name{color:#8839ef};code .hljs-attr{color:#1e66f5};code .hljs-attribute{color:#40a02b};code .hljs-bullet{color:#179299};code .hljs-code{color:#40a02b};code .hljs-emphasis{color:#d20f39;font-style:italic};code .hljs-strong{color:#d20f39;font-weight:bold};code .hljs-formula{color:#179299};code .hljs-link{color:#209fb5;font-style:italic};code .hljs-quote{color:#40a02b;font-style:italic};code .hljs-selector-tag{color:#df8e1d};code .hljs-selector-id{color:#1e66f5};code .hljs-selector-class{color:#179299};code .hljs-selector-attr{color:#8839ef};code .hljs-selector-pseudo{color:#179299};code .hljs-template-tag{color:#dd7878};code .hljs-template-variable{color:#dd7878};code .hljs-addition{color:#40a02b};code .hljs-deletion{color:#d20f39}; } @@ -33,7 +45,13 @@ --bg-lighter: #1e1e2e; --card: #313244; - --special: #74c7ec; + --special: var(--blue); + + --blue: #74c7ec; + --green: #a6e3a1; + --yellow: #f9e2af; + --purple: #cba6f7; + --red: #f38ba8; code.hljs{color:#cdd6f4};code .hljs-keyword{color:#cba6f7;};code .hljs-built_in{color:#f38ba8};code .hljs-type{color:#f9e2af};code .hljs-literal{color:#fab387};code .hljs-number{color:#fab387};code .hljs-operator{color:#94e2d5};code .hljs-punctuation{color:#bac2de};code .hljs-property{color:#94e2d5};code .hljs-regexp{color:#f5c2e7};code .hljs-string{color:#a6e3a1};code .hljs-char.escape_{color:#a6e3a1};code .hljs-subst{color:#a6adc8};code .hljs-symbol{color:#f2cdcd};code .hljs-variable{color:#cba6f7};code .hljs-variable.language_{color:#cba6f7};code .hljs-variable.constant_{color:#fab387};code .hljs-title{color:#89b4fa};code .hljs-title.class_{color:#f9e2af};code .hljs-title.function_{color:#89b4fa};code .hljs-params{color:#cdd6f4};code .hljs-comment{color:#585b70};code .hljs-doctag{color:#f38ba8};code .hljs-meta{color:#fab387};code .hljs-section{color:#89b4fa};code .hljs-tag{color:#a6adc8};code .hljs-name{color:#cba6f7};code .hljs-attr{color:#89b4fa};code .hljs-attribute{color:#a6e3a1};code .hljs-bullet{color:#94e2d5};code .hljs-code{color:#a6e3a1};code .hljs-emphasis{color:#f38ba8;font-style:italic};code .hljs-strong{color:#f38ba8;font-weight:bold};code .hljs-formula{color:#94e2d5};code .hljs-link{color:#74c7ec;font-style:italic};code .hljs-quote{color:#a6e3a1;font-style:italic};code .hljs-selector-tag{color:#f9e2af};code .hljs-selector-id{color:#89b4fa};code .hljs-selector-class{color:#94e2d5};code .hljs-selector-attr{color:#cba6f7};code .hljs-selector-pseudo{color:#94e2d5};code .hljs-template-tag{color:#f2cdcd};code .hljs-template-variable{color:#f2cdcd};code .hljs-addition{color:#a6e3a1};code .hljs-deletion{color:#f38ba8}; } @@ -46,7 +64,13 @@ --bg-lighter: #24273a; --card: #363a4f; - --special: #7dc4e4; + --special: var(--blue); + + --blue: #7dc4e4; + --green: #a6da95; + --yellow: #eed49f; + --purple: #c6a0f6; + --red: #ed8796; code.hljs{color:#cad3f5};code .hljs-keyword{color:#c6a0f6};code .hljs-built_in{color:#ed8796};code .hljs-type{color:#eed49f};code .hljs-literal{color:#f5a97f};code .hljs-number{color:#f5a97f};code .hljs-operator{color:#8bd5ca};code .hljs-punctuation{color:#b8c0e0};code .hljs-property{color:#8bd5ca};code .hljs-regexp{color:#f5bde6};code .hljs-string{color:#a6da95};code .hljs-char.escape_{color:#a6da95};code .hljs-subst{color:#a5adcb};code .hljs-symbol{color:#f0c6c6};code .hljs-variable{color:#c6a0f6};code .hljs-variable.language_{color:#c6a0f6};code .hljs-variable.constant_{color:#f5a97f};code .hljs-title{color:#8aadf4};code .hljs-title.class_{color:#eed49f};code .hljs-title.function_{color:#8aadf4};code .hljs-params{color:#cad3f5};code .hljs-comment{color:#5b6078};code .hljs-doctag{color:#ed8796};code .hljs-meta{color:#f5a97f};code .hljs-section{color:#8aadf4};code .hljs-tag{color:#a5adcb};code .hljs-name{color:#c6a0f6};code .hljs-attr{color:#8aadf4};code .hljs-attribute{color:#a6da95};code .hljs-bullet{color:#8bd5ca};code .hljs-code{color:#a6da95};code .hljs-emphasis{color:#ed8796;font-style:italic};code .hljs-strong{color:#ed8796;font-weight:bold};code .hljs-formula{color:#8bd5ca};code .hljs-link{color:#7dc4e4;font-style:italic};code .hljs-quote{color:#a6da95;font-style:italic};code .hljs-selector-tag{color:#eed49f};code .hljs-selector-id{color:#8aadf4};code .hljs-selector-class{color:#8bd5ca};code .hljs-selector-attr{color:#c6a0f6};code .hljs-selector-pseudo{color:#8bd5ca};code .hljs-template-tag{color:#f0c6c6};code .hljs-template-variable{color:#f0c6c6};code .hljs-addition{color:#a6da95};code .hljs-deletion{color:#ed8796}; } @@ -59,7 +83,13 @@ --bg-lighter: #303446; --card: #414559; - --special: #85c1dc; + --special: var(--blue); + + --blue: #85c1dc; + --green: #a6d189; + --yellow: #e5c890; + --purple: #ca9ee6; + --red: #e78284; code.hljs{color:#c6d0f5};code .hljs-keyword{color:#ca9ee6};code .hljs-built_in{color:#e78284};code .hljs-type{color:#e5c890};code .hljs-literal{color:#ef9f76};code .hljs-number{color:#ef9f76};code .hljs-operator{color:#81c8be};code .hljs-punctuation{color:#b5bfe2};code .hljs-property{color:#81c8be};code .hljs-regexp{color:#f4b8e4};code .hljs-string{color:#a6d189};code .hljs-char.escape_{color:#a6d189};code .hljs-subst{color:#a5adce};code .hljs-symbol{color:#eebebe};code .hljs-variable{color:#ca9ee6};code .hljs-variable.language_{color:#ca9ee6};code .hljs-variable.constant_{color:#ef9f76};code .hljs-title{color:#8caaee};code .hljs-title.class_{color:#e5c890};code .hljs-title.function_{color:#8caaee};code .hljs-params{color:#c6d0f5};code .hljs-comment{color:#626880};code .hljs-doctag{color:#e78284};code .hljs-meta{color:#ef9f76};code .hljs-section{color:#8caaee};code .hljs-tag{color:#a5adce};code .hljs-name{color:#ca9ee6};code .hljs-attr{color:#8caaee};code .hljs-attribute{color:#a6d189};code .hljs-bullet{color:#81c8be};code .hljs-code{color:#a6d189};code .hljs-emphasis{color:#e78284;font-style:italic};code .hljs-strong{color:#e78284;font-weight:bold};code .hljs-formula{color:#81c8be};code .hljs-link{color:#85c1dc;font-style:italic};code .hljs-quote{color:#a6d189;font-style:italic};code .hljs-selector-tag{color:#e5c890};code .hljs-selector-id{color:#8caaee};code .hljs-selector-class{color:#81c8be};code .hljs-selector-attr{color:#ca9ee6};code .hljs-selector-pseudo{color:#81c8be};code .hljs-template-tag{color:#eebebe};code .hljs-template-variable{color:#eebebe};code .hljs-addition{color:#a6d189};code .hljs-deletion{color:#e78284}; } @@ -72,7 +102,13 @@ --bg-lighter: #e6e9ef; --card: #ccd0da; - --special: #209fb5; + --special: var(--blue); + + --blue: #209fb5; + --green: #40a02b; + --yellow: #df8e1d; + --purple: #8839ef; + --red: #d20f39; code.hljs{color:#4c4f69};code .hljs-keyword{color:#8839ef};code .hljs-built_in{color:#d20f39};code .hljs-type{color:#df8e1d};code .hljs-literal{color:#fe640b};code .hljs-number{color:#fe640b};code .hljs-operator{color:#179299};code .hljs-punctuation{color:#5c5f77};code .hljs-property{color:#179299};code .hljs-regexp{color:#ea76cb};code .hljs-string{color:#40a02b};code .hljs-char.escape_{color:#40a02b};code .hljs-subst{color:#6c6f85};code .hljs-symbol{color:#dd7878};code .hljs-variable{color:#8839ef};code .hljs-variable.language_{color:#8839ef};code .hljs-variable.constant_{color:#fe640b};code .hljs-title{color:#1e66f5};code .hljs-title.class_{color:#df8e1d};code .hljs-title.function_{color:#1e66f5};code .hljs-params{color:#4c4f69};code .hljs-comment{color:#acb0be};code .hljs-doctag{color:#d20f39};code .hljs-meta{color:#fe640b};code .hljs-section{color:#1e66f5};code .hljs-tag{color:#6c6f85};code .hljs-name{color:#8839ef};code .hljs-attr{color:#1e66f5};code .hljs-attribute{color:#40a02b};code .hljs-bullet{color:#179299};code .hljs-code{color:#40a02b};code .hljs-emphasis{color:#d20f39;font-style:italic};code .hljs-strong{color:#d20f39;font-weight:bold};code .hljs-formula{color:#179299};code .hljs-link{color:#209fb5;font-style:italic};code .hljs-quote{color:#40a02b;font-style:italic};code .hljs-selector-tag{color:#df8e1d};code .hljs-selector-id{color:#1e66f5};code .hljs-selector-class{color:#179299};code .hljs-selector-attr{color:#8839ef};code .hljs-selector-pseudo{color:#179299};code .hljs-template-tag{color:#dd7878};code .hljs-template-variable{color:#dd7878};code .hljs-addition{color:#40a02b};code .hljs-deletion{color:#d20f39}; } @@ -85,7 +121,13 @@ --bg-lighter: #232A2E; --card: #313B40; - --special: #9BB5CF; + --special: var(--blue); + + --blue: #9BB5CF; + --purple: #e3a8d1; + --red: #e67e80; + --yellow: #dbbc7f; + --green: #b2c98f; code.hljs{color:#dddecf};code .hljs-keyword{color:#E67E80;};code .hljs-built_in{color:#E3A8D1};code .hljs-type{color:#DBBC7F};code .hljs-literal{color:#E3A8D1};code .hljs-number{color:#E3A8D1};code .hljs-operator{color:#839e9a};code .hljs-punctuation{color:#839e9a};code .hljs-property{color:#dddecf};code .hljs-regexp{color:#DBBC7F;};code .hljs-string{color:#B2C98F};code .hljs-char.escape_{color:#E69875};code .hljs-subst{color:#94aaa0};code .hljs-symbol{color:#dddecf};code .hljs-variable{color:#dddecf};code .hljs-variable.language_{color:#E3A8D1};code .hljs-variable.constant_{color:#E3A8D1};code .hljs-title{color:#DBBC7F};code .hljs-title.class_{color:#DBBC7F};code .hljs-title.function_{color:#B2C98F};code .hljs-params{color:#dddecf};code .hljs-comment{color:#839e9a};code .hljs-doctag{color:#E67E80};code .hljs-meta{color:#E3A8D1};code .hljs-section{color:#9BB5CF};code .hljs-tag{color:#E3A8D1};code .hljs-name{color:#E3A8D1};code .hljs-attr{color:#E3A8D1};code .hljs-attribute{color:#E3A8D1};code .hljs-bullet{color:#839e9a};code .hljs-code{color:#E67E80};code .hljs-emphasis{color:#B2C98F;font-style:italic};code .hljs-strong{color:#E69875;font-weight:bold};code .hljs-formula{color:#9BB5CF};code .hljs-link{color:#E3A8D1;font-style:italic};code .hljs-quote{color:#94AAA0;font-style:italic};code .hljs-selector-tag{color:#E3A8D1};code .hljs-selector-id{color:#E3A8D1};code .hljs-selector-class{color:#DBBC7F};code .hljs-selector-attr{color:#E3A8D1};code .hljs-selector-pseudo{color:#E3A8D1};code .hljs-template-tag{color:#E3A8D1};code .hljs-template-variable{color:#E3A8D1};code .hljs-addition{color:#B2C98F};code .hljs-deletion{color:#E67E80}; } @@ -98,7 +140,13 @@ --bg-lighter: #0b0b0b; --card: #272525; - --special: #78a9ff; + --special: var(--blue); + + --blue: #78a9ff; + --green: #42be65; + --yellow: #fddc69; + --purple: #d4bbff; + --red: #fa4d56; code.hljs{color:#f4f4f4};code .hljs-keyword{color:#d4bbff;};code .hljs-built_in{color:#fa4d56};code .hljs-type{color:#fddc69};code .hljs-literal{color:#fe832b};code .hljs-number{color:#fe832b};code .hljs-operator{color:#3ddbd9};code .hljs-punctuation{color:#e0e0e0};code .hljs-property{color:#3ddbd9};code .hljs-regexp{color:#ff7eb6};code .hljs-string{color:#42be65};code .hljs-char.escape_{color:#42be65};code .hljs-subst{color:#c6c6c6};code .hljs-symbol{color:#ffb3b8};code .hljs-variable{color:#d4bbff};code .hljs-variable.language_{color:#d4bbff};code .hljs-variable.constant_{color:#fe832b};code .hljs-title{color:#4589ff};code .hljs-title.class_{color:#fddc69};code .hljs-title.function_{color:#4589ff};code .hljs-params{color:#f4f4f4};code .hljs-comment{color:#525252};code .hljs-doctag{color:#fa4d56};code .hljs-meta{color:#fe832b};code .hljs-section{color:#4589ff};code .hljs-tag{color:#c6c6c6};code .hljs-name{color:#d4bbff};code .hljs-attr{color:#4589ff};code .hljs-attribute{color:#42be65};code .hljs-bullet{color:#3ddbd9};code .hljs-code{color:#42be65};code .hljs-emphasis{color:#fa4d56;font-style:italic};code .hljs-strong{color:#fa4d56;font-weight:bold};code .hljs-formula{color:#3ddbd9};code .hljs-link{color:#78a9ff;font-style:italic};code .hljs-quote{color:#42be65;font-style:italic};code .hljs-selector-tag{color:#fddc69};code .hljs-selector-id{color:#4589ff};code .hljs-selector-class{color:#3ddbd9};code .hljs-selector-attr{color:#d4bbff};code .hljs-selector-pseudo{color:#3ddbd9};code .hljs-template-tag{color:#ffb3b8};code .hljs-template-variable{color:#ffb3b8};code .hljs-addition{color:#42be65};code .hljs-deletion{color:#fa4d56}; }