From f077913a4dac64d626b9053a6427ecd580e6dd79 Mon Sep 17 00:00:00 2001 From: prescientmoon Date: Sat, 24 Feb 2024 03:51:35 +0100 Subject: [PATCH] Set up homer --- README.md | 7 +- common/icons/actual.png | Bin 0 -> 10350 bytes common/icons/bitwarden.png | Bin 0 -> 16765 bytes .../firefox => common}/icons/desmos.png | Bin .../firefox => common}/icons/monkeytype.png | Bin .../firefox => common}/icons/syncthing.png | Bin common/icons/whoogle.webp | Bin 0 -> 24596 bytes home/features/desktop/firefox/default.nix | 7 +- hosts/nixos/lapetus/default.nix | 1 + hosts/nixos/lapetus/services/homer.nix | 90 ++++++++++++++++++ pkgs/default.nix | 1 + pkgs/homer.nix | 37 +++++++ 12 files changed, 137 insertions(+), 6 deletions(-) create mode 100644 common/icons/actual.png create mode 100644 common/icons/bitwarden.png rename {home/features/desktop/firefox => common}/icons/desmos.png (100%) rename {home/features/desktop/firefox => common}/icons/monkeytype.png (100%) rename {home/features/desktop/firefox => common}/icons/syncthing.png (100%) create mode 100644 common/icons/whoogle.webp create mode 100644 hosts/nixos/lapetus/services/homer.nix create mode 100644 pkgs/homer.nix diff --git a/README.md b/README.md index e45c004..13e63a5 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ In case you are not familiar with nix/nixos, this is a collection of configurati ## Features this repository includes: - Sets up all the apps I use — including git, neovim, fish, tmux, starship, hyprland, anyrun, discord, zathura, wezterm & much more. -- Sets up my entire homelab — including zfs-based [impermanence](https://grahamc.com/blog/erase-your-darlings), automatic let's-encrypt certificates, tailscale, syncthing, vaultwarden, whoogle, pounce, calico, smos, intray & more. +- Sets up my entire homelab — including zfs-based [impermanence](https://grahamc.com/blog/erase-your-darlings), automatic let's-encrypt certificates, tailscale, syncthing, vaultwarden, whoogle, pounce, calico, smos, intray, actual & more. - Consistent base16 theming using [stylix](https://github.com/danth/stylix) - Declarative secret management using [sops-nix](https://github.com/Mic92/sops-nix) @@ -98,7 +98,7 @@ Here's some things you might want to check out: - [Ranger](https://github.com/ranger/ranger) — file manager - [Catgirl](https://git.causal.agency/catgirl/about/) — irc client - Self management: - - [Smos](https://github.com/NorfairKing/smos) — selfhosted comprehensive self-management System + - [Smos](https://github.com/NorfairKing/smos) — selfhosted comprehensive self-management system - [Intray](https://github.com/NorfairKing/intray) — selfhosted GTD capture tool ### Services @@ -109,8 +109,9 @@ Most services are served over [tailscale](https://tailscale.com/), using certifi - [Whoogle](https://github.com/benbusby/whoogle-search#manual-docker) — search engine - [Pounce](https://git.causal.agency/pounce/about/) & [calico](https://git.causal.agency/pounce/about/calico.1) — irc bouncer - [Vaultwarden](https://github.com/dani-garcia/vaultwarden/) — password manager -- [Smos](https://github.com/NorfairKing/smos) — a comprehensive self-management System. +- [Smos](https://github.com/NorfairKing/smos) — a comprehensive self-management system. - [Intray](https://github.com/NorfairKing/intray) — GTD capture tool. +- [Actual](https://actualbudget.org/) — budgeting tool. ## Hall of fame diff --git a/common/icons/actual.png b/common/icons/actual.png new file mode 100644 index 0000000000000000000000000000000000000000..fe497b1e04f2ca2e7725869ffe1deed09e79eaec GIT binary patch literal 10350 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%0D6b%><*DAtxZ~L&i!W}|I!DRS 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

