chore: nixfmt-rfc-style

Signed-off-by: jolheiser <git@jolheiser.com>
homepage
jolheiser 2024-08-01 13:27:47 -05:00
parent 43d6f7fe48
commit 147b2f4c12
No known key found for this signature in database
46 changed files with 783 additions and 463 deletions

View File

@ -1,4 +1,5 @@
{pkgs, ...}: { { pkgs, ... }:
{
imports = [ imports = [
../nogui ../nogui
./firefox.nix ./firefox.nix
@ -24,24 +25,26 @@
nodePackages.yaml-language-server nodePackages.yaml-language-server
]; ];
}; };
dconf.settings = let dconf.settings =
wallpaper = pkgs.fetchurl { let
url = "https://user.fm/files/v2-3834da30df507c4ba97a551571e98e33/nixppuccin.png"; wallpaper = pkgs.fetchurl {
hash = "sha256-dwM+Wi2gse7Eu4f/suU2BsVACPHMfSaXYOpZPqx6/SQ="; url = "https://user.fm/files/v2-3834da30df507c4ba97a551571e98e33/nixppuccin.png";
hash = "sha256-dwM+Wi2gse7Eu4f/suU2BsVACPHMfSaXYOpZPqx6/SQ=";
};
in
{
"org/cinnamon/desktop/background" = {
picture-uri = "file://${wallpaper}";
};
"org/cinnamon/desktop/interface" = {
font-name = "Monaspace Neon 10";
};
"org/cinnamon/desktop/wm/preferences" = {
titlebar-font = "Monaspace Neon Bold 10";
};
"org/gnome/desktop/interface" = {
document-font-name = "Monaspace Xenon 10";
monospace-font-name = "Monaspace Argon 10";
};
}; };
in {
"org/cinnamon/desktop/background" = {
picture-uri = "file://${wallpaper}";
};
"org/cinnamon/desktop/interface" = {
font-name = "Monaspace Neon 10";
};
"org/cinnamon/desktop/wm/preferences" = {
titlebar-font = "Monaspace Neon Bold 10";
};
"org/gnome/desktop/interface" = {
document-font-name = "Monaspace Xenon 10";
monospace-font-name = "Monaspace Argon 10";
};
};
} }

View File

