diff --git a/capytal/default.nix b/capytal/default.nix index 0ad5720..a232a24 100644 --- a/capytal/default.nix +++ b/capytal/default.nix @@ -1,6 +1,14 @@ -{...}: { +{inputs, ...}: let + catppuccin-base16 = builtins.fetchurl { + url = "https://raw.githubusercontent.com/tinted-theming/schemes/spec-0.11/base16/catppuccin-mocha.yaml"; + sha256 = "1vmw5fqqsg8vsbg6pr44r61pxq1r8kycwd35j3ffmd9s3pxddcvf"; + }; +in { imports = [ + inputs.base16.nixosModule ./forgejo ./garage.nix ]; + + scheme = catppuccin-base16; } diff --git a/capytal/forgejo/default.nix b/capytal/forgejo/default.nix index a469692..612cdfc 100644 --- a/capytal/forgejo/default.nix +++ b/capytal/forgejo/default.nix @@ -62,6 +62,106 @@ in { ''; home = ./templates/home.tmpl; }; + options.label."Default" = with config.scheme.withHashtag; { + "scope/a11y" = { + color = base06; + description = "Accessibility issues and improvements"; + exclusive = true; + }; + "scope/i18n" = { + color = base0F; + description = "Internationalization issues and improvements"; + exclusive = true; + }; + "scope/security" = { + color = base08; + description = "Test suite changes"; + exclusive = true; + }; + "scope/documentation" = { + color = base0E; + description = "Documentation changes"; + exclusive = true; + }; + "scope/testing" = { + color = base0E; + description = "Test suite changes"; + exclusive = true; + }; + "kind/enhancement" = { + color = base0C; + description = "Improvement on existing functionality"; + exclusive = true; + }; + "kind/bug" = { + color = base0D; + description = "Something isn't working"; + exclusive = true; + }; + "kind/feature" = { + color = base07; + description = "New functionality"; + exclusive = true; + }; + "priority/low" = { + color = base0B; + description = "The priority is low"; + exclusive = true; + priority = "low"; + }; + "priority/medium" = { + color = base0A; + description = "The priority is medium"; + exclusive = true; + priority = "medium"; + }; + "priority/high" = { + color = base09; + description = "The priority is high"; + exclusive = true; + priority = "high"; + }; + "priority/critical" = { + color = base08; + description = "The priority is high"; + exclusive = true; + priority = "critical"; + }; + "BREAKING-CHANGE" = { + color = base05; + description = "This change breaks existing functionality"; + }; + "status/to-do" = { + color = base0B; + description = "This is confirmed and needs work"; + exclusive = true; + }; + "status/in-progress" = { + color = base0A; + description = "This is being worked on"; + exclusive = true; + }; + "status/needs-info" = { + color = base09; + description = "This needs more information to continue"; + exclusive = true; + }; + "status/blocked" = { + color = base08; + description = "This is blocked due to something"; + exclusive = true; + }; + "status/abandoned" = { + color = base05; + description = "This is in hiatus/abandoned until further notice"; + exclusive = true; + }; + "status/wont-fix" = { + color = base0E; + description = "This issue won't be fixed"; + exclusive = true; + }; + }; theme = { "frappurccino" = frappurccino-theme; }; @@ -90,6 +190,17 @@ in { DOMAIN = "forgejo.capytal.company"; ROOT_URL = "https://${DOMAIN}"; }; + project = { + PROJECT_BOARD_BASIC_KANBAN_TYPE = [ + ]; + }; + repository = { + DEFAULT_REPO_UNITS = [ + "repo.code" + "repo.issues" + "repo.pulls" + ]; + }; admin = { DISABLE_REGULAR_ORG_CREATION = true; USER_DISABLED_FEATURES = "deletion manage_ssh_keys manage_gpg_keys"; diff --git a/flake.lock b/flake.lock index 885092a..b188e04 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,23 @@ { "nodes": { + "base16": { + "inputs": { + "fromYaml": "fromYaml" + }, + "locked": { + "lastModified": 1721224776, + "narHash": "sha256-iakVQHg2DSmdOc5dNBwrDt9JLRxX5MT+IIbxfZEpGdo=", + "owner": "SenchoPens", + "repo": "base16.nix", + "rev": "c89c8123310257f3ddc04cc59aa4b5573c6d515f", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "base16.nix", + "type": "github" + } + }, "dot013-environment": { "inputs": { "nixpkgs": [ @@ -34,11 +52,27 @@ "rev": "b24a35a56013a760515198fae58ce8711a22d05c", "revCount": 54, "type": "git", - "url": "file:///home/guz/.projects/capytal/frappurccino-forgejo" + "url": "https://forgejo.capytal.company/capytal/frappurccino-forgejo" }, "original": { "type": "git", - "url": "file:///home/guz/.projects/capytal/frappurccino-forgejo" + "url": "https://forgejo.capytal.company/capytal/frappurccino-forgejo" + } + }, + "fromYaml": { + "flake": false, + "locked": { + "lastModified": 1721222302, + "narHash": "sha256-5vL4w9+tS9yd8WpIiDUtxN1IuxCVK2nebZMs/hCXXis=", + "owner": "SenchoPens", + "repo": "fromYaml", + "rev": "93bad85d1633b8b27287b438c0bd394094c24d06", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "fromYaml", + "type": "github" } }, "gitignore": { @@ -69,11 +103,11 @@ ] }, "locked": { - "lastModified": 1725703823, - "narHash": "sha256-tDgM4d8mLK0Hd6YMB2w1BqMto1XBXADOzPEaLl10VI4=", + "lastModified": 1726592409, + "narHash": "sha256-2Y6CDvD/BD43WLS77PHu6dUHbdUfFhuzkY8oJAecD/U=", "owner": "nix-community", "repo": "home-manager", - "rev": "208df2e558b73b6a1f0faec98493cb59a25f62ba", + "rev": "2ab00f89dd3ecf8012f5090e6d7ca1a7ea30f594", "type": "github" }, "original": { @@ -90,11 +124,11 @@ ] }, "locked": { - "lastModified": 1725765290, - "narHash": "sha256-hwX53i24KyWzp2nWpQsn8lfGQNCP0JoW/bvQmcR1DPY=", + "lastModified": 1726449931, + "narHash": "sha256-1AX7MyYzP7sNgZiGF8jwehCCI75y2kBGwACeryJs+yE=", "owner": "Mic92", "repo": "nix-index-database", - "rev": "642275444c5a9defce57219c944b3179bf2adaa9", + "rev": "c1b0fa0bec5478185eae2fd3f39b9e906fc83995", "type": "github" }, "original": { @@ -105,11 +139,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1725930920, - "narHash": "sha256-RVhD9hnlTT2nJzPHlAqrWqCkA7T6CYrP41IoVRkciZM=", + "lastModified": 1726447378, + "narHash": "sha256-2yV8nmYE1p9lfmLHhOCbYwQC/W8WYfGQABoGzJOb1JQ=", "owner": "nixos", "repo": "nixpkgs", - "rev": "44a71ff39c182edaf25a7ace5c9454e7cba2c658", + "rev": "086b448a5d54fd117f4dc2dee55c9f0ff461bdc1", "type": "github" }, "original": { @@ -137,11 +171,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1726062873, - "narHash": "sha256-IiA3jfbR7K/B5+9byVi9BZGWTD4VSbWe8VLpp9B/iYk=", + "lastModified": 1726463316, + "narHash": "sha256-gI9kkaH0ZjakJOKrdjaI/VbaMEo9qBbSUl93DnU7f4c=", "owner": "nixos", "repo": "nixpkgs", - "rev": "4f807e8940284ad7925ebd0a0993d2a1791acb2f", + "rev": "99dc8785f6a0adac95f5e2ab05cc2e1bf666d172", "type": "github" }, "original": { @@ -153,6 +187,7 @@ }, "root": { "inputs": { + "base16": "base16", "dot013-environment": "dot013-environment", "frappurccino-forgejo": "frappurccino-forgejo", "home-manager": "home-manager", @@ -170,11 +205,11 @@ "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1726218807, - "narHash": "sha256-z7CoWbSOtsOz8TmRKDnobURkKfv6nPZCo3ayolNuQGc=", + "lastModified": 1726524647, + "narHash": "sha256-qis6BtOOBBEAfUl7FMHqqTwRLB61OL5OFzIsOmRz2J4=", "owner": "Mic92", "repo": "sops-nix", - "rev": "f30b1bac192e2dc252107ac8a59a03ad25e1b96e", + "rev": "e2d404a7ea599a013189aa42947f66cede0645c8", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 8a7d0c4..a498f2a 100644 --- a/flake.nix +++ b/flake.nix @@ -20,12 +20,19 @@ inputs.nixpkgs.follows = "nixpkgs"; }; - dot013-environment.url = "github:dot013/environment"; - dot013-environment.inputs.nixpkgs.follows = "nixpkgs-unstable"; + dot013-environment = { + url = "github:dot013/environment"; + inputs.nixpkgs.follows = "nixpkgs-unstable"; + }; + + base16 = { + url = "github:SenchoPens/base16.nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; frappurccino-forgejo = { - url = "git+file:///home/guz/.projects/capytal/frappurccino-forgejo"; - # url = "git+https://forgejo.capytal.company/capytal/frappurccino-forgejo"; + # url = "git+file:///home/guz/.projects/capytal/frappurccino-forgejo"; + url = "git+https://forgejo.capytal.company/capytal/frappurccino-forgejo"; inputs.nixpkgs.follows = "nixpkgs"; }; }; diff --git a/modules/forgejo/customization.nix b/modules/forgejo/customization.nix index 265a337..434a45b 100644 --- a/modules/forgejo/customization.nix +++ b/modules/forgejo/customization.nix @@ -23,6 +23,40 @@ in { type = attrsOf anything; default = {}; }; + options = { + label = mkOption { + type = attrsOf (attrsOf (submodule ({ + config, + lib, + ... + }: + with lib; + with lib.types; { + options = { + name = mkOption { + type = nullOr str; + default = null; + }; + exclusive = mkOption { + type = bool; + default = false; + }; + color = mkOption { + type = str; + }; + description = mkOption { + type = str; + default = ""; + }; + priority = mkOption { + type = nullOr (enum ["low" "medium" "high" "critical"]); + default = null; + }; + }; + }))); + default = {}; + }; + }; templates = { header = mkOption { type = nullOr fileType; @@ -81,16 +115,9 @@ in { else {source = theme;}; assetsDir = "${forgejoConfig.customDir}/public/assets"; templatesDir = "${forgejoConfig.customDir}/templates"; + optionsDir = "${forgejoConfig.customDir}/options"; in { - "${templatesDir}/custom/header.tmpl" = - mkIf (!(isNull customization.templates.header)) - (fileTypeToHomeFile customization.templates.header); - - "${templatesDir}/home.tmpl" = - mkIf (!(isNull customization.templates.home)) - (fileTypeToHomeFile customization.templates.home); - "${assetsDir}/img/logo.svg" = mkIf (!(isNull customization.logo.svg)) (fileTypeToHomeFile customization.logo.svg); @@ -106,7 +133,34 @@ in { "${assetsDir}/img/favicon.png" = mkIf (!(isNull customization.favicon.png)) (fileTypeToHomeFile customization.favicon.png); + + "${templatesDir}/custom/header.tmpl" = + mkIf (!(isNull customization.templates.header)) + (fileTypeToHomeFile customization.templates.header); + + "${templatesDir}/home.tmpl" = + mkIf (!(isNull customization.templates.home)) + (fileTypeToHomeFile customization.templates.home); } + // (lib.attrsets.mapAttrs' + (ln: lv: + lib.attrsets.nameValuePair "${optionsDir}/label/${ln}.yaml" { + text = toJSON { + labels = attrValues (mapAttrs + (n: v: { + name = + if isNull v.name + then n + else v.name; + exclusive = v.exclusive; + color = v.color; + description = v.description; + priority = v.priority; + }) + lv); + }; + }) + customization.options.label) // (lib.attrsets.mapAttrs' (n: v: lib.attrsets.nameValuePair "${assetsDir}/${n}" v) customization.assets) diff --git a/modules/forgejo/default.nix b/modules/forgejo/default.nix index 76400a7..b52460e 100644 --- a/modules/forgejo/default.nix +++ b/modules/forgejo/default.nix @@ -42,6 +42,18 @@ in { default = "https://localhost:${toString cfg.settings.server.HTTP_PORT}"; }; }; + project = { + PROJECT_BOARD_BASIC_KANBAN_TYPE = mkOption { + type = listOf str; + defaut = ["To Do" "In Progress" "Done"]; + apply = t: initList t; + }; + PROJECT_BOARD_BUG_TRIAGE_TYPE = mkOption { + type = listOf str; + defaut = ["Needs Triage" "High Priority" "Low Priority" "Closed"]; + apply = t: initList t; + }; + }; repository = { DEFAULT_REPO_UNITS = mkOption { type = listOf str;