$bb%Ah}}ZuKYfw6g2hT%@q7vKOTsb>{VS%njBm% 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 o0000000000000000000000000000000000000000000000K1<3>;M1& literal 0 HcmV?d00001 diff --git a/home/features/desktop/firefox/default.nix b/home/features/desktop/firefox/default.nix index 79184fd..0ec4603 100644 --- a/home/features/desktop/firefox/default.nix +++ b/home/features/desktop/firefox/default.nix @@ -195,6 +195,7 @@ in url = "https://search.moonythm.dev/search"; param = "q"; aliases = [ "@m" "@moonythm" ]; + icon = ../../../../common/icons/whoogle.webp; }; "Google".metaData.alias = "@g"; @@ -282,7 +283,7 @@ in # {{{ Desmos desmos = { url = "https://www.desmos.com/calculator"; - icon = ./icons/desmos.png; + icon = ../../../../common/icons/desmos.png; displayName = "Desmos"; id = 1; }; @@ -290,7 +291,7 @@ in # {{{ Monkey type monkey-type = { url = "https://monkeytype.com/"; - icon = ./icons/monkeytype.png; + icon = ../../../../common/icons/monkeytype.png; displayName = "Monkeytype"; id = 2; }; @@ -298,7 +299,7 @@ in # {{{ Syncthing syncthing = { url = "http://localhost:8384/"; - icon = ./icons/syncthing.png; + icon = ../../../../common/icons/syncthing.png; displayName = "Syncthing"; id = 3; }; diff --git a/hosts/nixos/lapetus/default.nix b/hosts/nixos/lapetus/default.nix index 09b6940..358a535 100644 --- a/hosts/nixos/lapetus/default.nix +++ b/hosts/nixos/lapetus/default.nix @@ -11,6 +11,7 @@ ./services/smos.nix ./services/vaultwarden.nix ./services/actual.nix + ./services/homer.nix ./services/zfs.nix ./filesystems ./hardware diff --git a/hosts/nixos/lapetus/services/homer.nix b/hosts/nixos/lapetus/services/homer.nix new file mode 100644 index 0000000..414e63f --- /dev/null +++ b/hosts/nixos/lapetus/services/homer.nix @@ -0,0 +1,90 @@ +{ pkgs, config, ... }: +let + colors = with config.lib.stylix.scheme.withHashtag; { + highlight-primary = base0A; + highlight-secondary = base09; + highlight-hover = base08; + text-title = base00; + text-subtitle = base00; + text = base05; + link = base08; + background = base00; + card-background = base01; + }; + + fa = name: "fas fa-${name}"; + icon = file: ../../../../common/icons/${file}; +in +{ + services.nginx.virtualHosts."dashboard.moonythm.dev" = { + enableACME = true; + acmeRoot = null; + forceSSL = true; + root = pkgs.homer.withAssets { + config = { + title = "✨ The celestial citadel ✨"; + subtitle = "The home for my homelab :3"; + + header = false; + footer = false; + connectivityCheck = true; + + colors.light = colors; + colors.dark = colors; + + services = [ + { + name = "Pillars"; + icon = fa "toolbox"; + items = [ + { + name = "Vaultwarden"; + subtitle = "Password manager"; + logo = icon "bitwarden.png"; + url = "warden.moonythm.dev"; + keywords = "pass"; + } + { + name = "Syncthing"; + subtitle = "File synchronization"; + logo = icon "syncthing.png"; + url = "syncthing.lapetus.moonythm.dev"; + } + { + name = "Whoogle"; + subtitle = "Search engine"; + logo = icon "woogle.webp"; + url = "search.moonythm.dev"; + keywords = "search google"; + } + ]; + } + { + name = "Self management"; + icon = fa "superpowers"; + items = [ + { + name = "Intray"; + subtitle = "GTD capture tool"; + icon = fa "cubes-stacked"; + url = "intray.moonythm.dev"; + } + { + name = "Smos"; + subtitle = "A comprehensive self-management system."; + icon = fa "list"; + url = "smos.moonythm.dev"; + } + { + name = "Actual"; + subtitle = "Budgeting tool"; + logo = icon "actual.png"; + url = "actual.moonythm.dev"; + } + ]; + } + ]; + }; + }; + }; +} diff --git a/pkgs/default.nix b/pkgs/default.nix index 5deb8fd..372bcff 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -6,6 +6,7 @@ let plymouthThemes = pkgs.callPackage (import ./plymouth-themes.nix) { }; in { # example = pkgs.callPackage (import ./example.nix) {}; vimclip = pkgs.callPackage (import ./vimclip.nix) { }; + homer = pkgs.callPackage (import ./homer.nix) { }; plymouthThemeCutsAlt = plymouthThemes.cuts_alt; } diff --git a/pkgs/homer.nix b/pkgs/homer.nix new file mode 100644 index 0000000..9872bc7 --- /dev/null +++ b/pkgs/homer.nix @@ -0,0 +1,37 @@ +{ lib, fetchzip, writeTextFile, runCommandLocal, symlinkJoin }: + +let + homer = fetchzip rec { + pname = "homer"; + version = "24.02.1"; + url = + "https://github.com/bastienwirtz/${pname}/releases/download/v${version}/${pname}.zip"; + hash = "sha256-McMJuZ84B3BlGHLQf+/ttRe5xAzQuR6qHrH8IjGys2Q="; + stripRoot = false; + + passthru = { + withAssets = { name ? null, config, extraAssets ? [ ] }: + let nameSuffix = lib.optionalString (name != null) "-${name}"; + in + symlinkJoin { + name = "homer-root${nameSuffix}"; + paths = [ + homer + (writeTextFile { + name = "homer-configuration${nameSuffix}"; + text = builtins.toJSON config; + destination = "/assets/config.yml"; + }) + ] ++ lib.optional (extraAssets != [ ]) + (runCommandLocal "homer-assets${nameSuffix}" { } + (builtins.concatStringsSep "\n" (map + (asset: '' + mkdir -p $out/assets/${dirOf asset} + ln -s ${asset} $out/assets/${asset} + '') + extraAssets))); + }; + }; + }; +in +homer