@ -1,15 +1,19 @@
{pkgs, ...}: { { pkgs, ... }:
{
programs.firefox = { programs.firefox = {
enable = true; enable = true;
profiles.default = { profiles.default = {
search = { search = {
default = "Kagi"; default = "Kagi";
privateDefault = "DuckDuckGo"; privateDefault = "DuckDuckGo";
order = ["Kagi" "DuckDuckGo"]; order = [
"Kagi"
"DuckDuckGo"
];
force = true; force = true;
engines = { engines = {
"Kagi" = { "Kagi" = {
definedAliases = ["@k"]; definedAliases = [ "@k" ];
urls = [ urls = [
{ {
template = "https://kagi.com/search"; template = "https://kagi.com/search";
@ -23,7 +27,7 @@
]; ];
}; };
"DuckDuckGo" = { "DuckDuckGo" = {
definedAliases = ["@d"]; definedAliases = [ "@d" ];
urls = [ urls = [
{ {
template = "https://duckduckgo.com/"; template = "https://duckduckgo.com/";
@ -57,9 +61,9 @@
"browser.newtabpage.activity-stream.feeds.section.topstories" = false; "browser.newtabpage.activity-stream.feeds.section.topstories" = false;
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false; "browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
"browser.newtabpage.pinned" = builtins.toJSON [ "browser.newtabpage.pinned" = builtins.toJSON [
{url = "https://github.com/";} { url = "https://github.com/"; }
{url = "https://git.jojodev.com/";} { url = "https://git.jojodev.com/"; }
{url = "https://git.jolheiser.com";} { url = "https://git.jolheiser.com"; }
]; ];
"browser.fixup.domainwhitelist.go" = true; # golink "browser.fixup.domainwhitelist.go" = true; # golink
}; };
@ -73,31 +77,34 @@
bookmarks = [ bookmarks = [
{ {
name = "github"; name = "github";
tags = ["gitea"]; tags = [ "gitea" ];
keyword = "go-gitea"; keyword = "go-gitea";
url = "https://github.com/go-gitea/gitea"; url = "https://github.com/go-gitea/gitea";
} }
{ {
name = "jojodev"; name = "jojodev";
tags = ["gitea"]; tags = [ "gitea" ];
keyword = "jojodev"; keyword = "jojodev";
url = "https://git.jojodev.com"; url = "https://git.jojodev.com";
} }
{ {
name = "gist"; name = "gist";
tags = ["gitea" "gist"]; tags = [
"gitea"
"gist"
];
keyword = "gist"; keyword = "gist";
url = "https://gist.jojodev.com"; url = "https://gist.jojodev.com";
} }
{ {
name = "gitea"; name = "gitea";
tags = ["gitea"]; tags = [ "gitea" ];
keyword = "gitea"; keyword = "gitea";
url = "https://gitea.com"; url = "https://gitea.com";
} }
{ {
name = "try"; name = "try";
tags = ["gitea"]; tags = [ "gitea" ];
keyword = "try"; keyword = "try";
url = "https://try.gitea.io"; url = "https://try.gitea.io";
} }
@ -108,25 +115,28 @@
bookmarks = [ bookmarks = [
{ {
name = "golink"; name = "golink";
tags = ["tailscale"]; tags = [ "tailscale" ];
keyword = "go"; keyword = "go";
url = "http://go"; url = "http://go";
} }
{ {
name = "tclip"; name = "tclip";
tags = ["tailscale"]; tags = [ "tailscale" ];
keyword = "paste"; keyword = "paste";
url = "http://paste"; url = "http://paste";
} }
{ {
name = "ugit"; name = "ugit";
tags = ["tailscale" "git"]; tags = [
"tailscale"
"git"
];
keyword = "git"; keyword = "git";
url = "http://git"; url = "http://git";
} }
{ {
name = "jellyfin"; name = "jellyfin";
tags = ["jellyfin"]; tags = [ "jellyfin" ];
keyword = "jellyfin"; keyword = "jellyfin";
url = "http://sencha:8096"; url = "http://sencha:8096";
} }
@ -134,20 +144,29 @@
} }
{ {
name = "ugit"; name = "ugit";
tags = ["git" "ugit"]; tags = [
"git"
"ugit"
];
keyword = "ugit"; keyword = "ugit";
url = "https://git.jolheiser.com"; url = "https://git.jolheiser.com";
} }
{ {
name = "git-pr"; name = "git-pr";
tags = ["git" "pr"]; tags = [
"git"
"pr"
];
keyword = "git-pr"; keyword = "git-pr";
url = "https://pr.jolheiser.com"; url = "https://pr.jolheiser.com";
} }
{ {
name = "todo"; name = "todo";
tags = ["vikunja" "todo"]; tags = [
"vikunja"
"todo"
];
keyword = "todo"; keyword = "todo";
url = "https://todo.jolheiser.com"; url = "https://todo.jolheiser.com";
} }
@ -156,7 +175,7 @@
# Not in the toolbar, but still usable via keyword/searching # Not in the toolbar, but still usable via keyword/searching
{ {
name = "Go Playground"; name = "Go Playground";
tags = ["golang"]; tags = [ "golang" ];
keyword = "play"; keyword = "play";
url = "https://go.dev/play/"; url = "https://go.dev/play/";
} }

View File

@ -8,7 +8,7 @@
term = xterm-256color term = xterm-256color
''; '';
# zig build -p ~/.local/share/ghostty -Doptimize=ReleaseFast # zig build -p ~/.local/share/ghostty -Doptimize=ReleaseFast
xdg.systemDirs.data = ["/home/jolheiser/.local/share/ghostty/share"]; xdg.systemDirs.data = [ "/home/jolheiser/.local/share/ghostty/share" ];
home.sessionPath = ["/home/jolheiser/.local/share/ghostty/bin"]; home.sessionPath = [ "/home/jolheiser/.local/share/ghostty/bin" ];
programs.bash.enable = true; programs.bash.enable = true;
} }

View File

@ -3,7 +3,8 @@
lib, lib,
pkgs, pkgs,
... ...
}: { }:
{
home.pointerCursor = { home.pointerCursor = {
name = "catppuccin-cursors"; name = "catppuccin-cursors";
package = pkgs.catppuccin-cursors.mochaLavender; package = pkgs.catppuccin-cursors.mochaLavender;
@ -21,7 +22,7 @@
theme = { theme = {
name = "Catppuccin-Mocha-Compact-Lavender-Dark"; name = "Catppuccin-Mocha-Compact-Lavender-Dark";
package = pkgs.catppuccin-gtk.override { package = pkgs.catppuccin-gtk.override {
accents = ["lavender"]; accents = [ "lavender" ];
variant = "mocha"; variant = "mocha";
size = "compact"; size = "compact";
}; };
@ -41,9 +42,10 @@
}; };
}; };
xdg = let xdg =
themeDir = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}"; let
in themeDir = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}";
in
lib.mkIf config.gtk.enable { lib.mkIf config.gtk.enable {
configFile = { configFile = {
"gtk-4.0/assets" = { "gtk-4.0/assets" = {

View File

@ -1,17 +1,22 @@
{pkgs, ...}: { { pkgs, ... }:
xdg.configFile."spotify-player/theme.toml".text = builtins.readFile (pkgs.fetchFromGitHub { {
xdg.configFile."spotify-player/theme.toml".text = builtins.readFile (
pkgs.fetchFromGitHub {
owner = "catppuccin"; owner = "catppuccin";
repo = "spotify-player"; repo = "spotify-player";
rev = "002d51b02b3a2ebc0804e4839ee604dbdab4bec3"; rev = "002d51b02b3a2ebc0804e4839ee604dbdab4bec3";
sha256 = "sha256-IUhzVrIBMi/Dn6+HV0m9i38Msg8zzzJlR85JeEVE7EU="; sha256 = "sha256-IUhzVrIBMi/Dn6+HV0m9i38Msg8zzzJlR85JeEVE7EU=";
} }
+ "/src/theme.toml"); + "/src/theme.toml"
xdg.configFile."spotify-player/app.toml".source = (pkgs.formats.toml {}).generate "spotify-player-config" { );
client_id = "41af4976ba70474fbd541ee8764a2cda"; xdg.configFile."spotify-player/app.toml".source =
theme = "Catppuccin-mocha"; (pkgs.formats.toml { }).generate "spotify-player-config"
enable_notify = false; {
enable_media_control = true; client_id = "41af4976ba70474fbd541ee8764a2cda";
device.volume = 100; theme = "Catppuccin-mocha";
}; enable_notify = false;
enable_media_control = true;
device.volume = 100;
};
programs.nushell.shellAliases.spt = "spotify_player"; programs.nushell.shellAliases.spt = "spotify_player";
} }

View File

@ -1,4 +1,5 @@
{config, ...}: { { config, ... }:
{
programs.tiny = { programs.tiny = {
enable = true; enable = true;
settings = { settings = {
@ -8,9 +9,12 @@
port = 6697; port = 6697;
tls = true; tls = true;
realname = "jolheiser"; realname = "jolheiser";
nicks = ["jolheiser"]; nicks = [ "jolheiser" ];
alias = "LiberaChat"; alias = "LiberaChat";
join = ["#gitea" "#gitea-devel"]; join = [
"#gitea"
"#gitea-devel"
];
sasl = { sasl = {
username = "jolheiser"; username = "jolheiser";
password = { password = {
@ -20,7 +24,7 @@
} }
]; ];
defaults = { defaults = {
nicks = ["jolheiser"]; nicks = [ "jolheiser" ];
realname = "jolheiser"; realname = "jolheiser";
}; };
key_map = { key_map = {

View File

@ -1,5 +1,6 @@
{pkgs, ...}: { { pkgs, ... }:
home.packages = [pkgs.zed-editor]; {
home.packages = [ pkgs.zed-editor ];
xdg.configFile."zed/settings.json".text = builtins.toJSON { xdg.configFile."zed/settings.json".text = builtins.toJSON {
buffer_font_family = "Monaspace Neon"; buffer_font_family = "Monaspace Neon";
buffer_font_size = 16; buffer_font_size = 16;
@ -10,7 +11,9 @@
}; };
terminal = { terminal = {
font_family = "Monaspace Neon"; font_family = "Monaspace Neon";
shell = {program = "nu";}; shell = {
program = "nu";
};
}; };
theme = "Catppuccin Mocha"; theme = "Catppuccin Mocha";
ui_font_size = 16; ui_font_size = 16;

View File

@ -1,4 +1,5 @@
{pkgs, ...}: { { pkgs, ... }:
{
programs.aerc = { programs.aerc = {
enable = true; enable = true;
extraConfig = { extraConfig = {
@ -31,13 +32,15 @@
}; };
}; };
stylesets = { stylesets = {
catppuccin-mocha = builtins.readFile (pkgs.fetchFromGitHub { catppuccin-mocha = builtins.readFile (
pkgs.fetchFromGitHub {
owner = "catppuccin"; owner = "catppuccin";
repo = "aerc"; repo = "aerc";
rev = "c1f233bd22894d7ccf69846c3bd7bcd5af0fc2a2"; rev = "c1f233bd22894d7ccf69846c3bd7bcd5af0fc2a2";
sha256 = "sha256-YJdNPROhwgge14O1zuGh/ZK/qjHDxi+xdAyPEIXRI9c="; sha256 = "sha256-YJdNPROhwgge14O1zuGh/ZK/qjHDxi+xdAyPEIXRI9c=";
} }
+ "/dist/catppuccin-mocha"); + "/dist/catppuccin-mocha"
);
}; };
}; };
} }

View File

@ -2,6 +2,6 @@
programs.atuin = { programs.atuin = {
enable = true; enable = true;
enableNushellIntegration = true; enableNushellIntegration = true;
flags = ["--disable-up-arrow"]; flags = [ "--disable-up-arrow" ];
}; };
} }

View File

@ -1,7 +1,10 @@
{pkgs, ...}: { { pkgs, ... }:
{
programs.bat = { programs.bat = {
enable = true; enable = true;
config = {theme = "ctp-mocha";}; config = {
theme = "ctp-mocha";
};
themes = { themes = {
ctp-mocha = { ctp-mocha = {
src = pkgs.fetchFromGitHub { src = pkgs.fetchFromGitHub {

View File

@ -6,7 +6,14 @@
table_header_color = "#f5e0dc"; table_header_color = "#f5e0dc";
all_cpu_color = "#f5e0dc"; all_cpu_color = "#f5e0dc";
avg_cpu_color = "#eba0ac"; avg_cpu_color = "#eba0ac";
cpu_core_colors = ["#f38ba8" "#fab387" "#f9e2af" "#a6e3a1" "#74c7ec" "#cba6f7"]; cpu_core_colors = [
"#f38ba8"
"#fab387"
"#f9e2af"
"#a6e3a1"
"#74c7ec"
"#cba6f7"
];
ram_color = "#a6e3a1"; ram_color = "#a6e3a1";
swap_color = "#fab387"; swap_color = "#fab387";
rx_color = "#a6e3a1"; rx_color = "#a6e3a1";
@ -22,7 +29,14 @@
high_battery_color = "#a6e3a1"; high_battery_color = "#a6e3a1";
medium_battery_color = "#f9e2af"; medium_battery_color = "#f9e2af";
low_battery_color = "#f38ba8"; low_battery_color = "#f38ba8";
gpu_core_colors = ["#74c7ec" "#cba6f7" "#f38ba8" "#fab387" "#f9e2af" "#a6e3a1"]; gpu_core_colors = [
"#74c7ec"
"#cba6f7"
"#f38ba8"
"#fab387"
"#f9e2af"
"#a6e3a1"
];
arc_color = "#89dceb"; arc_color = "#89dceb";
}; };
}; };

View File

@ -1,8 +1,5 @@
{ pkgs, config, ... }:
{ {
pkgs,
config,
...
}: {
imports = [ imports = [
./aerc.nix ./aerc.nix
./atuin.nix ./atuin.nix
@ -52,7 +49,7 @@
jsonnet-language-server jsonnet-language-server
# Formatters # Formatters
alejandra nixfmt-rfc-style
gofumpt gofumpt
# Flake overlays # Flake overlays

View File

@ -1,4 +1,5 @@
{lib, ...}: { { lib, ... }:
{
programs.eza = { programs.eza = {
enable = true; enable = true;
git = true; git = true;

View File

@ -1,8 +1,5 @@
{ { pkgs, config, ... }:
pkgs, let
config,
...
}: let
insteadOf = prefix: domain: { insteadOf = prefix: domain: {
"https://${domain}/".insteadOf = "${prefix}:"; "https://${domain}/".insteadOf = "${prefix}:";
"git@${domain}:".insteadOf = "ssh:${prefix}:"; "git@${domain}:".insteadOf = "ssh:${prefix}:";
@ -17,7 +14,8 @@
ssh.allowedSignersFile = "${pkgs.writeText "allowedSigners" "git@jolheiser.com ${key}"}"; ssh.allowedSignersFile = "${pkgs.writeText "allowedSigners" "git@jolheiser.com ${key}"}";
}; };
}; };
in { in
{
programs.git = { programs.git = {
enable = true; enable = true;
userName = "jolheiser"; userName = "jolheiser";
@ -40,38 +38,37 @@ in {
tui = "!lazygit"; tui = "!lazygit";
}; };
lfs.enable = true; lfs.enable = true;
ignores = [".idea/" "result" "node_modules" "ve"]; ignores = [
extraConfig = ".idea/"
{ "result"
init.defaultBranch = "main"; "node_modules"
merge.conflictstyle = "zdiff3"; "ve"
diff.colorMoved = "default"; ];
core.editor = "hx"; extraConfig = {
push = { init.defaultBranch = "main";
sutoSetupRemote = true; merge.conflictstyle = "zdiff3";
default = "current"; diff.colorMoved = "default";
gpgSign = "if-asked"; core.editor = "hx";
}; push = {
rerere.enabled = true; sutoSetupRemote = true;
pull.rebase = true; default = "current";
diff.algorithm = "histogram"; gpgSign = "if-asked";
merge.tool = "hx"; };
url = rerere.enabled = true;
insteadOf "jo" "git.jolheiser.com" pull.rebase = true;
// insteadOf "gh" "github.com" diff.algorithm = "histogram";
// insteadOf "jj" "git.jojodev.com" merge.tool = "hx";
// insteadOf "gt" "gitea.com" url =
// insteadOf "gl" "gitlab.com" insteadOf "jo" "git.jolheiser.com"
// insteadOf "cb" "codeberg.org"; // insteadOf "gh" "github.com"
} // insteadOf "jj" "git.jojodev.com"
// sshSigning; // insteadOf "gt" "gitea.com"
// insteadOf "gl" "gitlab.com"
// insteadOf "cb" "codeberg.org";
} // sshSigning;
difftastic = { difftastic = {
enable = true; enable = true;
}; };
includes = [ includes = [ { path = config.age.secrets.git-send-email.path; } ];
{
path = config.age.secrets.git-send-email.path;
}
];
}; };
} }

View File

@ -1,6 +1,7 @@
let let
goPath = ".local/share/go"; goPath = ".local/share/go";
in { in
{
programs.go = { programs.go = {
inherit goPath; inherit goPath;
enable = true; enable = true;

View File

@ -1,7 +1,9 @@
{pkgs, ...}: let { pkgs, ... }:
let
key = "0xB853ADA5DA7BBF7A"; key = "0xB853ADA5DA7BBF7A";
in { in
home.packages = with pkgs; [pinentry]; {
home.packages = with pkgs; [ pinentry ];
home.file.".mozilla/native-messaging-hosts/gpgmejson.json" = { home.file.".mozilla/native-messaging-hosts/gpgmejson.json" = {
enable = true; enable = true;
text = builtins.toJSON { text = builtins.toJSON {
@ -9,7 +11,7 @@ in {
description = "JavaScript binding for GnuPG"; description = "JavaScript binding for GnuPG";
path = pkgs.gpgme.dev + /bin/gpgme-json; path = pkgs.gpgme.dev + /bin/gpgme-json;
type = "stdio"; type = "stdio";
allowed_extensions = ["jid1-AQqSMBYb0a8ADg@jetpack"]; allowed_extensions = [ "jid1-AQqSMBYb0a8ADg@jetpack" ];
}; };
}; };
programs.gpg = { programs.gpg = {

View File

@ -1,15 +1,20 @@
# This entire file is superceded by https://git.jolheiser.com/helix.drv # This entire file is superceded by https://git.jolheiser.com/helix.drv
{pkgs, ...}: let { pkgs, ... }:
query = scm: let
builtins.readFile (pkgs.fetchFromGitea { query =
scm:
builtins.readFile (
pkgs.fetchFromGitea {
domain = "git.jojodev.com"; domain = "git.jojodev.com";
owner = "jolheiser"; owner = "jolheiser";
repo = "templ-helix"; repo = "templ-helix";
rev = "2a47b9c5af0fd9ae8bba8198fd66abc6d07fdf10"; rev = "2a47b9c5af0fd9ae8bba8198fd66abc6d07fdf10";
sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs="; sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs=";
} }
+ "/queries/templ/${scm}.scm"); + "/queries/templ/${scm}.scm"
in { );
in
{
programs.helix = { programs.helix = {
enable = true; enable = true;
defaultEditor = true; defaultEditor = true;
@ -25,12 +30,16 @@ in {
normal = "block"; normal = "block";
select = "underline"; select = "underline";
}; };
file-picker = {hidden = false;}; file-picker = {
hidden = false;
};
indent-guides = { indent-guides = {
render = true; render = true;
skip-levels = 1; skip-levels = 1;
}; };
soft-wrap = {enable = true;}; soft-wrap = {
enable = true;
};
statusline = { statusline = {
right = [ right = [
"version-control" "version-control"
@ -40,7 +49,9 @@ in {
"file-encoding" "file-encoding"
]; ];
}; };
lsp = {display-messages = true;}; lsp = {
display-messages = true;
};
}; };
keys = { keys = {
normal = { normal = {
@ -56,33 +67,61 @@ in {
S-right = "goto_next_buffer"; S-right = "goto_next_buffer";
S-left = "goto_previous_buffer"; S-left = "goto_previous_buffer";
C-b = ":buffer-close"; C-b = ":buffer-close";
C-s = ["select_all" "select_regex"]; C-s = [
"select_all"
"select_regex"
];
C-j = "shrink_selection"; C-j = "shrink_selection";
C-k = "expand_selection"; C-k = "expand_selection";
C-l = "select_next_sibling"; C-l = "select_next_sibling";
C-a = "select_all"; C-a = "select_all";
C-u = ["half_page_up" "align_view_center"]; C-u = [
C-d = ["half_page_down" "align_view_center"]; "half_page_up"
"align_view_center"
];
C-d = [
"half_page_down"
"align_view_center"
];
"{" = ["goto_prev_paragraph" "collapse_selection"]; "{" = [
"}" = ["goto_next_paragraph" "collapse_selection"]; "goto_prev_paragraph"
"collapse_selection"
];
"}" = [
"goto_next_paragraph"
"collapse_selection"
];
"0" = "goto_line_start"; "0" = "goto_line_start";
"$" = "goto_line_end"; "$" = "goto_line_end";
"^" = "goto_first_nonwhitespace"; "^" = "goto_first_nonwhitespace";
G = "goto_file_end"; G = "goto_file_end";
"%" = "match_brackets"; "%" = "match_brackets";
V = ["select_mode" "extend_to_line_bounds"]; V = [
C = ["collapse_selection" "extend_to_line_end" "change_selection"]; "select_mode"
D = ["extend_to_line_end" "delete_selection"]; "extend_to_line_bounds"
];
C = [
"collapse_selection"
"extend_to_line_end"
"change_selection"
];
D = [
"extend_to_line_end"
"delete_selection"
];
S = "surround_add"; S = "surround_add";
d = { d = {
d = ["extend_to_line_bounds" "delete_selection"]; d = [
t = ["extend_till_char"]; "extend_to_line_bounds"
s = ["surround_delete"]; "delete_selection"
i = ["select_textobject_inner"]; ];
a = ["select_textobject_around"]; t = [ "extend_till_char" ];
s = [ "surround_delete" ];
i = [ "select_textobject_inner" ];
a = [ "select_textobject_around" ];
}; };
x = "delete_selection"; x = "delete_selection";
@ -101,16 +140,40 @@ in {
"collapse_selection" "collapse_selection"
]; ];
w = ["move_next_word_start" "move_char_right" "collapse_selection"]; w = [
e = ["move_next_word_end" "collapse_selection"]; "move_next_word_start"
b = ["move_prev_word_start" "collapse_selection"]; "move_char_right"
"collapse_selection"
];
e = [
"move_next_word_end"
"collapse_selection"
];
b = [
"move_prev_word_start"
"collapse_selection"
];
i = ["insert_mode" "collapse_selection"]; i = [
a = ["append_mode" "collapse_selection"]; "insert_mode"
"collapse_selection"
];
a = [
"append_mode"
"collapse_selection"
];
esc = ["collapse_selection" "keep_primary_selection"]; esc = [
"collapse_selection"
"keep_primary_selection"
];
};
insert = {
esc = [
"collapse_selection"
"normal_mode"
];
}; };
insert = {esc = ["collapse_selection" "normal_mode"];};
select = { select = {
space = { space = {
j = { j = {
@ -118,28 +181,60 @@ in {
c = ":pipe jq -c"; c = ":pipe jq -c";
}; };
}; };
"{" = ["extend_to_line_bounds" "goto_prev_paragraph"]; "{" = [
"}" = ["extend_to_line_bounds" "goto_next_paragraph"]; "extend_to_line_bounds"
"goto_prev_paragraph"
];
"}" = [
"extend_to_line_bounds"
"goto_next_paragraph"
];
"0" = "goto_line_start"; "0" = "goto_line_start";
"$" = "goto_line_end"; "$" = "goto_line_end";
"^" = "goto_first_nonwhitespace"; "^" = "goto_first_nonwhitespace";
G = "goto_file_end"; G = "goto_file_end";
D = ["extend_to_line_bounds" "delete_selection" "normal_mode"]; D = [
C = ["goto_line_start" "extend_to_line_bounds" "change_selection"]; "extend_to_line_bounds"
"delete_selection"
"normal_mode"
];
C = [
"goto_line_start"
"extend_to_line_bounds"
"change_selection"
];
"%" = "match_brackets"; "%" = "match_brackets";
S = "surround_add"; S = "surround_add";
i = "select_textobject_inner"; i = "select_textobject_inner";
a = "select_textobject_around"; a = "select_textobject_around";
tab = ["insert_mode" "collapse_selection"]; tab = [
C-a = ["append_mode" "collapse_selection"]; "insert_mode"
"collapse_selection"
];
C-a = [
"append_mode"
"collapse_selection"
];
k = ["extend_line_up" "extend_to_line_bounds"]; k = [
j = ["extend_line_down" "extend_to_line_bounds"]; "extend_line_up"
"extend_to_line_bounds"
];
j = [
"extend_line_down"
"extend_to_line_bounds"
];
d = ["yank_main_selection_to_clipboard" "delete_selection"]; d = [
x = ["yank_main_selection_to_clipboard" "delete_selection"]; "yank_main_selection_to_clipboard"
"delete_selection"
];
x = [
"yank_main_selection_to_clipboard"
"delete_selection"
];
y = [ y = [
"yank_main_selection_to_clipboard" "yank_main_selection_to_clipboard"
"normal_mode" "normal_mode"
@ -156,7 +251,11 @@ in {
p = "replace_selections_with_clipboard"; p = "replace_selections_with_clipboard";
P = "paste_clipboard_before"; P = "paste_clipboard_before";
esc = ["collapse_selection" "keep_primary_selection" "normal_mode"]; esc = [
"collapse_selection"
"keep_primary_selection"
"normal_mode"
];
}; };
}; };
}; };
@ -172,7 +271,7 @@ in {
name = "lua"; name = "lua";
formatter = { formatter = {
command = "luafmt"; command = "luafmt";
args = ["--stdin"]; args = [ "--stdin" ];
}; };
} }
{ {
@ -180,7 +279,10 @@ in {
auto-format = true; auto-format = true;
formatter = { formatter = {
command = "black"; command = "black";
args = ["--quiet" "-"]; args = [
"--quiet"
"-"
];
}; };
} }
{ {
@ -188,7 +290,7 @@ in {
auto-format = true; auto-format = true;
formatter = { formatter = {
command = "alejandra"; command = "alejandra";
args = ["-qq"]; args = [ "-qq" ];
}; };
} }
{ {
@ -196,16 +298,16 @@ in {
auto-format = true; auto-format = true;
scope = "source.templ"; scope = "source.templ";
injection-regex = "templ"; injection-regex = "templ";
file-types = ["templ"]; file-types = [ "templ" ];
roots = ["go.mod"]; roots = [ "go.mod" ];
comment-token = "//"; comment-token = "//";
language-server = { language-server = {
command = "templ"; command = "templ";
args = ["lsp"]; args = [ "lsp" ];
}; };
formatter = { formatter = {
command = "templ"; command = "templ";
args = ["fmt"]; args = [ "fmt" ];
}; };
} }
]; ];
@ -222,19 +324,19 @@ in {
themes = { themes = {
catppuccin_frappe_transparent = { catppuccin_frappe_transparent = {
inherits = "catppuccin_frappe"; inherits = "catppuccin_frappe";
"ui.background" = {}; "ui.background" = { };
}; };
catppuccin_latte_transparent = { catppuccin_latte_transparent = {
inherits = "catppuccin_latte"; inherits = "catppuccin_latte";
"ui.background" = {}; "ui.background" = { };
}; };
catppuccin_macchiato_transparent = { catppuccin_macchiato_transparent = {
inherits = "catppuccin_macchiato"; inherits = "catppuccin_macchiato";
"ui.background" = {}; "ui.background" = { };
}; };
catppuccin_mocha_transparent = { catppuccin_mocha_transparent = {
inherits = "catppuccin_mocha"; inherits = "catppuccin_mocha";
"ui.background" = {}; "ui.background" = { };
}; };
}; };
}; };

View File

@ -1,4 +1,5 @@
{pkgs, ...}: { { pkgs, ... }:
{
programs.jujutsu = { programs.jujutsu = {
enable = true; enable = true;
settings = { settings = {
@ -7,7 +8,12 @@
email = "git@jolheiser.com"; email = "git@jolheiser.com";
}; };
ui = { ui = {
diff.tool = ["${pkgs.difftastic}/bin/difft" "--color=always" "$left" "$right"]; diff.tool = [
"${pkgs.difftastic}/bin/difft"
"--color=always"
"$left"
"$right"
];
editor = "hx"; editor = "hx";
}; };
signing = { signing = {

View File

@ -1 +1 @@
{programs.jq.enable = true;} { programs.jq.enable = true; }

View File

@ -6,14 +6,17 @@
update.method = "never"; update.method = "never";
gui.theme = { gui.theme = {
lightTheme = false; lightTheme = false;
activeBorderColor = ["#a6e3a1" "bold"]; activeBorderColor = [
inactiveBorderColor = ["#cdd6f4"]; "#a6e3a1"
optionsTextColor = ["#89b4fa"]; "bold"
selectedLineBgColor = ["#313244"]; ];
selectedRangeBgColor = ["#313244"]; inactiveBorderColor = [ "#cdd6f4" ];
cherryPickedCommitBgColor = ["#94e2d5"]; optionsTextColor = [ "#89b4fa" ];
cherryPickedCommitFgColor = ["#89b4fa"]; selectedLineBgColor = [ "#313244" ];
unstagedChangesColor = ["#f38ba8"]; selectedRangeBgColor = [ "#313244" ];
cherryPickedCommitBgColor = [ "#94e2d5" ];
cherryPickedCommitFgColor = [ "#89b4fa" ];
unstagedChangesColor = [ "#f38ba8" ];
}; };
}; };
}; };

View File

@ -1,8 +1,5 @@
{ pkgs, config, ... }:
{ {
pkgs,
config,
...
}: {
programs.nushell = { programs.nushell = {
enable = true; enable = true;
configFile.source = ./nushell/config.nu; configFile.source = ./nushell/config.nu;

View File

@ -1,8 +1,8 @@
{ {
programs.oh-my-posh = { programs.oh-my-posh = {
enable = true; enable = true;
settings = settings = builtins.fromJSON (
builtins.fromJSON (builtins.unsafeDiscardStringContext builtins.unsafeDiscardStringContext (builtins.readFile ./ohmyposh/config.json)
(builtins.readFile ./ohmyposh/config.json)); );
}; };
} }

View File

@ -1,10 +1,14 @@
{config, ...}: { { config, ... }:
{
programs.senpai = { programs.senpai = {
enable = true; enable = true;
config = { config = {
address = "ircs+insecure://irc.jolheiser.com:6697"; address = "ircs+insecure://irc.jolheiser.com:6697";
nickname = "jolheiser"; nickname = "jolheiser";
password-cmd = ["cat" "${config.age.secrets.irc-pw.path}"]; password-cmd = [
"cat"
"${config.age.secrets.irc-pw.path}"
];
#channel = "#pico.sh #gitea"; #channel = "#pico.sh #gitea";
typings = false; typings = false;
}; };

View File

@ -1,8 +1,7 @@
{config, ...}: { { config, ... }:
{
programs.ssh = { programs.ssh = {
enable = true; enable = true;
includes = [ includes = [ config.age.secrets.ssh-config.path ];
config.age.secrets.ssh-config.path
];
}; };
} }

View File

@ -1,4 +1,5 @@
{config, ...}: { { config, ... }:
{
xdg = { xdg = {
enable = true; enable = true;
userDirs.enable = true; userDirs.enable = true;

267
flake.nix
View File

@ -120,143 +120,148 @@
}; };
}; };
outputs = { outputs =
nixpkgs, {
home-manager, nixpkgs,
nixos-hardware, home-manager,
agenix, nixos-hardware,
wsl, agenix,
... wsl,
} @ inputs: let ...
overlays = [ }@inputs:
(_: prev: { let
nur = import inputs.nur { overlays = [
nurpkgs = prev; (_: prev: {
pkgs = prev; nur = import inputs.nur {
}; nurpkgs = prev;
jolheiser = { pkgs = prev;
nur = inputs.jolheiser-nur.packages.${prev.system}; };
helix = inputs.helix.packages.${prev.system}.default; jolheiser = {
website = inputs.website.packages.${prev.system}.default; nur = inputs.jolheiser-nur.packages.${prev.system};
resume = inputs.resume.packages.${prev.system}.default; helix = inputs.helix.packages.${prev.system}.default;
git-age = inputs.git-age.packages.${prev.system}.default; website = inputs.website.packages.${prev.system}.default;
gist = inputs.gist.packages.${prev.system}.default; resume = inputs.resume.packages.${prev.system}.default;
tmpl = inputs.tmpl.packages.${prev.system}.default; git-age = inputs.git-age.packages.${prev.system}.default;
gomodinit = inputs.gomodinit.packages.${prev.system}.default; gist = inputs.gist.packages.${prev.system}.default;
cfg = inputs.cfg.packages.${prev.system}.default; tmpl = inputs.tmpl.packages.${prev.system}.default;
blog = inputs.blog.packages.${prev.system}.default; gomodinit = inputs.gomodinit.packages.${prev.system}.default;
bennet = inputs.bennet.packages.${prev.system}.default; cfg = inputs.cfg.packages.${prev.system}.default;
}; blog = inputs.blog.packages.${prev.system}.default;
tclip = inputs.tclip.packages.${prev.system}.tclip; bennet = inputs.bennet.packages.${prev.system}.default;
templ = inputs.templ.packages.${prev.system}.templ; };
}) tclip = inputs.tclip.packages.${prev.system}.tclip;
inputs.golink.overlay templ = inputs.templ.packages.${prev.system}.templ;
]; })
pkgs = import inputs.nixpkgs { inputs.golink.overlay
inherit overlays system; ];
config.allowUnfree = true; pkgs = import inputs.nixpkgs {
}; inherit overlays system;
commonConfig = {config, ...}: { config.allowUnfree = true;
config = {
nixpkgs.overlays = overlays;
# TODO Remove when apps are updated
nixpkgs.config.permittedInsecurePackages = [
"electron-25.9.0"
];
}; };
}; commonConfig =
username = "jolheiser"; { config, ... }:
system = "x86_64-linux"; {
homeManagerModules = [ config = {
agenix.homeManagerModules.age nixpkgs.overlays = overlays;
{ # TODO Remove when apps are updated
home = { nixpkgs.config.permittedInsecurePackages = [ "electron-25.9.0" ];
inherit username;
homeDirectory = "/home/${username}";
};
age = {
secretsDir = "/home/${username}/.agenix/agenix";
secretsMountPoint = "/home/${username}/.agenix/agenix.d";
identityPaths = ["/home/${username}/.ssh/nix"];
secrets = {
ssh-config.file = ./secrets/shared/ssh-config.age;
spotify = {
file = ./secrets/shared/spotify.age;
path = "/home/${username}/.cache/spotify-player/credentials.json";
};
irc-pw.file = ./secrets/shared/irc-pw.age;
gist-pw.file = ./secrets/shared/gist-pw.age;
git-send-email.file = ./secrets/shared/git-send-email.age;
cachix = {
file = ./secrets/shared/cachix.age;
path = "/home/${username}/.config/cachix/cachix.dhall";
};
}; };
}; };
} username = "jolheiser";
./apps/gui system = "x86_64-linux";
]; homeManagerModules = [
in { agenix.homeManagerModules.age
inherit homeManagerModules; {
homeConfigurations = { home = {
"jolheiser" = home-manager.lib.homeManagerConfiguration { inherit username;
inherit pkgs; homeDirectory = "/home/${username}";
modules = homeManagerModules; };
}; age = {
}; secretsDir = "/home/${username}/.agenix/agenix";
nixosConfigurations = { secretsMountPoint = "/home/${username}/.agenix/agenix.d";
"matcha" = nixpkgs.lib.nixosSystem { identityPaths = [ "/home/${username}/.ssh/nix" ];
inherit system; secrets = {
modules = [ ssh-config.file = ./secrets/shared/ssh-config.age;
./machines/matcha spotify = {
commonConfig file = ./secrets/shared/spotify.age;
]; path = "/home/${username}/.cache/spotify-player/credentials.json";
}; };
"genmaicha" = nixpkgs.lib.nixosSystem { irc-pw.file = ./secrets/shared/irc-pw.age;
inherit system; gist-pw.file = ./secrets/shared/gist-pw.age;
modules = [ git-send-email.file = ./secrets/shared/git-send-email.age;
nixos-hardware.nixosModules.framework-13-7040-amd cachix = {
./machines/genmaicha file = ./secrets/shared/cachix.age;
commonConfig path = "/home/${username}/.config/cachix/cachix.dhall";
]; };
}; };
"sencha" = nixpkgs.lib.nixosSystem { };
inherit system; }
modules = [ ./apps/gui
./machines/sencha ];
commonConfig in
]; {
}; inherit homeManagerModules;
}; homeConfigurations = {
colmena = { "jolheiser" = home-manager.lib.homeManagerConfiguration {
meta = { inherit pkgs;
nixpkgs = import nixpkgs { modules = homeManagerModules;
inherit overlays system;
}; };
}; };
dragonwell = {pkgs, ...}: { nixosConfigurations = {
imports = [ "matcha" = nixpkgs.lib.nixosSystem {
inputs.agenix.nixosModules.default inherit system;
inputs.golink.nixosModules.default modules = [
inputs.ugit.nixosModules.default ./machines/matcha
inputs.git-pr.nixosModules.default commonConfig
inputs.actual.nixosModules.default ];
inputs.tsnet-serve.nixosModules.default };
./modules/tclip "genmaicha" = nixpkgs.lib.nixosSystem {
./machines/dragonwell inherit system;
modules = [
nixos-hardware.nixosModules.framework-13-7040-amd
./machines/genmaicha
commonConfig
];
};
"sencha" = nixpkgs.lib.nixosSystem {
inherit system;
modules = [
./machines/sencha
commonConfig
];
};
};
colmena = {
meta = {
nixpkgs = import nixpkgs { inherit overlays system; };
};
dragonwell =
{ pkgs, ... }:
{
imports = [
inputs.agenix.nixosModules.default
inputs.golink.nixosModules.default
inputs.ugit.nixosModules.default
inputs.git-pr.nixosModules.default
inputs.actual.nixosModules.default
inputs.tsnet-serve.nixosModules.default
./modules/tclip
./machines/dragonwell
];
services.tclip.package = inputs.tclip.packages.${pkgs.system}.tclipd;
};
};
nixConfig = {
extra-substitutors = [ "https://jolheiser.cachix.org" ];
extra-trusted-public-keys = [
"jolheiser.cachix.org-1:fiKkfTuHFqDK5ZOVxcqb4InUkKsrTvtMLISid7XvuVg="
];
};
devShells.${system}.default = pkgs.mkShell {
nativeBuildInputs = [
agenix.packages.${system}.agenix
pkgs.colmena
]; ];
services.tclip.package = inputs.tclip.packages.${pkgs.system}.tclipd;
}; };
}; };
nixConfig = {
extra-substitutors = ["https://jolheiser.cachix.org"];
extra-trusted-public-keys = ["jolheiser.cachix.org-1:fiKkfTuHFqDK5ZOVxcqb4InUkKsrTvtMLISid7XvuVg="];
};
devShells.${system}.default = pkgs.mkShell {
nativeBuildInputs = [
agenix.packages.${system}.agenix
pkgs.colmena
];
};
};
} }

View File

@ -1,9 +1,12 @@
{pkgs, ...}: { { pkgs, ... }:
imports = [../nogui]; {
imports = [ ../nogui ];
sound.enable = true; sound.enable = true;
hardware.pulseaudio.enable = false; hardware.pulseaudio.enable = false;
security = {rtkit.enable = true;}; security = {
rtkit.enable = true;
};
services = { services = {
pipewire = { pipewire = {
enable = true; enable = true;
@ -20,6 +23,15 @@
}; };
}; };
}; };
fonts.packages = with pkgs; [(nerdfonts.override {fonts = ["JetBrainsMono" "Iosevka" "Hack"];}) monaspace]; fonts.packages = with pkgs; [
environment.systemPackages = [pkgs.tailscale-systray]; (nerdfonts.override {
fonts = [
"JetBrainsMono"
"Iosevka"
"Hack"
];
})
monaspace
];
environment.systemPackages = [ pkgs.tailscale-systray ];
} }

View File

@ -1,4 +1,5 @@
{pkgs, ...}: { { pkgs, ... }:
{
console.colors = [ console.colors = [
"1e1e2e" "1e1e2e"
"585b70" "585b70"
@ -45,12 +46,20 @@
gc.automatic = true; gc.automatic = true;
package = pkgs.nixVersions.stable; package = pkgs.nixVersions.stable;
settings = { settings = {
trusted-users = ["@sudo" "@wheel" "jolheiser"]; trusted-users = [
experimental-features = ["flakes" "nix-command" "repl-flake"]; "@sudo"
"@wheel"
"jolheiser"
];
experimental-features = [
"flakes"
"nix-command"
"repl-flake"
];
auto-optimise-store = true; auto-optimise-store = true;
warn-dirty = false; warn-dirty = false;
substituters = ["https://jolheiser.cachix.org"]; substituters = [ "https://jolheiser.cachix.org" ];
trusted-public-keys = ["jolheiser.cachix.org-1:fiKkfTuHFqDK5ZOVxcqb4InUkKsrTvtMLISid7XvuVg="]; trusted-public-keys = [ "jolheiser.cachix.org-1:fiKkfTuHFqDK5ZOVxcqb4InUkKsrTvtMLISid7XvuVg=" ];
}; };
}; };
@ -64,6 +73,10 @@
services.tailscale.enable = true; services.tailscale.enable = true;
environment = { environment = {
systemPackages = with pkgs; [podman podman-compose podman-tui]; systemPackages = with pkgs; [
podman
podman-compose
podman-tui
];
}; };
} }

View File

@ -1,6 +1,8 @@
{pkgs, ...}: let { pkgs, ... }:
let
modules = import ./go.nix; modules = import ./go.nix;
in { in
{
services.caddy = { services.caddy = {
enable = true; enable = true;
virtualHosts = { virtualHosts = {
@ -8,15 +10,17 @@ in {
extraConfig = '' extraConfig = ''
handle_path /.well-known/webfinger { handle_path /.well-known/webfinger {
header Content-Type application/jrd+json header Content-Type application/jrd+json
respond ${builtins.toJSON { respond ${
subject = "acct:john@jolheiser.com"; builtins.toJSON {
links = [ subject = "acct:john@jolheiser.com";
{ links = [
rel = "http://openid.net/specs/connect/1.0/issuer"; {
href = "https://auth.jolheiser.com"; rel = "http://openid.net/specs/connect/1.0/issuer";
href = "https://auth.jolheiser.com";
}
];
} }
]; }
}}
} }
handle_path /bennet* { handle_path /bennet* {
root * ${pkgs.jolheiser.bennet} root * ${pkgs.jolheiser.bennet}
@ -32,7 +36,7 @@ in {
file_server file_server
} }
''; '';
serverAliases = ["www.jolheiser.com"]; serverAliases = [ "www.jolheiser.com" ];
}; };
"blog.jolheiser.com" = { "blog.jolheiser.com" = {
extraConfig = '' extraConfig = ''

View File

@ -1,8 +1,23 @@
let let
username = "jolheiser"; username = "jolheiser";
key = ''ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfKqCWtDlS3tgvfT6hQN+ii8UtabIZ+ZNmYN+bLwIa8PHOEW5MbfaqXSlhKkSi4+7SfQDCHphw0SMfhsQ4qMEcoywZ+4niDgKlQEVkl+S/VGbLuPe92NRStkyreZBLPr3Rh7ScNlGHcmHmoV9v7725fMnsMmabGVhpGO84PwNHOfJyv2tx2h6LxFbAV8S44UQu2lc8YLWCK2UvKuRnBerBXLnDQThUUX8UuCFzb786gQzD5XDU0MENbByxiy0XdVGAC+tFXEiSIgFZlFbFYyShgdTP9MzX2MOglEi+ae+1UIFncraW7ptUey7qHFJylpHWWWvE+GTwsg2G50i0FvFj jolheiser@jolheiser''; key = ''ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfKqCWtDlS3tgvfT6hQN+ii8UtabIZ+ZNmYN+bLwIa8PHOEW5MbfaqXSlhKkSi4+7SfQDCHphw0SMfhsQ4qMEcoywZ+4niDgKlQEVkl+S/VGbLuPe92NRStkyreZBLPr3Rh7ScNlGHcmHmoV9v7725fMnsMmabGVhpGO84PwNHOfJyv2tx2h6LxFbAV8S44UQu2lc8YLWCK2UvKuRnBerBXLnDQThUUX8UuCFzb786gQzD5XDU0MENbByxiy0XdVGAC+tFXEiSIgFZlFbFYyShgdTP9MzX2MOglEi+ae+1UIFncraW7ptUey7qHFJylpHWWWvE+GTwsg2G50i0FvFj jolheiser@jolheiser'';
in { in
imports = [./actual.nix ./caddy.nix ./dex.nix ./git-pr.nix ./golink.nix ./gotosocial.nix ./restic.nix ./soju.nix ./tandoor.nix ./tclip.nix ./ugit.nix ./vikunja.nix ./hardware.nix]; {
imports = [
./actual.nix
./caddy.nix
./dex.nix
./git-pr.nix
./golink.nix
./gotosocial.nix
./restic.nix
./soju.nix
./tandoor.nix
./tclip.nix
./ugit.nix
./vikunja.nix
./hardware.nix
];
boot.tmp.cleanOnBoot = true; boot.tmp.cleanOnBoot = true;
zramSwap.enable = true; zramSwap.enable = true;
@ -12,7 +27,11 @@ in {
firewall = { firewall = {
enable = true; enable = true;
allowedTCPPorts = [80 443 6697]; allowedTCPPorts = [
80
443
6697
];
}; };
}; };
@ -23,13 +42,15 @@ in {
users.users = { users.users = {
"${username}" = { "${username}" = {
extraGroups = ["wheel" "docker" "storage"]; extraGroups = [
isNormalUser = true; "wheel"
openssh.authorizedKeys.keys = [ "docker"
key "storage"
]; ];
isNormalUser = true;
openssh.authorizedKeys.keys = [ key ];
}; };
"root".openssh.authorizedKeys.keys = [key]; "root".openssh.authorizedKeys.keys = [ key ];
}; };
system.stateVersion = "22.11"; system.stateVersion = "22.11";

Binary file not shown.

View File

@ -3,7 +3,9 @@
enable = true; enable = true;
openFirewall = true; openFirewall = true;
url = "pr.jolheiser.com"; url = "pr.jolheiser.com";
admins = ["ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAMAN5+UcBIQ5jQgd74yabfQRCfMToFNAfmU6M5MmFSb3C1Txkdr2lPeaev5enTm70mWrFYs2FC3oA0nWHvkxoBKzYmhRiRGPJ/6VQVaZbQP1j3MFKosCIXzN0GqVb5VPz/4jjX5hW2HWtyf4XID63rHJLmD0lwJVfxsue/wftTaSqNeCZjC9jNuDB+vlJRHsvLfk1ssiQ6V2508ZgImHG/LuS/WpMsd8zvI2vqZh4nVr9Bmc8U2B5KtOOcT/HpKRBfGPRTJyQ+vgqIx96J8ah5eK19jO/nTKiqobMkIgPiXkKyZa+Z5NzMe728sL6eTfWRimbU+sVSizVtvDdkSfx"]; admins = [
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAMAN5+UcBIQ5jQgd74yabfQRCfMToFNAfmU6M5MmFSb3C1Txkdr2lPeaev5enTm70mWrFYs2FC3oA0nWHvkxoBKzYmhRiRGPJ/6VQVaZbQP1j3MFKosCIXzN0GqVb5VPz/4jjX5hW2HWtyf4XID63rHJLmD0lwJVfxsue/wftTaSqNeCZjC9jNuDB+vlJRHsvLfk1ssiQ6V2508ZgImHG/LuS/WpMsd8zvI2vqZh4nVr9Bmc8U2B5KtOOcT/HpKRBfGPRTJyQ+vgqIx96J8ah5eK19jO/nTKiqobMkIgPiXkKyZa+Z5NzMe728sL6eTfWRimbU+sVSizVtvDdkSfx"
];
sshPort = 7448; sshPort = 7448;
enableWeb = true; enableWeb = true;
webPort = 7449; webPort = 7449;

View File

@ -10,12 +10,13 @@ let
} }
]; ];
in in
builtins.concatStringsSep "\n" (builtins.map (module: '' builtins.concatStringsSep "\n" (
respond /${module.name}* `<html><head> builtins.map (module: ''
<meta name="go-import" content="go.jolheiser.com/${module.name} git https://${module.repo}.git"> respond /${module.name}* `<html><head>
<meta http-equiv="refresh" content="3; url=https://pkg.go.dev/go.jolheiser.com/${module.name}" /> <meta name="go-import" content="go.jolheiser.com/${module.name} git https://${module.repo}.git">
</head><body> <meta http-equiv="refresh" content="3; url=https://pkg.go.dev/go.jolheiser.com/${module.name}" />
Redirecting to <a href="https://pkg.go.dev/go.jolheiser.com/${module.name}">https://pkg.go.dev/go.jolheiser.com/${module.name}</a> </head><body>
</body></html>` Redirecting to <a href="https://pkg.go.dev/go.jolheiser.com/${module.name}">https://pkg.go.dev/go.jolheiser.com/${module.name}</a>
'') </body></html>`
modules) '') modules
)

View File

@ -1,4 +1,5 @@
{pkgs, ...}: { { pkgs, ... }:
{
services.golink = { services.golink = {
enable = true; enable = true;
tailscaleAuthKeyFile = pkgs.writeText "tskey" "tskey-auth-kGaKxz5CNTRL-nvyRLm7J38B37QZ2gCDM8BqtwyC6zJUh7"; # One-time key tailscaleAuthKeyFile = pkgs.writeText "tskey" "tskey-auth-kGaKxz5CNTRL-nvyRLm7J38B37QZ2gCDM8BqtwyC6zJUh7"; # One-time key

View File

@ -1,8 +1,14 @@
{modulesPath, ...}: { { modulesPath, ... }:
imports = [(modulesPath + "/profiles/qemu-guest.nix")]; {
imports = [ (modulesPath + "/profiles/qemu-guest.nix") ];
boot.loader.grub.device = "/dev/sda"; boot.loader.grub.device = "/dev/sda";
boot.initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "xen_blkfront" "vmw_pvscsi"]; boot.initrd.availableKernelModules = [
boot.initrd.kernelModules = ["nvme"]; "ata_piix"
"uhci_hcd"
"xen_blkfront"
"vmw_pvscsi"
];
boot.initrd.kernelModules = [ "nvme" ];
fileSystems."/" = { fileSystems."/" = {
device = "/dev/sda1"; device = "/dev/sda1";
fsType = "ext4"; fsType = "ext4";

View File

@ -1,4 +1,5 @@
{config, ...}: { { config, ... }:
{
age.secrets = { age.secrets = {
restic-env.file = ../../secrets/personal/restic-env.age; restic-env.file = ../../secrets/personal/restic-env.age;
restic-pass.file = ../../secrets/personal/restic-pass.age; restic-pass.file = ../../secrets/personal/restic-pass.age;
@ -9,8 +10,12 @@
environmentFile = config.age.secrets.restic-env.path; environmentFile = config.age.secrets.restic-env.path;
passwordFile = config.age.secrets.restic-pass.path; passwordFile = config.age.secrets.restic-pass.path;
repositoryFile = config.age.secrets.restic-repo.path; repositoryFile = config.age.secrets.restic-repo.path;
paths = ["/var/lib/ugit/repos"]; paths = [ "/var/lib/ugit/repos" ];
pruneOpts = ["--keep-daily 7" "--keep-weekly 2" "--keep-monthly 2"]; pruneOpts = [
"--keep-daily 7"
"--keep-weekly 2"
"--keep-monthly 2"
];
timerConfig = { timerConfig = {
OnCalendar = "daily"; OnCalendar = "daily";
Persistent = true; Persistent = true;

View File

@ -1,6 +1,8 @@
{lib, ...}: let { lib, ... }:
let
baseCertPath = "/var/lib/acme/irc.jolheiser.com"; baseCertPath = "/var/lib/acme/irc.jolheiser.com";
in { in
{
security.acme = { security.acme = {
acceptTerms = true; acceptTerms = true;
email = "irc@jolheiser.com"; email = "irc@jolheiser.com";
@ -26,6 +28,6 @@ in {
isSystemUser = true; isSystemUser = true;
group = "soju"; group = "soju";
}; };
groups.soju = {}; groups.soju = { };
}; };
} }

View File

@ -2,7 +2,9 @@
services.ugit = { services.ugit = {
enable = true; enable = true;
openFirewall = true; openFirewall = true;
authorizedKeys = ["ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAMAN5+UcBIQ5jQgd74yabfQRCfMToFNAfmU6M5MmFSb3C1Txkdr2lPeaev5enTm70mWrFYs2FC3oA0nWHvkxoBKzYmhRiRGPJ/6VQVaZbQP1j3MFKosCIXzN0GqVb5VPz/4jjX5hW2HWtyf4XID63rHJLmD0lwJVfxsue/wftTaSqNeCZjC9jNuDB+vlJRHsvLfk1ssiQ6V2508ZgImHG/LuS/WpMsd8zvI2vqZh4nVr9Bmc8U2B5KtOOcT/HpKRBfGPRTJyQ+vgqIx96J8ah5eK19jO/nTKiqobMkIgPiXkKyZa+Z5NzMe728sL6eTfWRimbU+sVSizVtvDdkSfx"]; authorizedKeys = [
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAMAN5+UcBIQ5jQgd74yabfQRCfMToFNAfmU6M5MmFSb3C1Txkdr2lPeaev5enTm70mWrFYs2FC3oA0nWHvkxoBKzYmhRiRGPJ/6VQVaZbQP1j3MFKosCIXzN0GqVb5VPz/4jjX5hW2HWtyf4XID63rHJLmD0lwJVfxsue/wftTaSqNeCZjC9jNuDB+vlJRHsvLfk1ssiQ6V2508ZgImHG/LuS/WpMsd8zvI2vqZh4nVr9Bmc8U2B5KtOOcT/HpKRBfGPRTJyQ+vgqIx96J8ah5eK19jO/nTKiqobMkIgPiXkKyZa+Z5NzMe728sL6eTfWRimbU+sVSizVtvDdkSfx"
];
tsAuthKey = "tskey-auth-kRUJE7zxH621CNTRL-Td29STXSrtTUHdacaKaYtTD82uyDXZj7"; # One-time key tsAuthKey = "tskey-auth-kRUJE7zxH621CNTRL-Td29STXSrtTUHdacaKaYtTD82uyDXZj7"; # One-time key
config = { config = {
ssh.clone-url = "ugit@git.jolheiser.com"; ssh.clone-url = "ugit@git.jolheiser.com";

View File

@ -1,11 +1,19 @@
{pkgs, ...}: let { pkgs, ... }:
let
username = "jolheiser"; username = "jolheiser";
in { in
imports = [./hardware.nix ../common/gui]; {
imports = [
./hardware.nix
../common/gui
];
boot = { boot = {
kernelPackages = pkgs.linuxPackages_latest; kernelPackages = pkgs.linuxPackages_latest;
kernelParams = ["quiet" "splash"]; kernelParams = [
"quiet"
"splash"
];
loader = { loader = {
systemd-boot.enable = true; systemd-boot.enable = true;
efi.canTouchEfiVariables = true; efi.canTouchEfiVariables = true;
@ -28,7 +36,11 @@ in {
virtualisation.docker.enable = true; virtualisation.docker.enable = true;
users.users."${username}" = { users.users."${username}" = {
extraGroups = ["wheel" "docker" "storage"]; extraGroups = [
"wheel"
"docker"
"storage"
];
isNormalUser = true; isNormalUser = true;
}; };

View File

@ -6,15 +6,20 @@
lib, lib,
modulesPath, modulesPath,
... ...
}: { }:
imports = [ {
(modulesPath + "/installer/scan/not-detected.nix") imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
];
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod"]; boot.initrd.availableKernelModules = [
boot.initrd.kernelModules = []; "nvme"
boot.kernelModules = ["kvm-amd"]; "xhci_pci"
boot.extraModulePackages = []; "thunderbolt"
"usb_storage"
"sd_mod"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" = { fileSystems."/" = {
device = "/dev/disk/by-uuid/90652083-df9c-42df-8c8a-8d979a3e1e0c"; device = "/dev/disk/by-uuid/90652083-df9c-42df-8c8a-8d979a3e1e0c";
@ -26,9 +31,7 @@
fsType = "vfat"; fsType = "vfat";
}; };
swapDevices = [ swapDevices = [ { device = "/dev/disk/by-uuid/2034b9e4-011b-4715-a7a2-5f5445dc2849"; } ];
{device = "/dev/disk/by-uuid/2034b9e4-011b-4715-a7a2-5f5445dc2849";}
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's # (the default) this is the recommended approach. When using systemd-networkd it's

View File

@ -1,11 +1,19 @@
{pkgs, ...}: let { pkgs, ... }:
let
username = "jolheiser"; username = "jolheiser";
in { in
imports = [./hardware.nix ../common/gui]; {
imports = [
./hardware.nix
../common/gui
];
boot = { boot = {
kernelPackages = pkgs.linuxPackages_latest; kernelPackages = pkgs.linuxPackages_latest;
kernelParams = ["quiet" "splash"]; kernelParams = [
"quiet"
"splash"
];
loader.grub = { loader.grub = {
enable = true; enable = true;
device = "/dev/sda"; device = "/dev/sda";
@ -14,7 +22,9 @@ in {
}; };
}; };
boot.initrd.secrets = {"/crypto_keyfile.bin" = null;}; boot.initrd.secrets = {
"/crypto_keyfile.bin" = null;
};
boot.initrd.luks.devices = { boot.initrd.luks.devices = {
"luks-1f9bde68-9c4c-423c-a95f-17aa170dd2b4".keyFile = "/crypto_keyfile.bin"; "luks-1f9bde68-9c4c-423c-a95f-17aa170dd2b4".keyFile = "/crypto_keyfile.bin";
@ -24,7 +34,9 @@ in {
}; };
}; };
hardware = {bluetooth.enable = true;}; hardware = {
bluetooth.enable = true;
};
networking = { networking = {
hostName = "matcha"; hostName = "matcha";
@ -41,7 +53,11 @@ in {
virtualisation.docker.enable = true; virtualisation.docker.enable = true;
users.users."${username}" = { users.users."${username}" = {
extraGroups = ["wheel" "docker" "storage"]; extraGroups = [
"wheel"
"docker"
"storage"
];
isNormalUser = true; isNormalUser = true;
}; };

View File

@ -6,8 +6,9 @@
lib, lib,
modulesPath, modulesPath,
... ...
}: { }:
imports = [(modulesPath + "/installer/scan/not-detected.nix")]; {
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot.initrd.availableKernelModules = [ boot.initrd.availableKernelModules = [
"xhci_pci" "xhci_pci"
@ -18,9 +19,9 @@
"sd_mod" "sd_mod"
"rtsx_pci_sdmmc" "rtsx_pci_sdmmc"
]; ];
boot.initrd.kernelModules = []; boot.initrd.kernelModules = [ ];
boot.kernelModules = ["kvm-intel"]; boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = []; boot.extraModulePackages = [ ];
fileSystems."/" = { fileSystems."/" = {
device = "/dev/disk/by-uuid/a3e3e496-9497-4340-9750-2104e2ab22ab"; device = "/dev/disk/by-uuid/a3e3e496-9497-4340-9750-2104e2ab22ab";
@ -34,7 +35,7 @@
boot.initrd.luks.devices."luks-1f9bde68-9c4c-423c-a95f-17aa170dd2b4".device = "/dev/disk/by-uuid/1f9bde68-9c4c-423c-a95f-17aa170dd2b4"; boot.initrd.luks.devices."luks-1f9bde68-9c4c-423c-a95f-17aa170dd2b4".device = "/dev/disk/by-uuid/1f9bde68-9c4c-423c-a95f-17aa170dd2b4";
swapDevices = [{device = "/dev/disk/by-uuid/7e84d904-b00a-4c6c-aba4-ec1dde2dff85";}]; swapDevices = [ { device = "/dev/disk/by-uuid/7e84d904-b00a-4c6c-aba4-ec1dde2dff85"; } ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's # (the default) this is the recommended approach. When using systemd-networkd it's
@ -45,6 +46,5 @@
# networking.interfaces.wlp5s0.useDHCP = lib.mkDefault true; # networking.interfaces.wlp5s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

View File

@ -1,9 +1,16 @@
{pkgs, ...}: { { pkgs, ... }:
imports = [./hardware.nix ../common/gui]; {
imports = [
./hardware.nix
../common/gui
];
boot = { boot = {
kernelPackages = pkgs.linuxPackages_latest; kernelPackages = pkgs.linuxPackages_latest;
kernelParams = ["quiet" "splash"]; kernelParams = [
"quiet"
"splash"
];
}; };
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = true;
@ -11,14 +18,16 @@
boot.initrd.luks.devices."luks-c1c666de-2c68-4d50-98f1-3974ef424ff3".device = "/dev/disk/by-uuid/c1c666de-2c68-4d50-98f1-3974ef424ff3"; boot.initrd.luks.devices."luks-c1c666de-2c68-4d50-98f1-3974ef424ff3".device = "/dev/disk/by-uuid/c1c666de-2c68-4d50-98f1-3974ef424ff3";
hardware = {bluetooth.enable = true;}; hardware = {
bluetooth.enable = true;
};
networking = { networking = {
hostName = "sencha"; hostName = "sencha";
networkmanager.enable = true; networkmanager.enable = true;
firewall = { firewall = {
enable = true; enable = true;
allowedTCPPorts = [8096]; allowedTCPPorts = [ 8096 ];
}; };
}; };
@ -28,7 +37,10 @@
pcscd.enable = true; pcscd.enable = true;
printing = { printing = {
enable = true; enable = true;
drivers = [pkgs.canon-cups-ufr2 pkgs.cnijfilter_4_00]; drivers = [
pkgs.canon-cups-ufr2
pkgs.cnijfilter_4_00
];
}; };
jellyfin.enable = true; jellyfin.enable = true;
mullvad-vpn = { mullvad-vpn = {
@ -44,11 +56,19 @@
users = { users = {
olheiser.isNormalUser = true; olheiser.isNormalUser = true;
jolheiser = { jolheiser = {
extraGroups = ["wheel" "docker" "storage"]; extraGroups = [
"wheel"
"docker"
"storage"
];
isNormalUser = true; isNormalUser = true;
}; };
}; };
groups.media.members = ["jolheiser" "olheiser" "jellyfin"]; groups.media.members = [
"jolheiser"
"olheiser"
"jellyfin"
];
}; };
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [

View File

@ -6,15 +6,22 @@
lib, lib,
modulesPath, modulesPath,
... ...
}: { }:
imports = [ {
(modulesPath + "/installer/scan/not-detected.nix") imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
];
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "sr_mod" "rtsx_usb_sdmmc"]; boot.initrd.availableKernelModules = [
boot.initrd.kernelModules = []; "xhci_pci"
boot.kernelModules = []; "ahci"
boot.extraModulePackages = []; "usbhid"
"usb_storage"
"sd_mod"
"sr_mod"
"rtsx_usb_sdmmc"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ ];
boot.extraModulePackages = [ ];
fileSystems."/" = { fileSystems."/" = {
device = "/dev/disk/by-uuid/d1f561b1-bc50-4e34-9ca6-e973d2d9437a"; device = "/dev/disk/by-uuid/d1f561b1-bc50-4e34-9ca6-e973d2d9437a";
@ -28,9 +35,7 @@
fsType = "vfat"; fsType = "vfat";
}; };
swapDevices = [ swapDevices = [ { device = "/dev/disk/by-uuid/5c3eb124-674b-4315-890d-137275aab504"; } ];
{device = "/dev/disk/by-uuid/5c3eb124-674b-4315-890d-137275aab504";}
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's # (the default) this is the recommended approach. When using systemd-networkd it's

View File

@ -1,10 +1,8 @@
{ { config, lib, ... }:
config, let
lib,
...
}: let
cfg = config.services.tclip; cfg = config.services.tclip;
in { in
{
options.services.tclip = { options.services.tclip = {
enable = lib.mkEnableOption "tclip service"; enable = lib.mkEnableOption "tclip service";
@ -71,31 +69,29 @@ in {
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
systemd.services.tclip = { systemd.services.tclip = {
description = "tclip Service"; description = "tclip Service";
after = ["network.target"]; after = [ "network.target" ];
wantedBy = ["multi-user.target"]; wantedBy = [ "multi-user.target" ];
serviceConfig = { serviceConfig = {
ExecStart = let ExecStart =
args = let
lib.optionals (cfg.httpPort != null) [ args =
"--http-port=${cfg.httpPort}" lib.optionals (cfg.httpPort != null) [ "--http-port=${cfg.httpPort}" ]
] ++ lib.optionals (cfg.controlURL != null) [ "--control-url=${cfg.controlURL}" ]
++ lib.optionals (cfg.controlURL != null) [ ++ [
"--control-url=${cfg.controlURL}" (lib.optionalString cfg.disableHTTPS "--disable-https")
] "--hostname=${cfg.hostname}"
++ [ "--data-location=${cfg.dataLocation}"
(lib.optionalString cfg.disableHTTPS "--disable-https") (lib.optionalString cfg.tsnetVerbose "--tsnet-verbose")
"--hostname=${cfg.hostname}" (lib.optionalString cfg.useFunnel "--use-funnel")
"--data-location=${cfg.dataLocation}" (lib.optionalString cfg.hideFunnelUsers "--hide-funnel-users")
(lib.optionalString cfg.tsnetVerbose "--tsnet-verbose") ];
(lib.optionalString cfg.useFunnel "--use-funnel") in
(lib.optionalString cfg.hideFunnelUsers "--hide-funnel-users") "${cfg.package}/bin/tclipd ${lib.concatStringsSep " " args}";
];
in "${cfg.package}/bin/tclipd ${lib.concatStringsSep " " args}";
Restart = "always"; Restart = "always";
User = "tclip"; User = "tclip";
Group = "tclip"; Group = "tclip";
Environment = ["TS_AUTHKEY=${cfg.authKey}"]; Environment = [ "TS_AUTHKEY=${cfg.authKey}" ];
}; };
}; };
@ -107,6 +103,6 @@ in {
createHome = true; createHome = true;
}; };
users.groups.tclip = {}; users.groups.tclip = { };
}; };
} }

View File

@ -5,19 +5,47 @@ let
sencha = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJurjAMu4IXgpBwgUP0QvE2ySE5/Orn/yflkdWVvy6Am"; sencha = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJurjAMu4IXgpBwgUP0QvE2ySE5/Orn/yflkdWVvy6Am";
dragonwell = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN32Cwxer2AOGvEqSqXSPp49gj1VtR7G2XmPnmXj6o53"; dragonwell = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN32Cwxer2AOGvEqSqXSPp49gj1VtR7G2XmPnmXj6o53";
all = [jolheiser matcha genmaicha sencha dragonwell]; all = [
in { jolheiser
matcha
genmaicha
sencha
dragonwell
];
in
{
"shared/cachix.age".publicKeys = all; "shared/cachix.age".publicKeys = all;
"shared/ssh-config.age".publicKeys = all; "shared/ssh-config.age".publicKeys = all;
"shared/spotify.age".publicKeys = all; "shared/spotify.age".publicKeys = all;
"shared/irc-pw.age".publicKeys = all; "shared/irc-pw.age".publicKeys = all;
"shared/gist-pw.age".publicKeys = all; "shared/gist-pw.age".publicKeys = all;
"shared/git-send-email.age".publicKeys = all; "shared/git-send-email.age".publicKeys = all;
"personal/restic-env.age".publicKeys = [jolheiser dragonwell]; "personal/restic-env.age".publicKeys = [
"personal/restic-pass.age".publicKeys = [jolheiser dragonwell]; jolheiser
"personal/restic-repo.age".publicKeys = [jolheiser dragonwell]; dragonwell
"personal/dex.age".publicKeys = [jolheiser dragonwell]; ];
"personal/dex-tailscale.age".publicKeys = [jolheiser dragonwell]; "personal/restic-pass.age".publicKeys = [
"personal/dex-vikunja.age".publicKeys = [jolheiser dragonwell]; jolheiser
"personal/dex-tandoor.age".publicKeys = [jolheiser dragonwell]; dragonwell
];
"personal/restic-repo.age".publicKeys = [
jolheiser
dragonwell
];
"personal/dex.age".publicKeys = [
jolheiser
dragonwell
];
"personal/dex-tailscale.age".publicKeys = [
jolheiser
dragonwell
];
"personal/dex-vikunja.age".publicKeys = [
jolheiser
dragonwell
];
"personal/dex-tandoor.age".publicKeys = [
jolheiser
dragonwell
];
} }