diff --git a/modules/services/forgejo/default.nix b/modules/services/forgejo/default.nix index 4f80ab4..d05beed 100644 --- a/modules/services/forgejo/default.nix +++ b/modules/services/forgejo/default.nix @@ -53,8 +53,18 @@ in { networking.firewall.interfaces."${firewallInterface}".allowedTCPPorts = [cfg.port]; - my.services.homepage-dashboard.services.Git.Forgejo = { - href = forgejoUrl; + webapps.dashboardCategories = [ + { + name = "Git"; + tag = "git"; + } + ]; + + webapps.apps.forgejo.dashboard = { + name = "Forgejo"; + category = "git"; + icon = "git-alt"; + url = forgejoUrl; description = "Beyond coding. We forge."; }; }) diff --git a/modules/services/homer/config.nix b/modules/services/homer/config.nix new file mode 100644 index 0000000..8b9b839 --- /dev/null +++ b/modules/services/homer/config.nix @@ -0,0 +1,130 @@ +# Heavily inspired by https://github.com/Stunkymonkey/nixos/blob/b061b1785b4d07f9032b8cf17e866ff9dbc947b0/modules/services/homer/config.nix +{ + config, + lib, + ... +}: { + options.webapps = { + dashboardCategories = lib.mkOption { + type = lib.types.listOf (lib.types.submodule { + options = { + name = lib.mkOption { + type = lib.types.str; + description = '' + Category name. + ''; + example = "Applications"; + }; + tag = lib.mkOption { + type = lib.types.str; + description = '' + Category tag. + ''; + example = "app"; + }; + }; + }); + description = '' + App categories to display on the dashboard. + ''; + example = [ + { + name = "Application"; + tag = "app"; + } + ]; + default = []; + }; + + apps = lib.mkOption { + type = + lib.types.attrsOf + (lib.types.submodule { + options = { + dashboard = { + url = lib.mkOption { + type = lib.types.nullOr lib.types.str; + description = '' + Url to webapp + ''; + example = "http://192.168.1.10:1234"; + default = null; + }; + name = lib.mkOption { + type = lib.types.nullOr lib.types.str; + description = '' + Application name. + ''; + example = "App"; + default = null; + }; + category = lib.mkOption { + type = lib.types.nullOr lib.types.str; + description = '' + App category tag. + ''; + example = "app"; + default = null; + }; + icon = lib.mkOption { + type = lib.types.nullOr lib.types.str; + description = '' + Font Awesome application icon. + ''; + example = "rss"; + default = null; + }; + type = lib.mkOption { + type = lib.types.nullOr lib.types.str; + description = '' + application type. + ''; + example = "Ping"; + default = "Ping"; + }; + method = lib.mkOption { + type = lib.types.enum ["get" "head"]; + description = '' + method of request used + ''; + example = "get"; + default = "head"; + }; + }; + }; + }); + description = '' + Defines a web application. + ''; + default = {}; + }; + }; + + config = let + cfg = config.webapps; + in { + lib.webapps.homerServices = let + apps = builtins.filter (a: a.dashboard.name != null) (lib.attrValues cfg.apps); + in + lib.forEach cfg.dashboardCategories ( + cat: let + catApps = lib.sort (a: b: a.dashboard.name < b.dashboard.name) ( + builtins.filter + (a: + a.dashboard.category + != null + && a.dashboard.category == cat.tag + || a.dashboard.category == null && cat.tag == "misc") + apps + ); + in { + inherit (cat) name; + items = lib.forEach catApps (a: { + inherit (a.dashboard) method name type url; + icon = lib.optionalString (a.dashboard.icon != null) "fas fa-${a.dashboard.icon}"; + target = "_blank"; + }); + } + ); + }; +} diff --git a/modules/services/homer/default.nix b/modules/services/homer/default.nix index b6453c8..083a952 100644 --- a/modules/services/homer/default.nix +++ b/modules/services/homer/default.nix @@ -7,156 +7,19 @@ with lib; let cfg = config.my.services.homer; inherit (config.my.server) domain; - homerConfig = pkgs.writeText "homerConfig.yml" '' - --- - # Homepage configuration - # See https://fontawesome.com/v5/search for icons options - - # Optional: Use external configuration file. - # Using this will ignore remaining config in this file - # externalConfig: https://example.com/server-luci/config.yaml - - title: "App dashboard" - subtitle: "Homer" - # documentTitle: "Welcome" # Customize the browser tab text - logo: "assets/logo.png" - # Alternatively a fa icon can be provided: - # icon: "fas fa-skull-crossbones" - - header: true # Set to false to hide the header - # Optional: Different hotkey for search, defaults to "/" - # hotkey: - # search: "Shift" - footer: '
Created with ❤️ with bulma, vuejs & font awesome // Fork me on
' # set false if you want to hide it. - - columns: "3" # "auto" or number (must be a factor of 12: 1, 2, 3, 4, 6, 12) - connectivityCheck: true # whether you want to display a message when the apps are not accessible anymore (VPN disconnected for example). - # You should set it to true when using an authentication proxy, it also reloads the page when a redirection is detected when checking connectivity. - - # Optional: Proxy / hosting option - proxy: - useCredentials: false # send cookies & authorization headers when fetching service specific data. Set to `true` if you use an authentication proxy. Can be overrided on service level. - - # Set the default layout and color scheme - defaults: - layout: columns # Either 'columns', or 'list' - colorTheme: auto # One of 'auto', 'light', or 'dark' - - # Optional theming - theme: default # 'default' or one of the themes available in 'src/assets/themes'. - - # Optional custom stylesheet - # Will load custom CSS files. Especially useful for custom icon sets. - # stylesheet: - # - "assets/custom.css" - - # Here is the exhaustive list of customization parameters - # However all value are optional and will fallback to default if not set. - # if you want to change only some of the colors, feel free to remove all unused key. - colors: - light: - highlight-primary: "#3367d6" - highlight-secondary: "#4285f4" - highlight-hover: "#5a95f5" - background: "#f5f5f5" - card-background: "#ffffff" - text: "#363636" - text-header: "#424242" - text-title: "#303030" - text-subtitle: "#424242" - card-shadow: rgba(0, 0, 0, 0.1) - link: "#3273dc" - link-hover: "#363636" - background-image: "assets/your/light/bg.png" - dark: - highlight-primary: "#3367d6" - highlight-secondary: "#4285f4" - highlight-hover: "#5a95f5" - background: "#131313" - card-background: "#2b2b2b" - text: "#eaeaea" - text-header: "#ffffff" - text-title: "#fafafa" - text-subtitle: "#f5f5f5" - card-shadow: rgba(0, 0, 0, 0.4) - link: "#3273dc" - link-hover: "#ffdd57" - background-image: "assets/your/dark/bg.png" - - # Optional message - message: - # url: "https://