Compare commits

..

1 Commits

Author SHA1 Message Date
jolheiser 8a229b1654
wip: jenkins
Signed-off-by: jolheiser <john.olheiser@gmail.com>
2024-03-17 13:31:03 -05:00
93 changed files with 1091 additions and 2409 deletions

View File

@ -1,6 +1,6 @@
apps/gui/firefox/work.nix:
- age105cm5awxxegyrqthh4vhnxzr0tdy86q8uq52wkkjacfkutp2vprqwseak7
machines/chai/cifs.nix:
- age105cm5awxxegyrqthh4vhnxzr0tdy86q8uq52wkkjacfkutp2vprqwseak7
machines/dragonwell/dex.nix: machines/dragonwell/dex.nix:
- age105cm5awxxegyrqthh4vhnxzr0tdy86q8uq52wkkjacfkutp2vprqwseak7 - age105cm5awxxegyrqthh4vhnxzr0tdy86q8uq52wkkjacfkutp2vprqwseak7
machines/dragonwell/tandoor.nix:
- age105cm5awxxegyrqthh4vhnxzr0tdy86q8uq52wkkjacfkutp2vprqwseak7
machines/dragonwell/vikunja.nix:
- age105cm5awxxegyrqthh4vhnxzr0tdy86q8uq52wkkjacfkutp2vprqwseak7

4
.gitattributes vendored
View File

@ -1,4 +1,4 @@
# Age # Age
apps/gui/firefox/work.nix filter=git-age diff=git-age
machines/chai/cifs.nix filter=git-age diff=git-age
machines/dragonwell/dex.nix filter=git-age diff=git-age machines/dragonwell/dex.nix filter=git-age diff=git-age
machines/dragonwell/vikunja.nix filter=git-age diff=git-age
machines/dragonwell/tandoor.nix filter=git-age diff=git-age

View File

@ -1,27 +0,0 @@
{ pkgs, ... }:
{
imports = [ ./gtk.nix ];
dconf.settings =
let
wallpaper = pkgs.fetchurl {
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";
};
};
}

View File

@ -1,27 +1,48 @@
{ pkgs, ... }: {pkgs, ...}: {
{
imports = [ imports = [
../nogui ../nogui
./firefox.nix ./firefox.nix
./flameshot.nix
./ghostty.nix ./ghostty.nix
./obs.nix ./gtk.nix
./spotify.nix ./spotify.nix
./tiny.nix
./wezterm.nix ./wezterm.nix
./zed.nix
]; ];
home = { home = {
packages = with pkgs; [ packages = with pkgs; [
# Tools # Tools
#cinny-desktop cinny-desktop
delve delve
discord discord
obsidian obsidian
gimp spotify-player
# LSPs # LSPs
marksman marksman
nodePackages.yaml-language-server nodePackages.yaml-language-server
# IDEs
jetbrains.goland
]; ];
}; };
dconf.settings = let
wallpaper = pkgs.fetchurl {
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";
};
};
} }

View File

@ -1,19 +1,15 @@
{ 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 = [ order = ["Kagi" "DuckDuckGo"];
"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";
@ -27,7 +23,7 @@
]; ];
}; };
"DuckDuckGo" = { "DuckDuckGo" = {
definedAliases = [ "@d" ]; definedAliases = ["@d"];
urls = [ urls = [
{ {
template = "https://duckduckgo.com/"; template = "https://duckduckgo.com/";
@ -61,26 +57,11 @@
"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/";}
label = "github"; {url = "https://git.jolheiser.com";}
}
{
url = "https://git.jojodev.com/";
label = "jojodev";
}
{
url = "https://git.jolheiser.com";
label = "ugit";
}
]; ];
# tailscale apps "browser.fixup.domainwhitelist.go" = true; # golink
"browser.fixup.domainwhitelist.go" = true;
"browser.fixup.domainwhitelist.git" = true;
"browser.fixup.domainwhitelist.paste" = true;
"browser.fixup.domainwhitelist.radarr" = true;
"browser.fixup.domainwhitelist.sonarr" = true;
"browser.fixup.domainwhitelist.jellyfin" = true;
}; };
bookmarks = [ bookmarks = [
{ {
@ -92,34 +73,31 @@
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 = [ tags = ["gitea" "gist"];
"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";
} }
@ -130,124 +108,30 @@
bookmarks = [ bookmarks = [
{ {
name = "golink"; name = "golink";
tags = [ "tailscale" ]; tags = ["tailscale"];
keyword = "go"; keyword = "go";
url = "http://go"; url = "http://go";
} }
{
name = "tclip";
tags = [ "tailscale" ];
keyword = "paste";
url = "http://paste";
}
{
name = "ugit";
tags = [
"tailscale"
"git"
];
keyword = "git";
url = "https://git";
}
{
name = "cfg";
tags = [
"cfg"
"tailscale"
];
keyword = "cfg";
url = "https://cfg";
}
{
name = "media";
bookmarks = [
{ {
name = "jellyfin"; name = "jellyfin";
tags = [ tags = ["jellyfin"];
"jellyfin"
"tailscale"
];
keyword = "jellyfin"; keyword = "jellyfin";
url = "http://jellyfin"; url = "http://sencha:8096";
}
{
name = "sonarr";
tags = [
"sonarr"
"tailscale"
"shows"
];
keyword = "sonarr";
url = "http://sonarr";
}
{
name = "radarr";
tags = [
"radarr"
"tailscale"
"movies"
];
keyword = "radarr";
url = "http://radarr";
}
{
name = "bazarr";
tags = [
"bazarr"
"tailscale"
"translations"
];
keyword = "bazarr";
url = "http://bazarr";
}
{
name = "prowlarr";
tags = [
"prowlarr"
"tailscale"
"indexers"
];
keyword = "prowlarr";
url = "http://prowlarr";
}
];
} }
]; ];
} }
{ {
name = "ugit"; name = "ugit";
tags = [ tags = ["git" "ugit"];
"git"
"ugit"
];
keyword = "ugit"; keyword = "ugit";
url = "https://git.jolheiser.com"; url = "https://git.jolheiser.com";
} }
{
name = "git-pr";
tags = [
"git"
"pr"
];
keyword = "git-pr";
url = "https://pr.jolheiser.com";
}
{
name = "todo";
tags = [
"vikunja"
"todo"
];
keyword = "todo";
url = "https://todo.jolheiser.com";
}
]; ];
} }
# 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/";
} }

Binary file not shown.

View File

@ -1,14 +0,0 @@
{
services.flameshot = {
enable = true;
settings = {
General = {
showStartupLaunchMessage = false;
saveAsFileExtension = ".png";
uiColor = "#313244";
contrastUiColor = "#b4befe";
userColors = "picker, #f5e0dc, #f2cdcd, #f5c2e7, #cba6f7, #f38ba8, #eba0ac, #fab387, #f9e2af, #a6e3a1, #94e2d5, #89dceb, #74c7ec, #89b4fa, #b4befe";
};
};
};
}

View File

@ -1,4 +1,3 @@
{ pkgs, ... }:
{ {
xdg.configFile."ghostty/config".text = '' xdg.configFile."ghostty/config".text = ''
background-opacity = 0.9 background-opacity = 0.9
@ -9,8 +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;
home.packages = [ pkgs.ghostty ];
} }

View File

@ -3,8 +3,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: {
{
home.pointerCursor = { home.pointerCursor = {
name = "catppuccin-cursors"; name = "catppuccin-cursors";
package = pkgs.catppuccin-cursors.mochaLavender; package = pkgs.catppuccin-cursors.mochaLavender;
@ -22,7 +21,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";
}; };
@ -42,18 +41,15 @@
}; };
}; };
xdg = xdg = let
let
themeDir = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}"; themeDir = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}";
in in
lib.mkIf config.gtk.enable { lib.mkIf config.gtk.enable {
configFile = { configFile."gtk-4.0/assets" = {
"gtk-4.0/assets" = {
source = "${themeDir}/gtk-4.0/assets"; source = "${themeDir}/gtk-4.0/assets";
recursive = true; recursive = true;
}; };
"gtk-4.0/gtk.css".source = "${themeDir}/gtk-4.0/gtk.css"; configFile."gtk-4.0/gtk.css".source = "${themeDir}/gtk-4.0/gtk.css";
"gtk-4.0/gtk-dark.css".source = "${themeDir}/gtk-4.0/gtk-dark.css"; configFile."gtk-4.0/gtk-dark.css".source = "${themeDir}/gtk-4.0/gtk-dark.css";
};
}; };
} }

View File

@ -1,7 +0,0 @@
{ pkgs, ... }:
{
programs.obs-studio = {
enable = true;
plugins = [ pkgs.obs-studio-plugins.obs-webkitgtk ];
};
}

View File

@ -1,18 +1,12 @@
{ pkgs, ... }: {pkgs, ...}: {
{ xdg.configFile."spotify-player/theme.toml".text = builtins.readFile (pkgs.fetchFromGitHub {
home.packages = [ pkgs.spotify-player ];
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" {
xdg.configFile."spotify-player/app.toml".source =
(pkgs.formats.toml { }).generate "spotify-player-config"
{
client_id = "41af4976ba70474fbd541ee8764a2cda"; client_id = "41af4976ba70474fbd541ee8764a2cda";
theme = "Catppuccin-mocha"; theme = "Catppuccin-mocha";
enable_notify = false; enable_notify = false;

32
apps/gui/tiny.nix 100644
View File

@ -0,0 +1,32 @@
{
programs.tiny = {
enable = true;
settings = {
servers = [
{
addr = "irc.libera.chat";
port = 6697;
tls = true;
realname = "jolheiser";
nicks = ["jolheiser"];
alias = "LiberaChat";
join = ["#gitea" "#gitea-devel"];
sasl = {
username = "jolheiser";
password = {
command = "cat /run/agenix/irc-pw";
};
};
}
];
defaults = {
nicks = ["jolheiser"];
realname = "jolheiser";
};
key_map = {
alt_left = "tab_prev";
alt_right = "tab_next";
};
};
};
}

View File

@ -27,10 +27,7 @@ local cfg = wezterm.config_builder()
cfg.default_prog = { "nu", "--config", "~/.config/nushell/config.nu", "--env-config", "~/.config/nushell/env.nu" } cfg.default_prog = { "nu", "--config", "~/.config/nushell/config.nu", "--env-config", "~/.config/nushell/env.nu" }
cfg.window_close_confirmation = 'NeverPrompt' cfg.window_close_confirmation = 'NeverPrompt'
cfg.window_background_opacity = opacity cfg.window_background_opacity = opacity
cfg.window_decorations = "INTEGRATED_BUTTONS|RESIZE" cfg.window_decorations = "RESIZE"
cfg.integrated_title_button_style = "Gnome"
cfg.integrated_title_buttons = { "Maximize", "Close" }
cfg.font = wezterm.font_with_fallback { "Monaspace Neon", "Iosevka", "Hack" }
cfg.leader = { cfg.leader = {
key = "Space", key = "Space",
mods = "CTRL", mods = "CTRL",

View File

@ -1,119 +0,0 @@
{ pkgs, ... }:
let
zed-fhs = pkgs.buildFHSUserEnv {
name = "zed";
targetPkgs =
pkgs: with pkgs; [
zed-editor
nixd
];
runScript = "zed";
};
in
{
home.packages = [ zed-fhs ];
xdg.configFile = {
"zed/settings.json".text = builtins.toJSON {
buffer_font_family = "Monaspace Neon";
buffer_font_size = 13;
soft_wrap = "editor_width";
telemetry = {
diagnostics = false;
metrics = false;
};
terminal = {
font_family = "Monaspace Neon";
shell = {
program = "nu";
};
};
theme = "Catppuccin Mocha";
ui_font_size = 15;
vim_mode = false;
relative_line_numbers = true;
vim = {
use_system_clipboard = "always";
use_multiline_find = true;
};
tab_bar.show = false;
toolbar = {
breadcrumbs = true;
quick_actions = false;
};
assistant = {
version = "1";
provider.name = "anthropic";
};
};
"zed/keymap.json".text =
let
leader = "space";
in
builtins.toJSON [
{
"context" = "Dock || Terminal || Editor";
"bindings" = {
"ctrl-h" = [
"workspace::ActivatePaneInDirection"
"Left"
];
"ctrl-l" = [
"workspace::ActivatePaneInDirection"
"Right"
];
"ctrl-k" = [
"workspace::ActivatePaneInDirection"
"Up"
];
"ctrl-j" = [
"workspace::ActivatePaneInDirection"
"Down"
];
};
}
{
"context" = "Editor && VimControl && !VimWaiting && !menu";
"bindings" = {
"${leader} b" = "editor::ToggleGitBlame";
"${leader} k" = "editor::Hover";
"${leader} a" = "editor::ToggleCodeActions";
"${leader} l f" = "editor::Format";
"${leader} d" = "diagnostics::Deploy";
"${leader} f" = "file_finder::Toggle";
"${leader} o" = "tab_switcher::Toggle";
"${leader} e" = "workspace::ToggleLeftDock";
"${leader} /" = "workspace::NewSearch";
"n" = "search::SelectNextMatch";
"shift-n" = "search::SelectPrevMatch";
"${leader} t" = "workspace::NewCenterTerminal";
"${leader} c" = "editor::ToggleComments";
"${leader} w" = "workspace::Save";
};
}
{
"context" = "Editor && vim_mode == visual && !VimWaiting && !VimObject";
"bindings" = {
"shift-j" = "editor::MoveLineDown";
"shift-k" = "editor::MoveLineUp";
};
}
{
"context" = "Workspace";
"bindings" = {
"ctrl-z" = "workspace::ToggleZoom";
"cmd-k" = [
"projects::OpenRecent"
{ "create_new_window" = false; }
];
"ctrl-x" = "tab_switcher::CloseSelectedItem";
};
}
{
"context" = "Terminal";
"bindings" = {
"cmd-t" = "workspace::NewTerminal";
};
}
];
};
}

View File

@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
programs.aerc = { programs.aerc = {
enable = true; enable = true;
extraConfig = { extraConfig = {
@ -32,15 +31,13 @@
}; };
}; };
stylesets = { stylesets = {
catppuccin-mocha = builtins.readFile ( catppuccin-mocha = builtins.readFile (pkgs.fetchFromGitHub {
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,10 +1,7 @@
{ pkgs, ... }: {pkgs, ...}: {
{
programs.bat = { programs.bat = {
enable = true; enable = true;
config = { config = {theme = "ctp-mocha";};
theme = "ctp-mocha";
};
themes = { themes = {
ctp-mocha = { ctp-mocha = {
src = pkgs.fetchFromGitHub { src = pkgs.fetchFromGitHub {

View File

@ -6,14 +6,7 @@
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 = [ cpu_core_colors = ["#f38ba8" "#fab387" "#f9e2af" "#a6e3a1" "#74c7ec" "#cba6f7"];
"#f38ba8"
"#fab387"
"#f9e2af"
"#a6e3a1"
"#74c7ec"
"#cba6f7"
];
ram_color = "#a6e3a1"; ram_color = "#a6e3a1";
swap_color = "#fab387"; swap_color = "#fab387";
rx_color = "#a6e3a1"; rx_color = "#a6e3a1";
@ -29,14 +22,7 @@
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 = [ gpu_core_colors = ["#74c7ec" "#cba6f7" "#f38ba8" "#fab387" "#f9e2af" "#a6e3a1"];
"#74c7ec"
"#cba6f7"
"#f38ba8"
"#fab387"
"#f9e2af"
"#a6e3a1"
];
arc_color = "#89dceb"; arc_color = "#89dceb";
}; };
}; };

View File

@ -1,5 +1,8 @@
{ pkgs, config, ... }:
{ {
pkgs,
config,
...
}: {
imports = [ imports = [
./aerc.nix ./aerc.nix
./atuin.nix ./atuin.nix
@ -11,13 +14,10 @@
./go.nix ./go.nix
./gpg.nix ./gpg.nix
#./helix.nix #./helix.nix
./jj.nix
./jq.nix ./jq.nix
./lazygit.nix ./lazygit.nix
./llm.nix
./nushell.nix ./nushell.nix
./oh-my-posh.nix ./oh-my-posh.nix
./senpai.nix
./ssh.nix ./ssh.nix
./xdg.nix ./xdg.nix
./zoxide.nix ./zoxide.nix
@ -36,21 +36,12 @@
ripgrep ripgrep
usql usql
# Dhall
dhall
dhall-nix
dhall-lsp-server
# LSPs # LSPs
gopls gopls
nil nil
# Jsonnet
go-jsonnet
jsonnet-language-server
# Formatters # Formatters
nixfmt-rfc-style alejandra
gofumpt gofumpt
# Flake overlays # Flake overlays
@ -61,8 +52,6 @@
jolheiser.helix jolheiser.helix
jolheiser.tmpl jolheiser.tmpl
jolheiser.gomodinit jolheiser.gomodinit
jolheiser.cfg
jolheiser.spectre
]; ];
activation.report-changes = config.lib.dag.entryAnywhere '' activation.report-changes = config.lib.dag.entryAnywhere ''
${pkgs.nvd}/bin/nvd --nix-bin-dir=${pkgs.nix}/bin diff $oldGenPath $newGenPath ${pkgs.nvd}/bin/nvd --nix-bin-dir=${pkgs.nix}/bin diff $oldGenPath $newGenPath
@ -72,7 +61,7 @@
xdg.configFile."gist/config.yaml".text = '' xdg.configFile."gist/config.yaml".text = ''
username: jolheiser username: jolheiser
password-file: ${config.age.secrets.gist-pw.path} password-file: /run/agenix/gist-pw
domain: gist.jojodev.com domain: gist.jojodev.com
''; '';

View File

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

View File

@ -1,30 +1,21 @@
{ pkgs, config, ... }: {config, ...}: let
let key = "0xB853ADA5DA7BBF7A";
insteadOf = prefix: domain: { insteadOf = prefix: domain: {
"https://${domain}/".insteadOf = "${prefix}:"; "https://${domain}/".insteadOf = "${prefix}:";
"git@${domain}:".insteadOf = "ssh:${prefix}:"; "git@${domain}:".insteadOf = "ssh:${prefix}:";
}; };
key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAUxLwkJOlalAHTdkbh+m49XTZGKDqWz1o/o8OLmtQdX"; in {
sshSigning = {
user.signingkey = key;
commit.gpgSign = true;
tag.gpgSign = true;
gpg = {
format = "ssh";
ssh.allowedSignersFile = "${pkgs.writeText "allowedSigners" "git@jolheiser.com ${key}"}";
};
};
in
{
programs.git = { programs.git = {
enable = true; enable = true;
userName = "jolheiser"; userName = "jolheiser";
userEmail = "git@jolheiser.com"; userEmail = "john.olheiser@gmail.com";
signing = {
signByDefault = true;
key = key;
};
aliases = { aliases = {
wt = "worktree"; wt = "worktree";
ci = "commit -s -S -m"; ci = "commit -s -S -m";
ca = "commit --amend";
pf = "push --force";
br = "branch"; br = "branch";
aa = "add ."; aa = "add .";
adog = "log --all --decorate --oneline --graph"; adog = "log --all --decorate --oneline --graph";
@ -38,12 +29,7 @@ in
tui = "!lazygit"; tui = "!lazygit";
}; };
lfs.enable = true; lfs.enable = true;
ignores = [ ignores = [".idea/" "result" "node_modules" "ve"];
".idea/"
"result"
"node_modules"
"ve"
];
extraConfig = { extraConfig = {
init.defaultBranch = "main"; init.defaultBranch = "main";
merge.conflictstyle = "zdiff3"; merge.conflictstyle = "zdiff3";
@ -65,10 +51,25 @@ in
// insteadOf "gt" "gitea.com" // insteadOf "gt" "gitea.com"
// insteadOf "gl" "gitlab.com" // insteadOf "gl" "gitlab.com"
// insteadOf "cb" "codeberg.org"; // insteadOf "cb" "codeberg.org";
} // sshSigning;
difftastic = {
enable = true;
}; };
includes = [ { inherit (config.age.secrets.git-send-email) path; } ]; delta = {
enable = true;
options = {
features = "ctp-mocha";
navigate = true;
light = false;
line-numbers = true;
side-by-side = true;
};
};
includes = [
{
path = "/run/agenix/git-send-email";
}
{
condition = "gitdir:~/ndlegis/";
path = "${config.xdg.configHome}/git/work-config";
}
];
}; };
} }

View File

@ -1,10 +1,9 @@
let let
goPath = ".local/share/go"; goPath = ".local/share/go";
in in {
{
programs.go = { programs.go = {
inherit goPath;
enable = true; enable = true;
goPath = goPath;
goBin = "${goPath}/bin"; goBin = "${goPath}/bin";
}; };
} }

View File

@ -1,9 +1,7 @@
{ pkgs, ... }: {pkgs, ...}: let
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 {
@ -11,7 +9,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 = {
@ -31,9 +29,9 @@ in
}; };
}; };
services.gpg-agent = { services.gpg-agent = {
enable = false; enable = true;
enableExtraSocket = true; enableExtraSocket = true;
enableSshSupport = true; enableSshSupport = true;
pinentryPackage = pkgs.pinentry-gnome3; pinentryFlavor = "gnome3";
}; };
} }

View File

@ -1,20 +1,15 @@
# 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, ... }: {pkgs, ...}: let
let query = scm:
query = builtins.readFile (pkgs.fetchFromGitea {
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;
@ -30,16 +25,12 @@ in
normal = "block"; normal = "block";
select = "underline"; select = "underline";
}; };
file-picker = { file-picker = {hidden = false;};
hidden = false;
};
indent-guides = { indent-guides = {
render = true; render = true;
skip-levels = 1; skip-levels = 1;
}; };
soft-wrap = { soft-wrap = {enable = true;};
enable = true;
};
statusline = { statusline = {
right = [ right = [
"version-control" "version-control"
@ -49,9 +40,7 @@ in
"file-encoding" "file-encoding"
]; ];
}; };
lsp = { lsp = {display-messages = true;};
display-messages = true;
};
}; };
keys = { keys = {
normal = { normal = {
@ -67,61 +56,33 @@ 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 = [ C-s = ["select_all" "select_regex"];
"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 = [ C-u = ["half_page_up" "align_view_center"];
"half_page_up" C-d = ["half_page_down" "align_view_center"];
"align_view_center"
];
C-d = [
"half_page_down"
"align_view_center"
];
"{" = [ "{" = ["goto_prev_paragraph" "collapse_selection"];
"goto_prev_paragraph" "}" = ["goto_next_paragraph" "collapse_selection"];
"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 = [ V = ["select_mode" "extend_to_line_bounds"];
"select_mode" C = ["collapse_selection" "extend_to_line_end" "change_selection"];
"extend_to_line_bounds" D = ["extend_to_line_end" "delete_selection"];
];
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 = [ d = ["extend_to_line_bounds" "delete_selection"];
"extend_to_line_bounds" t = ["extend_till_char"];
"delete_selection" s = ["surround_delete"];
]; i = ["select_textobject_inner"];
t = [ "extend_till_char" ]; a = ["select_textobject_around"];
s = [ "surround_delete" ];
i = [ "select_textobject_inner" ];
a = [ "select_textobject_around" ];
}; };
x = "delete_selection"; x = "delete_selection";
@ -140,40 +101,16 @@ in
"collapse_selection" "collapse_selection"
]; ];
w = [ w = ["move_next_word_start" "move_char_right" "collapse_selection"];
"move_next_word_start" e = ["move_next_word_end" "collapse_selection"];
"move_char_right" b = ["move_prev_word_start" "collapse_selection"];
"collapse_selection"
];
e = [
"move_next_word_end"
"collapse_selection"
];
b = [
"move_prev_word_start"
"collapse_selection"
];
i = [ i = ["insert_mode" "collapse_selection"];
"insert_mode" a = ["append_mode" "collapse_selection"];
"collapse_selection"
];
a = [
"append_mode"
"collapse_selection"
];
esc = [ esc = ["collapse_selection" "keep_primary_selection"];
"collapse_selection"
"keep_primary_selection"
];
};
insert = {
esc = [
"collapse_selection"
"normal_mode"
];
}; };
insert = {esc = ["collapse_selection" "normal_mode"];};
select = { select = {
space = { space = {
j = { j = {
@ -181,60 +118,28 @@ in
c = ":pipe jq -c"; c = ":pipe jq -c";
}; };
}; };
"{" = [ "{" = ["extend_to_line_bounds" "goto_prev_paragraph"];
"extend_to_line_bounds" "}" = ["extend_to_line_bounds" "goto_next_paragraph"];
"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 = [ D = ["extend_to_line_bounds" "delete_selection" "normal_mode"];
"extend_to_line_bounds" C = ["goto_line_start" "extend_to_line_bounds" "change_selection"];
"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 = [ tab = ["insert_mode" "collapse_selection"];
"insert_mode" C-a = ["append_mode" "collapse_selection"];
"collapse_selection"
];
C-a = [
"append_mode"
"collapse_selection"
];
k = [ k = ["extend_line_up" "extend_to_line_bounds"];
"extend_line_up" j = ["extend_line_down" "extend_to_line_bounds"];
"extend_to_line_bounds"
];
j = [
"extend_line_down"
"extend_to_line_bounds"
];
d = [ d = ["yank_main_selection_to_clipboard" "delete_selection"];
"yank_main_selection_to_clipboard" x = ["yank_main_selection_to_clipboard" "delete_selection"];
"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"
@ -251,11 +156,7 @@ in
p = "replace_selections_with_clipboard"; p = "replace_selections_with_clipboard";
P = "paste_clipboard_before"; P = "paste_clipboard_before";
esc = [ esc = ["collapse_selection" "keep_primary_selection" "normal_mode"];
"collapse_selection"
"keep_primary_selection"
"normal_mode"
];
}; };
}; };
}; };
@ -271,7 +172,7 @@ in
name = "lua"; name = "lua";
formatter = { formatter = {
command = "luafmt"; command = "luafmt";
args = [ "--stdin" ]; args = ["--stdin"];
}; };
} }
{ {
@ -279,10 +180,7 @@ in
auto-format = true; auto-format = true;
formatter = { formatter = {
command = "black"; command = "black";
args = [ args = ["--quiet" "-"];
"--quiet"
"-"
];
}; };
} }
{ {
@ -290,7 +188,7 @@ in
auto-format = true; auto-format = true;
formatter = { formatter = {
command = "alejandra"; command = "alejandra";
args = [ "-qq" ]; args = ["-qq"];
}; };
} }
{ {
@ -298,16 +196,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"];
}; };
} }
]; ];
@ -324,19 +222,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,29 +0,0 @@
{ pkgs, ... }:
{
programs.jujutsu = {
enable = true;
settings = {
user = {
name = "jolheiser";
email = "git@jolheiser.com";
};
ui = {
diff.tool = [
"${pkgs.difftastic}/bin/difft"
"--color=always"
"$left"
"$right"
];
editor = "hx";
paginate = "never";
default-command = "log";
};
git.push-bookmark-prefix = "change/";
signing = {
sign-all = true;
backend = "ssh";
key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAUxLwkJOlalAHTdkbh+m49XTZGKDqWz1o/o8OLmtQdX";
};
};
};
}

View File

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

View File

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

View File

@ -1,66 +0,0 @@
{ pkgs, lib, ... }:
let
claude =
let
inherit (pkgs) fetchFromGitHub nix-update-script python3Packages;
inherit (python3Packages)
buildPythonPackage
setuptools
anthropic
llm
pytestCheckHook
pytest
pytest-recording
;
in
buildPythonPackage rec {
pname = "llm-claude-3";
version = "0.4";
pyproject = true;
src = fetchFromGitHub {
owner = "simonw";
repo = "llm-claude-3";
rev = "refs/tags/${version}";
hash = "sha256-5qF5BK319PNzB4XsLdYvtyq/SxBDdHJ9IoKWEnvNRp4=";
};
build-system = [ setuptools ];
buildInputs = [ llm ];
dependencies = [ anthropic ];
optional-dependencies = {
test = [
pytest
pytest-recording
];
};
# Test suite requires network access to talk to Claude (duh).
nativeCheckInputs = [ pytestCheckHook ];
doCheck = false;
pythonImportsCheck = [ "llm_claude_3" ];
passthru.updateScript = nix-update-script { };
meta = {
description = "LLM plugin for interacting with the Claude 3 family of models";
homepage = "https://github.com/simonw/llm-claude-3";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ jkachmar ];
};
};
pyWithPackages = (
pkgs.python3.withPackages (py: [
py.llm
claude
])
);
in
{
home.packages = [
(pkgs.runCommand "llm" { } ''
mkdir -p $out/bin
ln -s ${pyWithPackages}/bin/llm $out/bin/llm
'')
];
}

View File

@ -1,5 +1,8 @@
{ pkgs, config, ... }:
{ {
pkgs,
config,
...
}: {
programs.nushell = { programs.nushell = {
enable = true; enable = true;
configFile.source = ./nushell/config.nu; configFile.source = ./nushell/config.nu;
@ -30,7 +33,7 @@
}; };
xdg.configFile = { xdg.configFile = {
"nushell/jolheiser.nu".source = ./nushell/jolheiser.nu; "nushell/jolheiser.nu".source = ./nushell/jolheiser.nu;
"nushell/ssh.nu".source = ./nushell/ssh.nu; "nushell/zoxide.nu".source = ./nushell/zoxide.nu;
"nushell/ohmyposh.nu".source = ./nushell/ohmyposh.nu; "nushell/ohmyposh.nu".source = ./nushell/ohmyposh.nu;
}; };
} }

View File

@ -393,39 +393,13 @@ $env.config = {
format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, zb, zib, auto format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, zb, zib, auto
} }
color_config: $dark_theme # if you want a light theme, replace `$dark_theme` to `$light_theme` color_config: $dark_theme # if you want a light theme, replace `$dark_theme` to `$light_theme`
footer_mode: 25 # always, never, number_of_rows, auto use_grid_icons: true
footer_mode: "25" # always, never, number_of_rows, auto
float_precision: 2 float_precision: 2
# buffer_editor: "emacs" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL # buffer_editor: "emacs" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL
use_ansi_coloring: true use_ansi_coloring: true
edit_mode: emacs # emacs, vi edit_mode: emacs # emacs, vi
shell_integration: { shell_integration: true # enables terminal markers and a workaround to arrow keys stop working issue
# osc2 abbreviates the path if in the home_dir, sets the tab/window title, shows the running command in the tab/window title
osc2: true
# osc7 is a way to communicate the path to the terminal, this is helpful for spawning new tabs in the same directory
osc7: true
# osc8 is also implemented as the deprecated setting ls.show_clickable_links, it shows clickable links in ls output if your terminal supports it. show_clickable_links is deprecated in favor of osc8
osc8: true
# osc9_9 is from ConEmu and is starting to get wider support. It's similar to osc7 in that it communicates the path to the terminal
osc9_9: false
# osc133 is several escapes invented by Final Term which include the supported ones below.
# 133;A - Mark prompt start
# 133;B - Mark prompt end
# 133;C - Mark pre-execution
# 133;D;exit - Mark execution finished with exit code
# This is used to enable terminals to know where the prompt is, the command is, where the command finishes, and where the output of the command is
osc133: true
# osc633 is closely related to osc133 but only exists in visual studio code (vscode) and supports their shell integration features
# 633;A - Mark prompt start
# 633;B - Mark prompt end
# 633;C - Mark pre-execution
# 633;D;exit - Mark execution finished with exit code
# 633;E - NOT IMPLEMENTED - Explicitly set the command line with an optional nonce
# 633;P;Cwd=<path> - Mark the current working directory and communicate it to the terminal
# and also helps with the run recent menu in vscode
osc633: true
# reset_application_mode is escape \x1b[?1l and was added to help ssh work better
reset_application_mode: true
}
show_banner: false # true or false to enable or disable the banner show_banner: false # true or false to enable or disable the banner
render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt. render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt.

View File

@ -69,36 +69,9 @@ def gomodsri [] {
echo 'nixpkgs.lib.fileContents ./go.mod.sri' echo 'nixpkgs.lib.fileContents ./go.mod.sri'
} }
def q [
--debug # Debug mode, only echo query
...args: string
] {
let input = $in
mut query = $args | str join ' '
if ($input | is-not-empty) {
$query = $"($query)\n\n($input)"
}
if ($debug) {
print $query
return
}
^llm -s "Answer in as few words as possible. Use a brief style with short replies." -m claude-3.5-sonnet $"($query)"
}
# Run a command if known, otherwise run it with nix
def , [
cmd: string # The command to run
...args: string # Command arguments; all flags MUST be quoted
] {
if (not (which $cmd | is-empty)) {
^$cmd ...$args
return
}
^nix run $"nixpkgs#($cmd)" -- ...$args
}
## Other ## ## Other ##
$env.EDITOR = 'hx' $env.EDITOR = hx
$env.SSH_AUTH_SOCK = '/run/user/1000/ssh-agent' $env.config = ($env.config | upsert "shell_integration" ("WEZTERM_PANE" not-in $env and "SSH_CLIENT" not-in $env))
source ~/.config/nushell/zoxide.nu
source ~/.config/nushell/ohmyposh.nu source ~/.config/nushell/ohmyposh.nu
source ~/.config/nushell/ssh.nu

View File

@ -1,89 +0,0 @@
export extern "ssh" [
destination?: string@"nu-complete ssh-host"
-4 # Forces ssh to use IPv4 addresses only.
-6 # Forces ssh to use IPv6 addresses only.
-A # Enables forwarding of connections from an authentication agent such as ssh-agent(1).
-a # Disables forwarding of the authentication agent connection.
-B: string # bind_interface
-b: string # bind_address
-C # Requests compression of all data
-c: string # cipher_spec
-D # [bind_address:]port
-E: string # log_file
-e # escape_char
-F: string # configfile
-f # Requests ssh to go to background just before command execution.
-G # Causes ssh to print its configuration after evaluating Host and Match blocks and exit.
-g # Allows remote hosts to connect to local forwarded ports
-I: string # pkcs11
-i: string@"nu-complete ssh-identity" # identity_file
-J: string # destination
-K # Enables GSSAPI-based authentication and forwarding(delegation) of GSSAPI credentials to the server.
-k # Disables forwarding (delegation) of GSSAPI credentials to the server.
-L: string # [bind_address:]port:host:hostport / [bind_address:]port:remote_socket / local_socket:host:hostport / local_socket:remote_socket
-l: string # login_name
-M # Places the ssh client into “master” mode for connection sharing.
-m: string # mac_spec
-N # Do not execute a remote command.
-n # Redirects stdin from /dev/null (5) for details.
-O: string # ctl_cmd
-o: string # option
]
def parse-host [file: string] {
let lines = $file | open | lines | str trim
mut result = []
for $line in $lines {
let data = $line | parse --regex '^Include\s+(?<file>.+)'
if ($data | is-not-empty) {
let include = parse-host ($data.file | first)
$result = ($result | append $include)
continue
}
let data = $line | parse --regex '^Host\s+(?<host>.+)'
if ($data | is-not-empty) {
let host = $data.host | first
if ($host == '*') {
continue
}
$result = ($result | append { 'value': $host, 'description': "" })
continue;
}
let data = $line | parse --regex '^HostName\s+(?<hostname>.+)'
if ($data | is-not-empty) {
let last = $result | last | update 'description' ($data.hostname | first)
$result = ($result | drop | append $last)
}
}
$result
}
def "nu-complete ssh-host" [] {
mut files = [
'/etc/ssh/ssh_config',
'~/.ssh/config'
] | filter { |file| $file | path exists }
$files | each { |file|
parse-host $file
} | flatten
}
def "nu-complete ssh-identity" [] {
ls ~/.ssh/
| where {|f|
($f.name | path parse | get extension) == "pub"
}
| get name
| path parse
| each {|p| {'value': $'~/.ssh/($p.stem)', 'description': $p.stem} }
}
export def ssh-add-all [] {
nu-complete ssh-identity
| each {|s| print $s.value; ^ssh-add ($s.value | path expand); print '' }
null
}

View File

@ -0,0 +1,60 @@
# Code generated by zoxide. DO NOT EDIT.
# =============================================================================
#
# Hook configuration for zoxide.
#
# Initialize hook to add new entries to the database.
if (not ($env | default false __zoxide_hooked | get __zoxide_hooked)) {
$env.__zoxide_hooked = true
$env.config = ($env | default {} config).config
$env.config = ($env.config | default {} hooks)
$env.config = ($env.config | update hooks ($env.config.hooks | default {} env_change))
$env.config = ($env.config | update hooks.env_change ($env.config.hooks.env_change | default [] PWD))
$env.config = ($env.config | update hooks.env_change.PWD ($env.config.hooks.env_change.PWD | append {|_, dir|
zoxide add -- $dir
}))
}
# =============================================================================
#
# When using zoxide with --no-cmd, alias these internal functions as desired.
#
# Jump to a directory using only keywords.
def --env __zoxide_z [...rest:string] {
let arg0 = ($rest | append '~').0
let path = if (($rest | length) <= 1) and ($arg0 == '-' or ($arg0 | path expand | path type) == dir) {
$arg0
} else {
(zoxide query --exclude $env.PWD -- $rest | str trim -r -c "\n")
}
cd $path
}
# Jump to a directory using interactive search.
def --env __zoxide_zi [...rest:string] {
cd $'(zoxide query --interactive -- $rest | str trim -r -c "\n")'
}
# =============================================================================
#
# Commands for zoxide. Disable these using --no-cmd.
#
alias z = __zoxide_z
alias zi = __zoxide_zi
# =============================================================================
#
# Add this to your env file (find it by running `$nu.env-path` in Nushell):
#
# zoxide init nushell | save -f ~/.zoxide.nu
#
# Now, add this to the end of your config file (find it by running
# `$nu.config-path` in Nushell):
#
# source ~/.zoxide.nu
#
# Note: zoxide only supports Nushell v0.73.0 and above.

View File

@ -1,152 +1,8 @@
{ pkgs, ... }:
let
unicode = x: builtins.fromJSON ''"${x}"'';
script = pkgs.writeShellApplication {
name = "jj-prompt";
runtimeInputs = [ pkgs.jujutsu ];
text =
let
bookmarkMax = 10;
tagMax = 10;
descriptionMax = 24;
in
''
jj log -r@ -n1 --ignore-working-copy --no-graph --color never -T '
separate(" ",
bookmarks.map(|x| if(
x.name().substr(0, ${builtins.toString bookmarkMax}).starts_with(x.name()),
"󰃀 " ++ x.name().substr(0, ${builtins.toString bookmarkMax}),
"󰃀 " ++ x.name().substr(0, ${builtins.toString (bookmarkMax - 1)}) ++ "")
).join(" "),
tags.map(|x| if(
x.name().substr(0, ${builtins.toString tagMax}).starts_with(x.name()),
"󰓹 " ++ x.name().substr(0, ${builtins.toString tagMax}),
"󰓹 " ++ x.name().substr(0, ${builtins.toString (tagMax - 1)}) ++ "")
).join(" "),
if(
description.first_line().substr(0, ${builtins.toString descriptionMax}).starts_with(description.first_line()),
"󰍡 " ++ description.first_line().substr(0, ${builtins.toString descriptionMax}),
"󰍡 " ++ description.first_line().substr(0, ${
builtins.toString (descriptionMax - 1)
}) ++ ""
),
"",
change_id.shortest(),
commit_id.shortest(),
if(empty, "(empty)"),
if(conflict, "(conflict)"),
if(divergent, "(divergent)"),
if(hidden, "(hidden)"),
)
'
'';
};
in
{ {
programs.oh-my-posh = { programs.oh-my-posh = {
enable = true; enable = true;
settings = { settings =
"$schema" = "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json"; builtins.fromJSON (builtins.unsafeDiscardStringContext
blocks = [ (builtins.readFile ./ohmyposh/config.json));
{
alignment = "left";
segments = [
{
background = "p:lavender";
foreground = "p:black";
leading_diamond = unicode "\\ue0b6";
properties = {
display_host = false;
};
style = "diamond";
template = " {{ if .SSHSession }}${unicode "\\udb80\\udf18"} {{ end }}{{ if .Env.IN_NIX_SHELL }}${unicode "\\udb84\\udd05"} {{ end }}{{ .UserName }}@{{ .HostName }} ";
trailing_diamond = unicode "\\ue0b0";
type = "session";
}
{
background = "p:orange";
foreground = "p:black";
powerline_symbol = unicode "\\ue0b0";
properties = {
home_icon = "~";
style = "folder";
};
style = "powerline";
template = " ${unicode "\\ue613"} {{ path .Path .Location }} ";
type = "path";
}
{
background = "p:green";
background_templates = [
"{{ if or (.Working.Changed) (.Staging.Changed) }}p:yellow{{ end }}"
"{{ if and (gt .Ahead 0) (gt .Behind 0) }}p:red{{ end }}"
"{{ if gt .Ahead 0 }}#49416D{{ end }}"
"{{ if gt .Behind 0 }}#7A306C{{ end }}"
];
foreground = "p:black";
foreground_templates = [
"{{ if or (.Working.Changed) (.Staging.Changed) }}p:black{{ end }}"
"{{ if and (gt .Ahead 0) (gt .Behind 0) }}p:white{{ end }}"
"{{ if gt .Ahead 0 }}p:white{{ end }}"
];
powerline_symbol = unicode "\\ue0b0";
properties = {
branch_max_length = 25;
fetch_status = true;
fetch_upstream_icon = true;
git_icon = unicode "\\ue702";
github_icon = unicode "\\uf408";
upstream_icons = {
"codeberg.org" = unicode "\\ue2a6";
"git.jojodev.com" = unicode "\\udb83\\udd9e";
"gitea.com" = unicode "\\udb83\\udd9e";
};
};
style = "powerline";
template = "{{ if not (glob \".jj\")}} {{ if .UpstreamURL }}{{ url .UpstreamIcon .UpstreamURL }} {{ end }}{{ .HEAD }}{{if .BranchStatus }} {{ .BranchStatus }}{{ end }}{{ if .Working.Changed }} ${unicode "\\uf044"} {{ .Working.String }}{{ end }}{{ if .Staging.Changed }} ${unicode "\\uf046"} {{ .Staging.String }}{{ end }} {{ end }}";
type = "git";
}
{
background = "p:green";
foreground = "p:black";
powerline_symbol = unicode "\\ue0b0";
properties = {
script = "${script}/bin/jj-prompt";
};
style = "powerline";
template = "{{ if (glob \".jj\")}} {{ .Output }} {{ end }}";
type = "command";
}
{
background = "p:blue";
background_templates = [ "{{ if gt .Code 0 }}p:red{{ end }}" ];
foreground = "p:black";
leading_diamond = "<transparent,background>${unicode "\\ue0b0"}</>";
properties = {
always_enabled = true;
};
style = "diamond";
template = " {{ if gt .Code 0 }}${unicode "\\uf00d"}{{ else }}${unicode "\\uf00c"}{{ end }} ";
trailing_diamond = unicode "\\ue0b4";
type = "exit";
}
];
type = "prompt";
}
];
console_title_template = "{{ .Folder }}";
final_space = true;
palette = {
black = "#1E1E1E";
blue = "#89B4FA";
green = "#A6E3A1";
lavender = "#B4BEFE";
orange = "#FAB387";
red = "#F38BA8";
white = "#CDD6F4";
yellow = "#F9E2AF";
};
version = 2;
};
}; };
} }

View File

@ -0,0 +1,95 @@
{
"$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
"blocks": [
{
"alignment": "left",
"segments": [
{
"background": "p:lavender",
"foreground": "p:black",
"leading_diamond": "\ue0b6",
"properties": {
"display_host": false
},
"style": "diamond",
"template": " {{ if .SSHSession }}\udb80\udf18 {{ end }}{{ if .Env.IN_NIX_SHELL }}\udb84\udd05 {{ end }}{{ .UserName }}@{{ .HostName }} ",
"trailing_diamond": "\ue0b0",
"type": "session"
},
{
"background": "p:orange",
"foreground": "p:black",
"powerline_symbol": "\ue0b0",
"properties": {
"home_icon": "~",
"style": "folder"
},
"style": "powerline",
"template": " \ue613 {{ path .Path .Location }} ",
"type": "path"
},
{
"background": "p:green",
"background_templates": [
"{{ if or (.Working.Changed) (.Staging.Changed) }}p:yellow{{ end }}",
"{{ if and (gt .Ahead 0) (gt .Behind 0) }}p:red{{ end }}",
"{{ if gt .Ahead 0 }}#49416D{{ end }}",
"{{ if gt .Behind 0 }}#7A306C{{ end }}"
],
"foreground": "p:black",
"foreground_templates": [
"{{ if or (.Working.Changed) (.Staging.Changed) }}p:black{{ end }}",
"{{ if and (gt .Ahead 0) (gt .Behind 0) }}p:white{{ end }}",
"{{ if gt .Ahead 0 }}p:white{{ end }}"
],
"powerline_symbol": "\ue0b0",
"properties": {
"branch_max_length": 25,
"fetch_status": true,
"fetch_upstream_icon": true,
"github_icon": "\uf408",
"git_icon": "\ue702",
"upstream_icons": {
"gitea.com": "\udb83\udd9e",
"git.jojodev.com": "\udb83\udd9e",
"codeberg.org": "\ue2a6"
}
},
"style": "powerline",
"template": " {{ if .UpstreamURL }}{{ url .UpstreamIcon .UpstreamURL }} {{ end }}{{ .HEAD }}{{if .BranchStatus }} {{ .BranchStatus }}{{ end }}{{ if .Working.Changed }} \uf044 {{ .Working.String }}{{ end }}{{ if .Staging.Changed }} \uf046 {{ .Staging.String }}{{ end }} ",
"type": "git"
},
{
"background": "p:blue",
"background_templates": [
"{{ if gt .Code 0 }}p:red{{ end }}"
],
"foreground": "p:black",
"leading_diamond": "<transparent,background>\ue0b0</>",
"properties": {
"always_enabled": true
},
"style": "diamond",
"template": " {{ if gt .Code 0 }}\uf00d{{ else }}\uf00c{{ end }} ",
"trailing_diamond": "\ue0b4",
"type": "exit"
}
],
"type": "prompt"
}
],
"console_title_template": "{{ .Folder }}",
"final_space": true,
"palette": {
"black": "#1E1E1E",
"blue": "#89B4FA",
"green": "#A6E3A1",
"orange": "#FAB387",
"red": "#F38BA8",
"white": "#CDD6F4",
"yellow": "#F9E2AF",
"lavender": "#B4BEFE"
},
"version": 2
}

View File

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

View File

@ -1,8 +1,9 @@
{ config, ... }:
{ {
programs.ssh = { programs.ssh = {
enable = true; enable = true;
includes = [ config.age.secrets.ssh-config.path ]; includes = [
"/run/agenix/ssh-config"
"/run/agenix/ssh-config-work"
];
}; };
services.ssh-agent.enable = true;
} }

View File

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

View File

@ -1,5 +1,7 @@
{ {
programs.zoxide = { programs.zoxide = {
enable = true; enable = true;
# TODO remove once zoxide is updated for new nushell def --env syntax
enableNushellIntegration = false;
}; };
} }

View File

@ -1,40 +1,19 @@
{ {
"nodes": { "nodes": {
"actual": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1728580104,
"narHash": "sha256-M+t/DmOj4cjF7/M9qBW5OK/Lam69z4LX+hXraqegz0w=",
"ref": "refs/heads/main",
"rev": "befcf0b6e2b9540f01b5caaafcbe62fcf36a063a",
"revCount": 16,
"type": "git",
"url": "https://git.xeno.science/xenofem/actual-nix.git"
},
"original": {
"type": "git",
"url": "https://git.xeno.science/xenofem/actual-nix.git"
}
},
"agenix": { "agenix": {
"inputs": { "inputs": {
"darwin": [], "darwin": [],
"home-manager": [], "home-manager": [],
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ]
"systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1723293904, "lastModified": 1701216516,
"narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=", "narHash": "sha256-jKSeJn+7hZ1dZdiH1L+NWUGT2i/BGomKAJ54B9kT06Q=",
"owner": "ryantm", "owner": "ryantm",
"repo": "agenix", "repo": "agenix",
"rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41", "rev": "13ac9ac6d68b9a0896e3d43a082947233189e247",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -43,128 +22,25 @@
"type": "github" "type": "github"
} }
}, },
"bennet": { "flake-compat": {
"inputs": { "flake": false,
"nixpkgs": [
"nixpkgs"
]
},
"locked": { "locked": {
"lastModified": 1720757073, "lastModified": 1696426674,
"narHash": "sha256-URQMDzLPs5kckDybkMqrKZN2aqt0GvAt9V5NT4kpMW8=", "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"ref": "refs/heads/main", "owner": "edolstra",
"rev": "bd7287aa0d13d5af400f659963655c004789715f", "repo": "flake-compat",
"revCount": 4, "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "git", "type": "github"
"url": "https://git.jolheiser.com/bennet.git"
}, },
"original": { "original": {
"type": "git", "owner": "edolstra",
"url": "https://git.jolheiser.com/bennet.git" "repo": "flake-compat",
} "type": "github"
},
"blog": {
"inputs": {
"nixpkgs": [
"nixpkgs"
],
"templ": [
"templ"
]
},
"locked": {
"lastModified": 1728680363,
"narHash": "sha256-0aJJUY0lKcDnkqLBESOFju8cgIYYrt8jvMwyFTii2Do=",
"ref": "refs/heads/main",
"rev": "03a7f37a42affd2689a72340b8d86731bfd3d28c",
"revCount": 26,
"type": "git",
"url": "https://git.jolheiser.com/blog.git"
},
"original": {
"type": "git",
"url": "https://git.jolheiser.com/blog.git"
}
},
"cfg": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1721703140,
"narHash": "sha256-SxxJm6b8xrlp3+ucPc65XrMgm42ITi1ULg7Wk9YwA5w=",
"ref": "refs/heads/main",
"rev": "5edec76b62d532dbb0e67a427b43377277660ad2",
"revCount": 9,
"type": "git",
"url": "https://git.jolheiser.com/cfg.git"
},
"original": {
"type": "git",
"url": "https://git.jolheiser.com/cfg.git"
}
},
"cfg-playground": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1729196682,
"narHash": "sha256-hLbpRWxw12/mqapicSSq1wxvNFfEKwEiXhzykpXWUDI=",
"ref": "refs/heads/main",
"rev": "63c7a6886570f332ebb187e5a5580302603b4c4e",
"revCount": 6,
"type": "git",
"url": "https://git.jolheiser.com/cfg-playground.git"
},
"original": {
"type": "git",
"url": "https://git.jolheiser.com/cfg-playground.git"
} }
}, },
"flake-utils": { "flake-utils": {
"inputs": { "inputs": {
"systems": "systems_2" "systems": "systems"
},
"locked": {
"lastModified": 1726560853,
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"inputs": {
"systems": "systems_3"
},
"locked": {
"lastModified": 1705309234,
"narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_3": {
"inputs": {
"systems": "systems_4"
}, },
"locked": { "locked": {
"lastModified": 1694529238, "lastModified": 1694529238,
@ -180,7 +56,7 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_4": { "flake-utils_2": {
"locked": { "locked": {
"lastModified": 1667395993, "lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
@ -195,44 +71,6 @@
"type": "github" "type": "github"
} }
}, },
"foundry": {
"inputs": {
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1726638033,
"narHash": "sha256-+hcgXKG5t/9wibv+8T9WASWItBAWb0tsmcZXH+VIYdw=",
"owner": "reckenrode",
"repo": "nix-foundryvtt",
"rev": "bf07f9dd916a97a091f8ab83358c2f295bea9ec9",
"type": "github"
},
"original": {
"owner": "reckenrode",
"repo": "nix-foundryvtt",
"type": "github"
}
},
"ghostty": {
"inputs": {
"nixpkgs-stable": "nixpkgs-stable",
"nixpkgs-unstable": "nixpkgs-unstable",
"zig": "zig"
},
"locked": {
"lastModified": 1728604055,
"narHash": "sha256-qFzvnwoWhGob+Huh3RlCxC+j16uF0LQKKV4dJxY4nDQ=",
"ref": "refs/heads/main",
"rev": "c26d1cb28eb5491e05ccbcff075a0eedd09ebaaa",
"revCount": 7679,
"type": "git",
"url": "ssh://git@github.com/ghostty-org/ghostty"
},
"original": {
"type": "git",
"url": "ssh://git@github.com/ghostty-org/ghostty"
}
},
"gist": { "gist": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -276,26 +114,6 @@
"url": "https://git.jolheiser.com/git-age.git" "url": "https://git.jolheiser.com/git-age.git"
} }
}, },
"git-pr": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1724120640,
"narHash": "sha256-LLWEHAraOLKFYZ2zbR3O+AhC2PCUNsXP1xcGoDj80xs=",
"ref": "refs/heads/main",
"rev": "6a3bca9ad87b454427940c82f3d111f2eb2c256e",
"revCount": 10,
"type": "git",
"url": "https://git.jolheiser.com/git-pr-nix.git"
},
"original": {
"type": "git",
"url": "https://git.jolheiser.com/git-pr-nix.git"
}
},
"gitignore": { "gitignore": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -304,11 +122,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1709087332, "lastModified": 1694102001,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", "narHash": "sha256-vky6VPK1n1od6vXbqzOXnekrQpTL4hbPAwUhT5J9c9E=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "gitignore.nix", "repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394", "rev": "9e21c80adf67ebcb077d75bd5e7d724d21eeafd6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -327,11 +145,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1726797346, "lastModified": 1700065600,
"narHash": "sha256-Sj9WrvoV+U1YSYriUD/M+Q5tmQDGbJDXsqrFzqKTPc4=", "narHash": "sha256-w/Dfwe7ejbIQgRmpT/B54dUH0urxX9S1lFxr0OFhJpY=",
"owner": "tailscale", "owner": "tailscale",
"repo": "golink", "repo": "golink",
"rev": "b3ab9a617620fb9be7b589ae3fee5f12e8b205a7", "rev": "c9212a47dee502e850c5fb36d8ac5fdfdb30ac6c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -352,11 +170,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1725515722, "lastModified": 1694616124,
"narHash": "sha256-+gljgHaflZhQXtr3WjJrGn8NXv7MruVPAORSufuCFnw=", "narHash": "sha256-c49BVhQKw3XDRgt+y+uPAbArtgUlMXCET6VxEBmzHXE=",
"owner": "tweag", "owner": "tweag",
"repo": "gomod2nix", "repo": "gomod2nix",
"rev": "1c6fd4e862bf2f249c9114ad625c64c6c29a8a08", "rev": "f95720e89af6165c8c0aa77f180461fe786f3c21",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -365,28 +183,6 @@
"type": "github" "type": "github"
} }
}, },
"gomod2nix_2": {
"inputs": {
"flake-utils": "flake-utils_3",
"nixpkgs": [
"templ",
"nixpkgs"
]
},
"locked": {
"lastModified": 1722589758,
"narHash": "sha256-sbbA8b6Q2vB/t/r1znHawoXLysCyD4L/6n6/RykiSnA=",
"owner": "nix-community",
"repo": "gomod2nix",
"rev": "4e08ca09253ef996bd4c03afa383b23e35fe28a1",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "gomod2nix",
"type": "github"
}
},
"gomodinit": { "gomodinit": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -394,11 +190,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1709873986, "lastModified": 1703207093,
"narHash": "sha256-58zWfVOlqDLXy2BI/o/cnyhtEsdRfA4CGxstPgG2xPQ=", "narHash": "sha256-rP9yqEogOJvro4GLysAOx7jgWL4TU0mydRCgK13spkw=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "14884cafd8d4267777b40a3c13e3973ec9a81cf2", "rev": "6686d6491326ec79522d262ea150602d6bcb6c7a",
"revCount": 9, "revCount": 5,
"type": "git", "type": "git",
"url": "https://git.jolheiser.com/gomodinit.git" "url": "https://git.jolheiser.com/gomodinit.git"
}, },
@ -410,16 +206,15 @@
"helix": { "helix": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"jolheiser",
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1727295896, "lastModified": 1699390779,
"narHash": "sha256-zubPN05Q3w01HAnPvYdPQOd7nvtPZSYwHWv9f755eIE=", "narHash": "sha256-KOeRnuJm+iUpY16+ahJeePw0Bwxov7bZYwOOgNgZmOs=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "a6f4760ef56ffb5f8d39d322c7b0b6f1eeb97f02", "rev": "20a5d8a2ee8a8f5b6a8d0212a2eb5c9fb623750c",
"revCount": 21, "revCount": 12,
"type": "git", "type": "git",
"url": "https://git.jolheiser.com/helix.drv.git" "url": "https://git.jolheiser.com/helix.drv.git"
}, },
@ -435,11 +230,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1728650932, "lastModified": 1701433070,
"narHash": "sha256-mGKzqdsRyLnGNl6WjEr7+sghGgBtYHhJQ4mjpgRTCsU=", "narHash": "sha256-Gf9JStfENaUQ7YWFz3V7x/srIwr4nlnVteqaAxtwpgM=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "65ae9c147349829d3df0222151f53f79821c5134", "rev": "4a8545f5e737a6338814a4676dc8e18c7f43fc57",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -448,31 +243,33 @@
"type": "github" "type": "github"
} }
}, },
"jolheiser": { "jolheiser-nur": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs_2" "nixpkgs": [
"nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1730336659, "lastModified": 1700580516,
"narHash": "sha256-DYQUprBce8sXdBj7Ub1h/52GnGvxiXelvucVTcTXE8I=", "narHash": "sha256-h72i6afGKreU+DjpZ6+qersarYYp4YjX+DBQ+MQkOG4=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "69856a465c69e5b456ef652f0f5f17a12b9d8c02", "rev": "a68a81cbc743e84aaee331ae7e58699398dd732d",
"revCount": 3, "revCount": 167,
"type": "git", "type": "git",
"url": "https://git.jolheiser.com/nixpkgs.git" "url": "https://git.jolheiser.com/nur.git"
}, },
"original": { "original": {
"type": "git", "type": "git",
"url": "https://git.jolheiser.com/nixpkgs.git" "url": "https://git.jolheiser.com/nur.git"
} }
}, },
"nixos-hardware": { "nixos-hardware": {
"locked": { "locked": {
"lastModified": 1728269138, "lastModified": 1709410583,
"narHash": "sha256-oKxDImsOvgUZMY4NwXVyUc/c1HiU2qInX+b5BU0yXls=", "narHash": "sha256-esOSUoQ7mblwcsSea0K17McZuwAIjoS6dq/4b83+lvw=",
"owner": "nixos", "owner": "nixos",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "ecfcd787f373f43307d764762e139a7cdeb9c22b", "rev": "59e37017b9ed31dee303dbbd4531c594df95cfbc",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -484,43 +281,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1726447378, "lastModified": 1706925685,
"narHash": "sha256-2yV8nmYE1p9lfmLHhOCbYwQC/W8WYfGQABoGzJOb1JQ=", "narHash": "sha256-hVInjWMmgH4yZgA4ZtbgJM1qEAel72SYhP5nOWX4UIM=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "086b448a5d54fd117f4dc2dee55c9f0ff461bdc1", "rev": "79a13f1437e149dc7be2d1290c74d378dad60814",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-24.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1726062281,
"narHash": "sha256-PyFVySdGj3enKqm8RQuo4v1KLJLmNLOq2yYOHsI6e2Q=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "e65aa8301ba4f0ab8cb98f944c14aa9da07394f8",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "release-24.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1719082008,
"narHash": "sha256-jHJSUH619zBQ6WdC21fFAlDxHErKVDJ5fpN0Hgx4sjs=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "9693852a2070b398ee123a329e68f0dab5526681",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -530,60 +295,29 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_2": { "nixpkgs-py39": {
"locked": { "locked": {
"lastModified": 1729880355, "lastModified": 1681648924,
"narHash": "sha256-RP+OQ6koQQLX5nw0NmcDrzvGL8HDLnyXt/jHhL1jwjM=", "narHash": "sha256-pzi3HISK8+7mpEtv08Yr80wswyHKsz+RP1CROG1Qf6s=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "18536bf04cd71abd345f9579158841376fdd0c5a", "rev": "f294325aed382b66c7a188482101b0f336d1d7db",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nixos", "owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "f294325aed382b66c7a188482101b0f336d1d7db",
"type": "github" "type": "github"
} }
}, },
"nixpkgs_3": {
"locked": {
"lastModified": 1728492678,
"narHash": "sha256-9UTxR8eukdg+XZeHgxW5hQA9fIKHsKCdOIUycTryeVw=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "5633bcff0c6162b9e4b5f1264264611e950c8ec7",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1725432240,
"narHash": "sha256-+yj+xgsfZaErbfYM3T+QvEE2hU7UuE+Jf0fJCJ8uPS0=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ad416d066ca1222956472ab7d0555a6946746a80",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "nixos-unstable",
"type": "indirect"
}
},
"nur": { "nur": {
"locked": { "locked": {
"lastModified": 1728665070, "lastModified": 1701441860,
"narHash": "sha256-H2uIcBP5cKgXKBS9XA1xLl8bKSxtHidonaw6aepddqI=", "narHash": "sha256-1jbuWl7DCk/+1l8ffYf8c01J6R5FryZSVqWobSfPQ5I=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NUR", "repo": "NUR",
"rev": "7bdbe27588a3338324806750628048d2e5f68f35", "rev": "f6744687a0393402ec5faada9e53a02901fe069f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -617,54 +351,26 @@
}, },
"root": { "root": {
"inputs": { "inputs": {
"actual": "actual",
"agenix": "agenix", "agenix": "agenix",
"bennet": "bennet",
"blog": "blog",
"cfg": "cfg",
"cfg-playground": "cfg-playground",
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
"foundry": "foundry",
"ghostty": "ghostty",
"gist": "gist", "gist": "gist",
"git-age": "git-age", "git-age": "git-age",
"git-pr": "git-pr",
"golink": "golink", "golink": "golink",
"gomodinit": "gomodinit", "gomodinit": "gomodinit",
"helix": "helix", "helix": "helix",
"home-manager": "home-manager", "home-manager": "home-manager",
"jolheiser": "jolheiser", "jolheiser-nur": "jolheiser-nur",
"nixos-hardware": "nixos-hardware", "nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_3", "nixpkgs": "nixpkgs",
"nixpkgs-py39": "nixpkgs-py39",
"nur": "nur", "nur": "nur",
"resume": "resume", "resume": "resume",
"spectre": "spectre",
"tailproxy": "tailproxy",
"tclip": "tclip", "tclip": "tclip",
"templ": "templ", "templ": "templ",
"tmpl": "tmpl", "tmpl": "tmpl",
"ugit": "ugit", "ugit": "ugit",
"website": "website" "website": "website",
} "wsl": "wsl"
},
"spectre": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1727210642,
"narHash": "sha256-UI6zfBKJQH8zEp0xNjNH0udP+qPzOMrlARryDHvw6PE=",
"ref": "refs/heads/main",
"rev": "4ecbdcf5a4a6e38621fdab234c61a9947d5a51c0",
"revCount": 19,
"type": "git",
"url": "https://git.jolheiser.com/go-spectre.git"
},
"original": {
"type": "git",
"url": "https://git.jolheiser.com/go-spectre.git"
} }
}, },
"systems": { "systems": {
@ -682,71 +388,6 @@
"type": "github" "type": "github"
} }
}, },
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_4": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"tailproxy": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1729968274,
"narHash": "sha256-YmGgnwar4mGwK3+TRO3W7wvFHcIZ21JEm95PRroJpzQ=",
"ref": "refs/heads/main",
"rev": "a7b8073ad6a2eaf931415b41156e0bba9e51fc76",
"revCount": 9,
"type": "git",
"url": "https://git.jolheiser.com/tailproxy.git"
},
"original": {
"type": "git",
"url": "https://git.jolheiser.com/tailproxy.git"
}
},
"tailwind-ctp": { "tailwind-ctp": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -761,11 +402,11 @@
"rev": "afca060674b20e0ccecde2d6fe88c887790219a5", "rev": "afca060674b20e0ccecde2d6fe88c887790219a5",
"revCount": 1, "revCount": 1,
"type": "git", "type": "git",
"url": "https://git.jolheiser.com/tailwind-ctp" "url": "https://git.jojodev.com/jolheiser/tailwind-ctp"
}, },
"original": { "original": {
"type": "git", "type": "git",
"url": "https://git.jolheiser.com/tailwind-ctp" "url": "https://git.jojodev.com/jolheiser/tailwind-ctp"
} }
}, },
"tailwind-ctp-lsp": { "tailwind-ctp-lsp": {
@ -782,11 +423,11 @@
"rev": "b321333ad08bf21db242f246b10ad4a50b8fc8a0", "rev": "b321333ad08bf21db242f246b10ad4a50b8fc8a0",
"revCount": 848, "revCount": 848,
"type": "git", "type": "git",
"url": "https://git.jolheiser.com/tailwind-ctp-intellisense" "url": "https://git.jojodev.com/jolheiser/tailwind-ctp-intellisense"
}, },
"original": { "original": {
"type": "git", "type": "git",
"url": "https://git.jolheiser.com/tailwind-ctp-intellisense" "url": "https://git.jojodev.com/jolheiser/tailwind-ctp-intellisense"
} }
}, },
"tailwind-ctp-lsp_2": { "tailwind-ctp-lsp_2": {
@ -834,17 +475,19 @@
"tclip": { "tclip": {
"inputs": { "inputs": {
"gomod2nix": "gomod2nix", "gomod2nix": "gomod2nix",
"nixpkgs": "nixpkgs_4", "nixpkgs": [
"nixpkgs"
],
"utils": [ "utils": [
"flake-utils" "flake-utils"
] ]
}, },
"locked": { "locked": {
"lastModified": 1725658965, "lastModified": 1695233959,
"narHash": "sha256-Ro6LEvG4cC27UXJSMXxv1a9pe41BefQxB7bbCAD8C9Q=", "narHash": "sha256-5H0Bz6m6aw0Nt4fV7QkU9gIZUS0Jo/Vkqk6pTk1mkBk=",
"owner": "tailscale-dev", "owner": "tailscale-dev",
"repo": "tclip", "repo": "tclip",
"rev": "a0cf1c78e1014df1b36dc158e4c9019af9d0856e", "rev": "99fc19f91adb0e095189e7ba2771269696386ed2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -856,18 +499,17 @@
"templ": { "templ": {
"inputs": { "inputs": {
"gitignore": "gitignore", "gitignore": "gitignore",
"gomod2nix": "gomod2nix_2",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ],
"xc": "xc" "xc": "xc"
}, },
"locked": { "locked": {
"lastModified": 1728028863, "lastModified": 1702159064,
"narHash": "sha256-NEkcOnjMN+fI9/Lejy6As3/Cd0rxqU4c4Dwt7OYiiLM=", "narHash": "sha256-9tyQOybmptmDhIfQcuZ8Vq8l3fMLdZfGPw+tjJbWzeQ=",
"owner": "a-h", "owner": "a-h",
"repo": "templ", "repo": "templ",
"rev": "318249d145b66fe1d66e34abf2321c86e1dfbc52", "rev": "ddb1610a81627f5c9c524bb66877477f401e4ecd",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -905,11 +547,11 @@
"tailwind-ctp-lsp": "tailwind-ctp-lsp" "tailwind-ctp-lsp": "tailwind-ctp-lsp"
}, },
"locked": { "locked": {
"lastModified": 1729617923, "lastModified": 1709863186,
"narHash": "sha256-sMxbCVrHKMMZO5Rku8EL9lFGbnrwsCu6tO3Rr26a5tk=", "narHash": "sha256-Qba14UPPIWl95R+QSHJaxvAhL7Uo9LfO3kHovePcrPM=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "3a4e09a218dde7b4161a0b83276a73149e105d3f", "rev": "2615593c2f59ab25cb74d65d968a33cbc834e9c5",
"revCount": 65, "revCount": 29,
"type": "git", "type": "git",
"url": "https://git.jolheiser.com/ugit.git" "url": "https://git.jolheiser.com/ugit.git"
}, },
@ -933,11 +575,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1728680776, "lastModified": 1710037782,
"narHash": "sha256-wuEYMsYJaaMN21EsPHtoctWruyslXMk1D/fz84VXFgU=", "narHash": "sha256-hVSwPIDX5aQzH/vVMdV/xR0tvKdKHRJPQCp808nW61I=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "7aa973a819b1aa151d5ccb9f7b23d96431d2e2a0", "rev": "472a3ee037da8edccfa50b668de4011eef14f000",
"revCount": 15, "revCount": 14,
"type": "git", "type": "git",
"url": "https://git.jolheiser.com/jolheiser.com.git" "url": "https://git.jolheiser.com/jolheiser.com.git"
}, },
@ -946,20 +588,44 @@
"url": "https://git.jolheiser.com/jolheiser.com.git" "url": "https://git.jolheiser.com/jolheiser.com.git"
} }
}, },
"wsl": {
"inputs": {
"flake-compat": "flake-compat",
"flake-utils": [
"flake-utils"
],
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1703521177,
"narHash": "sha256-V95s2ypDpdaFGbeG3pvazEE7qdjwZknoauv89DJQvz0=",
"owner": "nix-community",
"repo": "NixOS-WSL",
"rev": "ec53b11f0c78572a2b0b5263ae1c46293daaf55f",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "NixOS-WSL",
"type": "github"
}
},
"xc": { "xc": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_4", "flake-utils": "flake-utils_2",
"nixpkgs": [ "nixpkgs": [
"templ", "templ",
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1724404748, "lastModified": 1696495449,
"narHash": "sha256-p6rXzNiDm2uBvO1MLzC5pJp/0zRNzj/snBzZI0ce62s=", "narHash": "sha256-dthZiJ2FX/eIC0l1mdfefJZXDTVLfwp7L7Arq5rsCWA=",
"owner": "joerdav", "owner": "joerdav",
"repo": "xc", "repo": "xc",
"rev": "960ff9f109d47a19122cfb015721a76e3a0f23a2", "rev": "c8baab14d679fb276f11c576607010283be21220",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -967,31 +633,6 @@
"repo": "xc", "repo": "xc",
"type": "github" "type": "github"
} }
},
"zig": {
"inputs": {
"flake-compat": [
"ghostty"
],
"flake-utils": "flake-utils_2",
"nixpkgs": [
"ghostty",
"nixpkgs-stable"
]
},
"locked": {
"lastModified": 1717848532,
"narHash": "sha256-d+xIUvSTreHl8pAmU1fnmkfDTGQYCn2Rb/zOwByxS2M=",
"owner": "mitchellh",
"repo": "zig-overlay",
"rev": "02fc5cc555fc14fda40c42d7c3250efa43812b43",
"type": "github"
},
"original": {
"owner": "mitchellh",
"repo": "zig-overlay",
"type": "github"
}
} }
}, },
"root": "root", "root": "root",

242
flake.nix
View File

@ -2,9 +2,8 @@
description = "jolheiser's nixos config"; description = "jolheiser's nixos config";
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
jolheiser.url = "git+https://git.jolheiser.com/nixpkgs.git"; nixpkgs-py39.url = "github:nixos/nixpkgs/f294325aed382b66c7a188482101b0f336d1d7db";
flake-utils.url = "github:numtide/flake-utils"; # Only expressed here to use for followers
home-manager = { home-manager = {
url = "github:nix-community/home-manager"; url = "github:nix-community/home-manager";
@ -18,11 +17,17 @@
home-manager.follows = ""; home-manager.follows = "";
}; };
}; };
flake-utils.url = "github:numtide/flake-utils";
nixos-hardware.url = "github:nixos/nixos-hardware/master"; nixos-hardware.url = "github:nixos/nixos-hardware/master";
nur.url = "github:nix-community/NUR"; nur.url = "github:nix-community/NUR";
jolheiser-nur = {
url = "git+https://git.jolheiser.com/nur.git";
inputs.nixpkgs.follows = "nixpkgs";
};
helix = { helix = {
url = "git+https://git.jolheiser.com/helix.drv.git"; url = "git+https://git.jolheiser.com/helix.drv.git";
inputs.nixpkgs.follows = "jolheiser/nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
website = { website = {
url = "git+https://git.jolheiser.com/jolheiser.com.git"; url = "git+https://git.jolheiser.com/jolheiser.com.git";
@ -39,17 +44,6 @@
flake-utils.follows = "flake-utils"; flake-utils.follows = "flake-utils";
}; };
}; };
blog = {
url = "git+https://git.jolheiser.com/blog.git";
inputs = {
nixpkgs.follows = "nixpkgs";
templ.follows = "templ";
};
};
bennet = {
url = "git+https://git.jolheiser.com/bennet.git";
inputs.nixpkgs.follows = "nixpkgs";
};
git-age = { git-age = {
url = "git+https://git.jolheiser.com/git-age.git"; url = "git+https://git.jolheiser.com/git-age.git";
inputs = { inputs = {
@ -69,26 +63,10 @@
url = "git+https://git.jolheiser.com/gomodinit.git"; url = "git+https://git.jolheiser.com/gomodinit.git";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
cfg = {
url = "git+https://git.jolheiser.com/cfg.git";
inputs.nixpkgs.follows = "nixpkgs";
};
cfg-playground = {
url = "git+https://git.jolheiser.com/cfg-playground.git";
inputs.nixpkgs.follows = "nixpkgs";
};
ugit = { ugit = {
url = "git+https://git.jolheiser.com/ugit.git"; url = "git+https://git.jolheiser.com/ugit.git";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
git-pr = {
url = "git+https://git.jolheiser.com/git-pr-nix.git";
inputs.nixpkgs.follows = "nixpkgs";
};
spectre = {
url = "git+https://git.jolheiser.com/go-spectre.git";
inputs.nixpkgs.follows = "nixpkgs";
};
# Other flakes # Other flakes
golink = { golink = {
url = "github:tailscale/golink"; url = "github:tailscale/golink";
@ -100,7 +78,7 @@
tclip = { tclip = {
url = "github:tailscale-dev/tclip"; url = "github:tailscale-dev/tclip";
inputs = { inputs = {
#nixpkgs.follows = "nixpkgs"; nixpkgs.follows = "nixpkgs";
utils.follows = "flake-utils"; utils.follows = "flake-utils";
}; };
}; };
@ -108,27 +86,23 @@
url = "github:a-h/templ"; url = "github:a-h/templ";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
actual = { # WSL
url = "git+https://git.xeno.science/xenofem/actual-nix.git"; wsl = {
url = "github:nix-community/NixOS-WSL";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-utils.follows = "flake-utils";
}; };
foundry.url = "github:reckenrode/nix-foundryvtt";
tailproxy = {
url = "git+https://git.jolheiser.com/tailproxy.git";
inputs.nixpkgs.follows = "nixpkgs";
};
ghostty.url = "git+ssh://git@github.com/ghostty-org/ghostty";
}; };
outputs = outputs = {
{
nixpkgs, nixpkgs,
home-manager, home-manager,
nixos-hardware, nixos-hardware,
agenix, agenix,
nixpkgs-py39,
wsl,
... ...
}@inputs: } @ inputs: let
let
overlays = [ overlays = [
(_: prev: { (_: prev: {
nur = import inputs.nur { nur = import inputs.nur {
@ -136,6 +110,7 @@
pkgs = prev; pkgs = prev;
}; };
jolheiser = { jolheiser = {
nur = inputs.jolheiser-nur.packages.${prev.system};
helix = inputs.helix.packages.${prev.system}.default; helix = inputs.helix.packages.${prev.system}.default;
website = inputs.website.packages.${prev.system}.default; website = inputs.website.packages.${prev.system}.default;
resume = inputs.resume.packages.${prev.system}.default; resume = inputs.resume.packages.${prev.system}.default;
@ -143,133 +118,168 @@
gist = inputs.gist.packages.${prev.system}.default; gist = inputs.gist.packages.${prev.system}.default;
tmpl = inputs.tmpl.packages.${prev.system}.default; tmpl = inputs.tmpl.packages.${prev.system}.default;
gomodinit = inputs.gomodinit.packages.${prev.system}.default; gomodinit = inputs.gomodinit.packages.${prev.system}.default;
cfg = inputs.cfg.packages.${prev.system}.default;
blog = inputs.blog.packages.${prev.system}.default;
bennet = inputs.bennet.packages.${prev.system}.default;
spectre = inputs.spectre.packages.${prev.system}.default;
}; };
tclip = inputs.tclip.packages.${prev.system}.tclip; tclip = inputs.tclip.packages.${prev.system}.tclip;
templ = inputs.templ.packages.${prev.system}.templ; templ = inputs.templ.packages.${prev.system}.templ;
ghostty = inputs.ghostty.packages.${prev.system}.ghostty;
}) })
inputs.golink.overlay inputs.golink.overlay
]; ];
pkgs = import inputs.nixpkgs { userSecret = path: {
inherit overlays system; file = path;
config.allowUnfree = true; owner = username;
}; };
commonConfig = commonConfig = {gui ? true}: {config, ...}: {
{ config, ... }:
{
config = { config = {
nixpkgs.overlays = overlays; nixpkgs.overlays = overlays;
# TODO Remove when apps are updated # TODO Remove when apps are updated
nixpkgs.config.permittedInsecurePackages = [ "electron-25.9.0" ]; nixpkgs.config.permittedInsecurePackages = [
"electron-25.9.0"
];
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
users.${username}.imports =
if gui
then [./apps/gui]
else [./apps/nogui];
extraSpecialArgs = {
flakePath = "/home/${username}/.config/nixpkgs";
}; };
}; };
username = "jolheiser"; age.secrets = {
system = "x86_64-linux"; ssh-config = userSecret ./secrets/shared/ssh-config.age;
homeManagerModules = [ ssh-config-work = userSecret ./secrets/shared/ssh-config-work.age;
agenix.homeManagerModules.age
{
home = {
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 = { spotify = {
file = ./secrets/shared/spotify.age; file = ./secrets/shared/spotify.age;
owner = username;
path = "/home/${username}/.cache/spotify-player/credentials.json"; path = "/home/${username}/.cache/spotify-player/credentials.json";
}; };
irc-pw.file = ./secrets/shared/irc-pw.age; irc-pw = userSecret ./secrets/shared/irc-pw.age;
gist-pw.file = ./secrets/shared/gist-pw.age; gist-pw = userSecret ./secrets/shared/gist-pw.age;
git-send-email.file = ./secrets/shared/git-send-email.age; git-send-email = userSecret ./secrets/shared/git-send-email.age;
cachix = { cachix = {
file = ./secrets/shared/cachix.age; file = ./secrets/shared/cachix.age;
owner = username;
path = "/home/${username}/.config/cachix/cachix.dhall"; path = "/home/${username}/.config/cachix/cachix.dhall";
}; };
llm = {
file = ./secrets/shared/llm.age;
path = "/home/${username}/.config/io.datasette.llm/keys.json";
}; };
}; };
}; };
} workModules = [
./apps/gui home-manager.nixosModules.home-manager
agenix.nixosModules.default
(commonConfig {})
({pkgs, ...}: {
config = {
nixpkgs.overlays = [
(_: _: {
py39 = import nixpkgs-py39 {inherit (pkgs) system;};
})
]; ];
home-manager.users.${username}.programs = {
git.package = pkgs.gitSVN;
firefox.profiles.default.bookmarks = [(import ./apps/gui/firefox/work.nix)];
};
age.secrets = {
netrc = {
file = ./secrets/work/netrc.age;
owner = username;
path = "/home/${username}/.netrc";
};
pipconf = {
file = ./secrets/work/pip.conf.age;
owner = username;
path = "/home/${username}/.config/pip/pip.conf";
};
pypirc = {
file = ./secrets/work/pypirc.age;
owner = username;
path = "/home/${username}/.pypirc";
};
cifs = userSecret ./secrets/work/cifs.age;
};
};
})
];
username = "jolheiser";
in in
{ {
inherit homeManagerModules;
homeConfigurations = {
"jolheiser" = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
modules = homeManagerModules ++ [ ./apps/de ];
};
};
nixosConfigurations = { nixosConfigurations = {
"genmaicha" = nixpkgs.lib.nixosSystem { "chai" = nixpkgs.lib.nixosSystem {
inherit system; system = "x86_64-linux";
modules =
workModules
++ [
./machines/chai
];
};
"masala" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules =
workModules
++ [
wsl.nixosModules.wsl
./machines/masala
];
};
"matcha" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [ modules = [
home-manager.nixosModules.home-manager
agenix.nixosModules.default
./machines/matcha
(commonConfig {})
];
};
"genmaicha" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
home-manager.nixosModules.home-manager
nixos-hardware.nixosModules.framework-13-7040-amd nixos-hardware.nixosModules.framework-13-7040-amd
agenix.nixosModules.default
./machines/genmaicha ./machines/genmaicha
commonConfig (commonConfig {})
]; ];
}; };
"sencha" = nixpkgs.lib.nixosSystem { "sencha" = nixpkgs.lib.nixosSystem {
inherit system; system = "x86_64-linux";
modules = [ modules = [
home-manager.nixosModules.home-manager
agenix.nixosModules.default
./machines/sencha ./machines/sencha
commonConfig (commonConfig {})
]; ];
}; };
}; };
colmena = { colmena = {
meta = { meta = {
nixpkgs = import nixpkgs { inherit overlays system; }; nixpkgs = import nixpkgs {
specialArgs = { system = "x86_64-linux";
inherit inputs; overlays = overlays;
}; };
}; };
dragonwell = dragonwell = {
{ pkgs, ... }:
{
imports = [ imports = [
inputs.agenix.nixosModules.default inputs.agenix.nixosModules.default
inputs.golink.nixosModules.default inputs.golink.nixosModules.default
inputs.ugit.nixosModules.default inputs.ugit.nixosModules.default
inputs.git-pr.nixosModules.default
inputs.actual.nixosModules.default
inputs.tailproxy.nixosModules.default
inputs.foundry.nixosModules.foundryvtt
inputs.cfg-playground.nixosModules.default
./modules/tclip
./machines/dragonwell ./machines/dragonwell
]; ];
services.tclip.package = inputs.tclip.packages.${pkgs.system}.tclipd;
};
gunpowder = {
imports = [
inputs.tailproxy.nixosModules.default
./machines/gunpowder
];
}; };
}; };
nixConfig = { nixConfig = {
extra-substitutors = [ "https://jolheiser.cachix.org" ]; extra-substitutors = ["https://jolheiser.cachix.org"];
extra-trusted-public-keys = [ extra-trusted-public-keys = ["jolheiser.cachix.org-1:fiKkfTuHFqDK5ZOVxcqb4InUkKsrTvtMLISid7XvuVg="];
"jolheiser.cachix.org-1:fiKkfTuHFqDK5ZOVxcqb4InUkKsrTvtMLISid7XvuVg="
];
}; };
devShells.${system}.default = pkgs.mkShell { }
// inputs.flake-utils.lib.eachDefaultSystem (system: let
pkgs = nixpkgs.legacyPackages.${system};
in {
devShells.default = pkgs.mkShell {
nativeBuildInputs = [ nativeBuildInputs = [
agenix.packages.${system}.agenix agenix.packages.${system}.agenix
pkgs.colmena pkgs.colmena
]; ];
}; };
}; });
} }

View File

@ -5,17 +5,12 @@ default:
[private] [private]
rebuild *args: rebuild *args:
@git add . @git add .
@sudo nixos-rebuild --flake . {{args}} |& nix run nixpkgs#nix-output-monitor @sudo nixos-rebuild --flake . {{args}}
# Rebuild the current machine # Rebuild the current machine
switch *args: switch *args:
@just rebuild switch {{args}} @just rebuild switch {{args}}
hm:
@git add .
@home-manager switch --flake . |& nix run nixpkgs#nix-output-monitor
@systemctl --user start agenix.service
# Rebuild the current machine for next boot # Rebuild the current machine for next boot
boot *args: boot *args:
@just rebuild boot {{args}} @just rebuild boot {{args}}
@ -32,7 +27,3 @@ update-flake:
# Update an individual input # Update an individual input
update input: update input:
@nix flake lock --update-input {{input}} @nix flake lock --update-input {{input}}
fetch:
@nix run nixpkgs#onefetch -- --true-color never --no-bots -d lines-of-code
@nix run nixpkgs#scc -- --no-cocomo .

Binary file not shown.

View File

@ -0,0 +1,72 @@
{pkgs, ...}: let
username = "jolheiser";
in {
imports = [./hardware.nix ../common/gui];
boot = {
kernelPackages = pkgs.linuxPackages_latest;
kernelParams = ["quiet" "splash"];
loader.efi.canTouchEfiVariables = true;
loader.systemd-boot.enable = true;
initrd.systemd.enable = true;
};
hardware = {bluetooth.enable = true;};
networking = {
hostName = "chai";
networkmanager.enable = true;
firewall.enable = true;
};
boot.initrd.luks.devices = {
"luks-83586073-35f8-438d-9203-99f1e966c2ca" = {
device = "/dev/disk/by-uuid/83586073-35f8-438d-9203-99f1e966c2ca";
keyFile = "/crypto_keyfile.bin";
};
};
services = {
blueman.enable = true;
pcscd.enable = true;
openssh = {
enable = true;
settings = {X11Forwarding = true;};
};
globalprotect.enable = true;
printing = {
enable = true;
drivers = [pkgs.hplip];
};
};
virtualisation.docker.enable = true;
users.users."${username}" = {
extraGroups = ["wheel" "docker"];
isNormalUser = true;
};
environment.systemPackages = with pkgs; [
globalprotect-openconnect
jetbrains.pycharm-professional
jetbrains.idea-ultimate
jetbrains.datagrip
libxcrypt
py39.python39
py39.python39Packages.virtualenv
py39.python39Packages.psycopg2
py39.python39Packages.wheel
py39.python39Packages.setuptools
py39.python39Packages.pip
python3Packages.twine
subversion
teams-for-linux
xorg.xauth
# Flake overlay
jolheiser.nur.prospect-mail
];
system.stateVersion = "22.11";
}

View File

@ -0,0 +1,34 @@
{
config,
lib,
modulesPath,
...
}: {
imports = [(modulesPath + "/installer/scan/not-detected.nix") ./cifs.nix];
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod"];
boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-intel"];
boot.extraModulePackages = [];
fileSystems."/" = {
device = "/dev/disk/by-uuid/b8a0cc98-5882-4b69-a8cb-375726767606";
fsType = "ext4";
};
boot.initrd.luks.devices."luks-bd0a4998-266e-4aae-8f20-89561a2fa169".device = "/dev/disk/by-uuid/bd0a4998-266e-4aae-8f20-89561a2fa169";
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/5531-69DC";
fsType = "vfat";
};
swapDevices = [{device = "/dev/disk/by-uuid/eb7acf5d-e5db-45fa-8691-8ef5641cde68";}];
networking.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
hardware.cpu.intel.updateMicrocode =
lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View File

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

View File

@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
console.colors = [ console.colors = [
"1e1e2e" "1e1e2e"
"585b70" "585b70"
@ -44,22 +43,12 @@
nix = { nix = {
gc.automatic = true; gc.automatic = true;
package = pkgs.nixVersions.stable; package = pkgs.nixVersions.nix_2_15;
settings = { settings = {
trusted-users = [ trusted-users = ["@sudo" "@wheel" "jolheiser"];
"@sudo" experimental-features = ["flakes" "nix-command" "repl-flake"];
"@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" ];
trusted-public-keys = [ "jolheiser.cachix.org-1:fiKkfTuHFqDK5ZOVxcqb4InUkKsrTvtMLISid7XvuVg=" ];
}; };
}; };
@ -71,4 +60,8 @@
}; };
services.tailscale.enable = true; services.tailscale.enable = true;
environment = {
systemPackages = with pkgs; [podman podman-compose podman-tui];
};
} }

View File

@ -1,15 +0,0 @@
{
services = {
actual = {
enable = true;
hostname = "127.0.0.1";
port = 5006;
};
tailproxy.actualbudget = {
enable = true;
hostname = "actualbudget";
port = 5006;
authKey = "tskey-auth-kC3B2nznCk11CNTRL-G5QvPvrNWrcHcbQxh2XCrcCz3qe2jUrsh"; # One-time key
};
};
}

View File

@ -1,8 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
let
modules = import ./go.nix;
in
{
services.caddy = { services.caddy = {
enable = true; enable = true;
virtualHosts = { virtualHosts = {
@ -10,8 +6,7 @@ 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 ${ respond ${builtins.toJSON {
builtins.toJSON {
subject = "acct:john@jolheiser.com"; subject = "acct:john@jolheiser.com";
links = [ links = [
{ {
@ -19,11 +14,10 @@ in
href = "https://auth.jolheiser.com"; href = "https://auth.jolheiser.com";
} }
]; ];
} }}
}
} }
handle_path /bennet* { handle_path /bennet* {
root * ${pkgs.jolheiser.bennet} root * /srv/bennet/src
file_server file_server
} }
handle /resume* { handle /resume* {
@ -36,53 +30,39 @@ in
file_server file_server
} }
''; '';
serverAliases = [ "www.jolheiser.com" ]; serverAliases = ["www.jolheiser.com"];
};
"blog.jolheiser.com" = {
extraConfig = ''
root * ${pkgs.jolheiser.blog}
file_server
'';
}; };
"go.jolheiser.com" = { "go.jolheiser.com" = {
extraConfig = '' extraConfig = ''
header Content-Type text/html header Content-Type text/html
${modules}
respond /* `<html><head> respond /* `<html><head>
<meta name="go-import" content="go.jolheiser.com{path} git https://git.jolheiser.com{path}.git"> <meta name="go-import" content="go.jolheiser.com{uri} git https://git.jojodev.com/jolheiser{uri}.git">
<meta http-equiv="refresh" content="3; url=https://pkg.go.dev/go.jolheiser.com{path}" /> <meta http-equiv="refresh" content="3; url=https://pkg.go.dev/go.jolheiser.com{uri}" />
</head><body> </head><body>
Redirecting to <a href="https://pkg.go.dev/go.jolheiser.com{path}">https://pkg.go.dev/go.jolheiser.com{path}</a> Redirecting to <a href="https://pkg.go.dev/go.jolheiser.com{uri}">https://pkg.go.dev/go.jolheiser.com{uri}</a>
</body></html>` </body></html>`
''; '';
}; };
"git.jolheiser.com".extraConfig = '' "git.jolheiser.com" = {
extraConfig = ''
reverse_proxy localhost:8449 reverse_proxy localhost:8449
''; '';
"pr.jolheiser.com".extraConfig = '' };
reverse_proxy localhost:7449 "social.jolheiser.com" = {
''; extraConfig = ''
"social.jolheiser.com".extraConfig = ''
reverse_proxy localhost:4686 reverse_proxy localhost:4686
''; '';
"auth.jolheiser.com".extraConfig = '' };
"auth.jolheiser.com" = {
extraConfig = ''
reverse_proxy localhost:2884 reverse_proxy localhost:2884
''; '';
"todo.jolheiser.com".extraConfig = '' };
reverse_proxy localhost:8636 "ci.jolheiser.com" = {
''; extraConfig = ''
"recipes.jolheiser.com".extraConfig = ''
reverse_proxy localhost:3663
'';
"irc.jolheiser.com".extraConfig = ''
reverse_proxy localhost:7658
'';
"dnd.jolheiser.com".extraConfig = ''
reverse_proxy localhost:30000
'';
"ci.jolheiser.com".extraConfig = ''
reverse_proxy localhost:2423 reverse_proxy localhost:2423
''; '';
}; };
}; };
};
} }

View File

@ -1,7 +0,0 @@
{
services.cfg-playground = {
enable = true;
verbose = true;
auth-key = "tskey-auth-ksTZtpeU1i11CNTRL-HmmWuAFifG3xxy8UDr1yG3UdjiYJ3mtGe"; # One-time key
};
}

View File

@ -1,26 +1,8 @@
let let
username = "jolheiser"; username = "jolheiser";
key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL+uhnfFLhlyfGGsksSxh5IIY6gnIMryeQ2EiM979kZa"; key = ''ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfKqCWtDlS3tgvfT6hQN+ii8UtabIZ+ZNmYN+bLwIa8PHOEW5MbfaqXSlhKkSi4+7SfQDCHphw0SMfhsQ4qMEcoywZ+4niDgKlQEVkl+S/VGbLuPe92NRStkyreZBLPr3Rh7ScNlGHcmHmoV9v7725fMnsMmabGVhpGO84PwNHOfJyv2tx2h6LxFbAV8S44UQu2lc8YLWCK2UvKuRnBerBXLnDQThUUX8UuCFzb786gQzD5XDU0MENbByxiy0XdVGAC+tFXEiSIgFZlFbFYyShgdTP9MzX2MOglEi+ae+1UIFncraW7ptUey7qHFJylpHWWWvE+GTwsg2G50i0FvFj jolheiser@jolheiser'';
in in {
{ imports = [./caddy.nix ./dex.nix ./golink.nix ./gotosocial.nix ./jenkins.nix ./restic.nix ./ugit.nix ./hardware.nix];
imports = [
./actual.nix
./caddy.nix
./cfg.nix
./dex.nix
./foundry.nix
./git-pr.nix
./golink.nix
./gotosocial.nix
./jenkins.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;
@ -30,30 +12,21 @@ in
firewall = { firewall = {
enable = true; enable = true;
allowedTCPPorts = [ allowedTCPPorts = [80 443];
80
443
6697
];
}; };
}; };
services = { services.openssh.enable = true;
openssh.enable = true;
tailscale.enable = true;
};
users.users = { users.users = {
"${username}" = { "${username}" = {
extraGroups = [ extraGroups = ["wheel" "docker" "storage"];
"wheel"
"docker"
"storage"
];
isNormalUser = true; isNormalUser = true;
openssh.authorizedKeys.keys = [ key ]; 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

@ -1,12 +0,0 @@
{ inputs, pkgs, ... }:
{
services.foundryvtt = {
enable = true;
hostName = "dnd.jolheiser.com";
minifyStaticFiles = true;
proxyPort = 443;
proxySSL = true;
upnp = false;
package = inputs.foundry.packages.${pkgs.system}.foundryvtt_12;
};
}

View File

@ -1,25 +0,0 @@
{
services.git-pr = {
enable = true;
openFirewall = true;
url = "pr.jolheiser.com";
admins = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJXoiWcPkL5kUAqJfMxnPM/ND4qJ4kKShDhXdqnYv2ZB" ];
sshPort = 7448;
enableWeb = true;
webPort = 7449;
theme = "catppuccin-mocha";
timeFormat = "01/02/2006 at 03:04:05PM";
repos = [
{
id = "ugit";
cloneAddr = "https://git.jolheiser.com/ugit.git";
desc = "Minimal git service";
}
{
id = "git-pr-nix";
cloneAddr = "https://git.jolheiser.com/git-pr-nix.git";
desc = "Nix flake, package, and module for git-pr";
}
];
};
}

View File

@ -1,22 +0,0 @@
let
modules = [
{
name = "hcaptcha";
repo = "gitea.com/jolheiser/hcaptcha";
}
{
name = "pwn";
repo = "gitea.com/jolheiser/pwn";
}
];
in
builtins.concatStringsSep "\n" (
builtins.map (module: ''
respond /${module.name}* `<html><head>
<meta name="go-import" content="go.jolheiser.com/${module.name} git https://${module.repo}.git">
<meta http-equiv="refresh" content="3; url=https://pkg.go.dev/go.jolheiser.com/${module.name}" />
</head><body>
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
)

View File

@ -1,5 +1,4 @@
{ 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,14 +1,8 @@
{ 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 = [ boot.initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "xen_blkfront" "vmw_pvscsi"];
"ata_piix" boot.initrd.kernelModules = ["nvme"];
"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,12 +1,10 @@
{ config, ... }: {config, ...}: {
{
age.secrets.jenkins.file = ../../secrets/personal/jenkins.age; age.secrets.jenkins.file = ../../secrets/personal/jenkins.age;
services.jenkins = { services.jenkins = {
enable = true; enable = true;
listenAddress = "localhost"; listenAddress = "localhost";
port = 2423; port = 2423;
jobBuilder = { jobBuilder = {
enable = false; # Currently broken
accessTokenFile = config.age.secrets.jenkins.path; accessTokenFile = config.age.secrets.jenkins.path;
nixJobs = [ nixJobs = [
{ {

View File

@ -1,5 +1,4 @@
{ 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;
@ -10,12 +9,8 @@
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 = [ pruneOpts = ["--keep-daily 7" "--keep-weekly 2" "--keep-monthly 2"];
"--keep-daily 7"
"--keep-weekly 2"
"--keep-monthly 2"
];
timerConfig = { timerConfig = {
OnCalendar = "daily"; OnCalendar = "daily";
Persistent = true; Persistent = true;

View File

@ -1,33 +0,0 @@
{ lib, ... }:
let
baseCertPath = "/var/lib/acme/irc.jolheiser.com";
in
{
security.acme = {
acceptTerms = true;
email = "irc@jolheiser.com";
certs."irc.jolheiser.com" = {
listenHTTP = ":7658";
postRun = "systemctl reload soju";
group = "soju";
};
};
services.soju = {
enable = true;
tlsCertificate = "${baseCertPath}/fullchain.pem";
tlsCertificateKey = "${baseCertPath}/key.pem";
};
systemd.services.soju.serviceConfig = {
DynamicUser = lib.mkForce false;
User = "soju";
Group = "soju";
ReadOnlyPaths = baseCertPath;
};
users = {
users.soju = {
isSystemUser = true;
group = "soju";
};
groups.soju = { };
};
}

Binary file not shown.

View File

@ -1,9 +0,0 @@
{
services.tclip = {
enable = true;
hostname = "paste";
useFunnel = true;
hideFunnelUsers = true;
authKey = "tskey-auth-k1VerP4gam11CNTRL-89rpeDcfTdJqkF9AECWmdJLVgo1jQcSAB"; # One-time key
};
}

View File

@ -2,17 +2,13 @@
services.ugit = { services.ugit = {
enable = true; enable = true;
openFirewall = true; openFirewall = true;
authorizedKeys = [ authorizedKeys = ["ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAMAN5+UcBIQ5jQgd74yabfQRCfMToFNAfmU6M5MmFSb3C1Txkdr2lPeaev5enTm70mWrFYs2FC3oA0nWHvkxoBKzYmhRiRGPJ/6VQVaZbQP1j3MFKosCIXzN0GqVb5VPz/4jjX5hW2HWtyf4XID63rHJLmD0lwJVfxsue/wftTaSqNeCZjC9jNuDB+vlJRHsvLfk1ssiQ6V2508ZgImHG/LuS/WpMsd8zvI2vqZh4nVr9Bmc8U2B5KtOOcT/HpKRBfGPRTJyQ+vgqIx96J8ah5eK19jO/nTKiqobMkIgPiXkKyZa+Z5NzMe728sL6eTfWRimbU+sVSizVtvDdkSfx"];
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJXoiWcPkL5kUAqJfMxnPM/ND4qJ4kKShDhXdqnYv2ZB"
];
tsAuthKey = "tskey-auth-kRUJE7zxH621CNTRL-Td29STXSrtTUHdacaKaYtTD82uyDXZj7"; # One-time key
config = { config = {
ssh.clone-url = "ugit@git.jolheiser.com"; ssh.clone-url = "ugit@git.jolheiser.com";
http.clone-url = "https://git.jolheiser.com"; http.clone-url = "https://git.jolheiser.com";
log.json = true;
profile = { profile = {
username = "jolheiser"; username = "jolheiser";
email = "ugit@jolheiser.com"; email = "john+ugit@jolheiser.com";
links = [ links = [
"Github,https://github.com/jolheiser" "Github,https://github.com/jolheiser"
"Gitea,https://gitea.com/jolheiser" "Gitea,https://gitea.com/jolheiser"
@ -20,10 +16,6 @@
"Fediverse,https://social.jolheiser.com/@jolheiser" "Fediverse,https://social.jolheiser.com/@jolheiser"
]; ];
}; };
tailscale = {
enable = true;
hostname = "git";
};
}; };
}; };
} }

Binary file not shown.

View File

@ -1,19 +1,11 @@
{ pkgs, ... }: {pkgs, ...}: let
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 = [ kernelParams = ["quiet" "splash"];
"quiet"
"splash"
];
loader = { loader = {
systemd-boot.enable = true; systemd-boot.enable = true;
efi.canTouchEfiVariables = true; efi.canTouchEfiVariables = true;
@ -36,11 +28,7 @@ in
virtualisation.docker.enable = true; virtualisation.docker.enable = true;
users.users."${username}" = { users.users."${username}" = {
extraGroups = [ extraGroups = ["wheel" "docker" "storage"];
"wheel"
"docker"
"storage"
];
isNormalUser = true; isNormalUser = true;
}; };

View File

@ -1,37 +1,31 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ { config, lib, pkgs, modulesPath, ... }:
config,
lib,
modulesPath,
...
}:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot.initrd.availableKernelModules = [ {
"nvme" imports =
"xhci_pci" [ (modulesPath + "/installer/scan/not-detected.nix")
"thunderbolt"
"usb_storage"
"sd_mod"
]; ];
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ]; boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
fileSystems."/" = { fileSystems."/" =
device = "/dev/disk/by-uuid/90652083-df9c-42df-8c8a-8d979a3e1e0c"; { device = "/dev/disk/by-uuid/90652083-df9c-42df-8c8a-8d979a3e1e0c";
fsType = "ext4"; fsType = "ext4";
}; };
fileSystems."/boot" = { fileSystems."/boot" =
device = "/dev/disk/by-uuid/B03F-3B27"; { device = "/dev/disk/by-uuid/B03F-3B27";
fsType = "vfat"; fsType = "vfat";
}; };
swapDevices = [ { device = "/dev/disk/by-uuid/2034b9e4-011b-4715-a7a2-5f5445dc2849"; } ]; swapDevices =
[ { 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,133 +0,0 @@
{ pkgs, ... }:
let
username = "jolheiser";
key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJh5aUDN/KN28+4tbayXRQliLyKFZaCZtUMEBNaJfHYj";
in
{
imports = [ ./hardware.nix ];
boot = {
kernelPackages = pkgs.linuxPackages_latest;
kernelParams = [
"quiet"
"splash"
];
loader.grub = {
enable = true;
device = "/dev/sda";
useOSProber = true;
enableCryptodisk = true;
};
};
boot.initrd.secrets = {
"/crypto_keyfile.bin" = null;
};
boot.initrd.luks.devices = {
"luks-1f9bde68-9c4c-423c-a95f-17aa170dd2b4".keyFile = "/crypto_keyfile.bin";
"luks-a2ca1842-1ce0-437e-ba5e-8864a41e81cb" = {
device = "/dev/disk/by-uuid/a2ca1842-1ce0-437e-ba5e-8864a41e81cb";
keyFile = "/crypto_keyfile.bin";
};
};
networking = {
hostName = "gunpowder";
networkmanager.enable = true;
firewall.enable = true;
};
services = {
xserver = {
enable = true;
displayManager.lightdm.enable = true;
desktopManager.xfce.enable = true;
};
openssh.enable = true;
tailscale.enable = true;
mullvad-vpn = {
enable = true;
package = pkgs.mullvad-vpn;
};
resolved.enable = true;
# media
jellyfin = {
enable = true;
openFirewall = true;
};
tailproxy.jellyfin = {
enable = true;
hostname = "jellyfin";
port = 8096;
authKey = "tskey-auth-khZwt3ASDX11CNTRL-jYDAVuX7VVLCebLUGdvnVLLoUkeEevXEV"; # One-time key
};
sonarr = {
enable = true;
openFirewall = true;
};
tailproxy.sonarr = {
enable = true;
hostname = "sonarr";
port = 8989;
authKey = "tskey-auth-k1mZ4587A511CNTRL-uxq54KBAvb6YuhvZbxscb6rf7x8UwNiP"; # One-time key
};
radarr = {
enable = true;
openFirewall = true;
};
tailproxy.radarr = {
enable = true;
hostname = "radarr";
port = 7878;
authKey = "tskey-auth-kjuWphWmFp11CNTRL-dcpVCTbdPTAAiqQHaKVhTA27uNQeHxmq5"; # One-time key
};
bazarr = {
enable = true;
openFirewall = true;
};
tailproxy.bazarr = {
enable = true;
hostname = "bazarr";
port = 6767;
authKey = "tskey-auth-kydeAt7KDA21CNTRL-bLfZMG4ip4i4a91DX1b85ipjnZi9KgoN9"; # One-time key
};
prowlarr = {
enable = true;
openFirewall = true;
};
tailproxy.prowlarr = {
enable = true;
hostname = "prowlarr";
port = 9696;
authKey = "tskey-auth-koCbGEVEvh11CNTRL-7pxqVBdP4v5xNvsPP5mMv5oW8PrgVQmb"; # One-time key
};
};
users = {
users = {
"${username}" = {
extraGroups = [
"wheel"
"docker"
"storage"
];
isNormalUser = true;
openssh.authorizedKeys.keys = [ key ];
};
"root".openssh.authorizedKeys.keys = [ key ];
};
groups.media.members = [
"jolheiser"
"olheiser"
"jellyfin"
"radarr"
"sonarr"
];
};
environment.systemPackages = with pkgs; [ qbittorrent ];
system.stateVersion = "22.11";
}

View File

@ -0,0 +1,34 @@
{pkgs, ...}: let
username = "jolheiser";
in {
imports = [../common/gui];
networking.hostName = "masala";
wsl = {
enable = true;
defaultUser = username;
startMenuLaunchers = true;
};
users.users."${username}" = {
extraGroups = ["wheel" "docker"];
isNormalUser = true;
};
services.openssh.enable = true;
environment.systemPackages = with pkgs; [
libxcrypt
py39.python39
py39.python39Packages.virtualenv
py39.python39Packages.psycopg2
py39.python39Packages.wheel
py39.python39Packages.setuptools
py39.python39Packages.pip
python3Packages.twine
subversion
];
system.stateVersion = "23.11";
}

View File

@ -0,0 +1,49 @@
{pkgs, ...}: let
username = "jolheiser";
in {
imports = [./hardware.nix ../common/gui];
boot = {
kernelPackages = pkgs.linuxPackages_latest;
kernelParams = ["quiet" "splash"];
loader.grub = {
enable = true;
device = "/dev/sda";
useOSProber = true;
enableCryptodisk = true;
};
};
boot.initrd.secrets = {"/crypto_keyfile.bin" = null;};
boot.initrd.luks.devices = {
"luks-1f9bde68-9c4c-423c-a95f-17aa170dd2b4".keyFile = "/crypto_keyfile.bin";
"luks-a2ca1842-1ce0-437e-ba5e-8864a41e81cb" = {
device = "/dev/disk/by-uuid/a2ca1842-1ce0-437e-ba5e-8864a41e81cb";
keyFile = "/crypto_keyfile.bin";
};
};
hardware = {bluetooth.enable = true;};
networking = {
hostName = "matcha";
networkmanager.enable = true;
firewall.enable = true;
};
services = {
blueman.enable = true;
openssh.enable = true;
pcscd.enable = true;
};
virtualisation.docker.enable = true;
users.users."${username}" = {
extraGroups = ["wheel" "docker" "storage"];
isNormalUser = true;
};
system.stateVersion = "22.11";
}

View File

@ -6,9 +6,8 @@
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"
@ -19,9 +18,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";
@ -31,16 +30,11 @@
fileSystems."/mnt/hdd" = { fileSystems."/mnt/hdd" = {
device = "/dev/disk/by-uuid/eb8ad2da-12cf-454b-aa20-e497c4550b7c"; device = "/dev/disk/by-uuid/eb8ad2da-12cf-454b-aa20-e497c4550b7c";
fsType = "ext4"; fsType = "ext4";
options = [
"users"
"nofail"
"gid=users"
];
}; };
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
@ -51,5 +45,6 @@
# 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 = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.intel.updateMicrocode =
lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

View File

@ -1,15 +1,9 @@
{pkgs, ...}: { {pkgs, ...}: {
imports = [ imports = [./hardware.nix ../common/gui];
./hardware.nix
../common/gui
];
boot = { boot = {
kernelPackages = pkgs.linuxPackages_latest; kernelPackages = pkgs.linuxPackages_latest;
kernelParams = [ kernelParams = ["quiet" "splash"];
"quiet"
"splash"
];
}; };
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = true;
@ -17,14 +11,15 @@
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 = { hardware = {bluetooth.enable = true;};
bluetooth.enable = true;
};
networking = { networking = {
hostName = "sencha"; hostName = "sencha";
networkmanager.enable = true; networkmanager.enable = true;
firewall.enable = true; firewall = {
enable = true;
allowedTCPPorts = [8096];
};
}; };
services = { services = {
@ -33,27 +28,9 @@
pcscd.enable = true; pcscd.enable = true;
printing = { printing = {
enable = true; enable = true;
drivers = [ drivers = [pkgs.canon-cups-ufr2 pkgs.cnijfilter_4_00];
pkgs.canon-cups-ufr2
pkgs.cnijfilter_4_00
];
};
jellyfin = {
enable = true;
openFirewall = true;
};
sonarr = {
enable = true;
openFirewall = true;
};
radarr = {
enable = true;
openFirewall = true;
};
bazarr = {
enable = true;
openFirewall = true;
}; };
jellyfin.enable = true;
mullvad-vpn = { mullvad-vpn = {
enable = true; enable = true;
package = pkgs.mullvad-vpn; package = pkgs.mullvad-vpn;
@ -63,26 +40,12 @@
virtualisation.docker.enable = true; virtualisation.docker.enable = true;
users = { users.users.olheiser.isNormalUser = true;
users = { users.users.jolheiser = {
olheiser.isNormalUser = true; extraGroups = ["wheel" "docker" "storage"];
jolheiser = {
extraGroups = [
"wheel"
"docker"
"storage"
];
isNormalUser = true; isNormalUser = true;
}; };
}; users.groups.media.members = ["jolheiser" "olheiser" "jellyfin"];
groups.media.members = [
"jolheiser"
"olheiser"
"jellyfin"
"radarr"
"sonarr"
];
};
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
firefox firefox

View File

@ -1,41 +1,33 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ { config, lib, pkgs, modulesPath, ... }:
config,
lib,
modulesPath,
...
}:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot.initrd.availableKernelModules = [ {
"xhci_pci" imports =
"ahci" [ (modulesPath + "/installer/scan/not-detected.nix")
"usbhid"
"usb_storage"
"sd_mod"
"sr_mod"
"rtsx_usb_sdmmc"
]; ];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "sr_mod" "rtsx_usb_sdmmc" ];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ ]; boot.kernelModules = [ ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
fileSystems."/" = { fileSystems."/" =
device = "/dev/disk/by-uuid/d1f561b1-bc50-4e34-9ca6-e973d2d9437a"; { device = "/dev/disk/by-uuid/d1f561b1-bc50-4e34-9ca6-e973d2d9437a";
fsType = "ext4"; fsType = "ext4";
}; };
boot.initrd.luks.devices."luks-75db2e03-a875-43ee-8ca8-70507b421641".device = "/dev/disk/by-uuid/75db2e03-a875-43ee-8ca8-70507b421641"; boot.initrd.luks.devices."luks-75db2e03-a875-43ee-8ca8-70507b421641".device = "/dev/disk/by-uuid/75db2e03-a875-43ee-8ca8-70507b421641";
fileSystems."/boot" = { fileSystems."/boot" =
device = "/dev/disk/by-uuid/A8A8-1D01"; { device = "/dev/disk/by-uuid/A8A8-1D01";
fsType = "vfat"; fsType = "vfat";
}; };
swapDevices = [ { device = "/dev/disk/by-uuid/5c3eb124-674b-4315-890d-137275aab504"; } ]; swapDevices =
[ { 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,108 +0,0 @@
{ config, lib, ... }:
let
cfg = config.services.tclip;
in
{
options.services.tclip = {
enable = lib.mkEnableOption "tclip service";
hostname = lib.mkOption {
type = lib.types.str;
default = "paste";
description = "The hostname to use on your tailnet";
};
dataLocation = lib.mkOption {
type = lib.types.str;
default = "/var/lib/tclip";
description = "Where program data is stored";
};
tsnetVerbose = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Log verbosely to stderr";
};
useFunnel = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Expose pastes with tailscale funnel";
};
hideFunnelUsers = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Hide usernamd/image on funnel";
};
httpPort = lib.mkOption {
type = lib.types.nullOr lib.types.port;
default = null;
description = "Expose pastes on an HTTP server at the given port";
};
controlURL = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = "Custom control server (e.g. headscale)";
};
disableHTTPS = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Disable serving on HTTPS";
};
package = lib.mkOption {
type = lib.types.package;
description = "The tclip package to use";
};
authKey = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = "Tailscale auth key";
};
};
config = lib.mkIf cfg.enable {
systemd.services.tclip = {
description = "tclip Service";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart =
let
args =
lib.optionals (cfg.httpPort != null) [ "--http-port=${cfg.httpPort}" ]
++ 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.tsnetVerbose "--tsnet-verbose")
(lib.optionalString cfg.useFunnel "--use-funnel")
(lib.optionalString cfg.hideFunnelUsers "--hide-funnel-users")
];
in
"${cfg.package}/bin/tclipd ${lib.concatStringsSep " " args}";
Restart = "always";
User = "tclip";
Group = "tclip";
Environment = [ "TS_AUTHKEY=${cfg.authKey}" ];
};
};
# Create user and group
users.users.tclip = {
isSystemUser = true;
group = "tclip";
home = cfg.dataLocation;
createHome = true;
};
users.groups.tclip = { };
};
}

View File

@ -1,8 +1,9 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 E8j6/g QWZGgeu5+89wRzWH31D1GdNuhrNyyKsKqv/b4Kkyn2s -> ssh-ed25519 E8j6/g 3YEltKNS2GZeGUIGuhVxQAs5bv5TpHtExTDGLRE46XU
3vYwTYDVOMyiNeE+NtNPyplmGiknjyTQvln2DRxUPg0 3g5T+txUu8pJEyrIKRSuvOafYToXw4e0+e3EGYqO/4Q
-> ssh-ed25519 f31uNA NVB2C1IjxvB25uA+PdB9lmNgmPQ16wSRl8lS0Wp4Tzg -> ssh-ed25519 f31uNA 16B+bom6u8H/7Ow+1m0JOMjH0biZeHQi4/6ao7Yfmz0
Fe7BCcnb+1HzJ43Iq+YtHCI/i2m7TT5xO1rZwb9yZ70 O8yaDavuZhZrp/hdiidDXVXHbD9b6G5wUWN6Ic3lmek
--- 4Fmm3sQzE/funn3yI79REu1SVRzgUMQ1r8bUaNgVYZE -> xIu.+T?!-grease D5 iK}#} N,P?<&
Î<EFBFBD>Æ FPClNBflmHpIAS1WTSZw+cydtHuitkQKBVPV1RzF5zmp1FL/HlOh5A
¸ü,Fï ê´õ/ÃÅ~Å”TëDÛ¨Ù<C2A8><E28098>t`)9ƒö<C692>óþ¬+xÙy~+ --- guw/iQCkuXH+6Se6s0V5jCJ36aE0HBEoA4JnXiEZ864
稾2酳ャィ<EFBFBD><EFBFBD>e・PEケKxaFマセ頼zF$甚抻 <>2ャェユィ櫛5b云*|x]<5D>

View File

@ -1,7 +0,0 @@
age-encryption.org/v1
-> ssh-ed25519 E8j6/g npvjWOaLtdQ8shF6rkXfUlXXf1MAe/pvPBPIPY9R1XY
gO6lr8kHN7fOQb5NXaybFqhghx5VqcK0LaHCVvlsdvs
-> ssh-ed25519 f31uNA qrbvpL4AuM1wPSR2Qc9VKSpO4Ho0WgpmOIThWvotBCQ
Q1oMS4SAxzqb1vQffM4dpsnlXP1M2fZ5nYYIpyB9uoA
--- ESb6mxdTZnHs053UowTuWZRn+W+QlOeVM8/kL1VWSgw
Hì²DÏÝ­DŠÁƒÖÊÖ¢Ìw•oûkG<E280BA>EJ¾-Ó_up»œÔ!¤ !¼¯žB

View File

@ -1,8 +0,0 @@
age-encryption.org/v1
-> ssh-ed25519 E8j6/g rUc81FjzuShzhp/3we9dQPPAqIPEoKAagCF9K0/S9lw
0mv/S6RCEosLF1aWvb/2+oPdQEfTHraOqVI8v3PMcrI
-> ssh-ed25519 f31uNA C3OusAWxSswFYZxr26XtuB5EpJUzkxcP0US+F4SZFlc
L/soUr5i+7+RyZ8mMUI6AOfTXdWzqO+a9OFLHGw28SI
--- rVDcNMV2dVpwhNiIx964+sw6ak5lcZzaeGASLlVNac8
®ö&sE
H'à«/åS¹ù×|òª%8Ó¿€Ô§@°Zº:2­íÕÎj1¨Ò 5p<35>À.Å

Binary file not shown.

Binary file not shown.

View File

@ -1,7 +1,9 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 E8j6/g c3mP+3muM3Nk+CR8X2GRdVDgc88Y5FHblV7EzxaYF08 -> ssh-ed25519 E8j6/g vJ44QXH609Gdz21eaPJYfSl7LnGYIlH+OyXsgqN7FVc
dVEE+rQ6Y7ki9Uyr+8B3xYRZtO9VeGWwFboasp5ycqg bZ2m/Z0PLtvEAe8mN1w2BKRJ9IlUloGFjqzDC+aPnNo
-> ssh-ed25519 f31uNA Xq8QkBgX9mpIkenoJQCt+hyg/AVf/kwkVMJnOxqEARM -> ssh-ed25519 f31uNA j6nFenIYytjtCg5QKn7hcmUwhc67KI52Eri8+j1te2Q
tkte19pOr+Lb2lk1BVQibsC8d8k38oKwllx6cySVtt0 vVpqmJ3ilkCff4lD6nVlouiZRlqXKkA5Weo+TZtpHYU
--- geKlgkUKw/FYhJNqGSZmXoTSTfRQR+dlz7fq5WzL7SU -> 1cou-grease tIV
Ïl,Ì<0E>Ù—¤ðÈWLÙð±ùú4VEÃÒøŸ¾€ÿ¹<C3BF>Ýbç6¥Y8†ÌÔÒØ 8F7BqbUT
--- pxluaWPdPVE1fulpg5CjTeZnH2qdM2pUZwiy7WSk6qA
N•h;Ű4[=Ď:…śKIŹ&űČ-¶ŠŮUśśpËěˇřUĎG8ç~sĘ3

Binary file not shown.

View File

@ -3,54 +3,27 @@ let
matcha = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILZxjkZLj/9xvmg1enK+B7k8qf6Px0j4kTZ2caQfYmB1"; matcha = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILZxjkZLj/9xvmg1enK+B7k8qf6Px0j4kTZ2caQfYmB1";
genmaicha = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKhyzwMV0eoS8RSAcUvLkPhbXoR9/06cLoBmUVyb9DTw"; genmaicha = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKhyzwMV0eoS8RSAcUvLkPhbXoR9/06cLoBmUVyb9DTw";
sencha = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJurjAMu4IXgpBwgUP0QvE2ySE5/Orn/yflkdWVvy6Am"; sencha = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJurjAMu4IXgpBwgUP0QvE2ySE5/Orn/yflkdWVvy6Am";
chai = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA7PS9SJ+OVrUku9dPUQZigioy+r3VlFHVntsa/F7AdM";
masala = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEDltwsOkqNsP0Gia32jzUUzohzMYpE9uSwxBqJoG2Vd";
dragonwell = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN32Cwxer2AOGvEqSqXSPp49gj1VtR7G2XmPnmXj6o53"; dragonwell = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN32Cwxer2AOGvEqSqXSPp49gj1VtR7G2XmPnmXj6o53";
all = [ all = [jolheiser matcha genmaicha sencha chai masala dragonwell];
jolheiser in {
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/ssh-config-work.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;
"shared/llm.age".publicKeys = all; "work/netrc.age".publicKeys = [jolheiser chai masala];
"personal/restic-env.age".publicKeys = [ "work/pip.conf.age".publicKeys = [jolheiser chai masala];
jolheiser "work/pypirc.age".publicKeys = [jolheiser chai masala];
dragonwell "work/cifs.age".publicKeys = [jolheiser chai masala];
]; "personal/restic-env.age".publicKeys = [jolheiser dragonwell];
"personal/restic-pass.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-repo.age".publicKeys = [ "personal/jenkins.age".publicKeys = [jolheiser dragonwell];
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
];
"personal/jenkins.age".publicKeys = [
jolheiser
dragonwell
];
} }

View File

@ -1,14 +1,21 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 E8j6/g x3c1iPetBHh6UHUPC0lbdsikCL8QfL/nsyma/4iYZTs -> ssh-ed25519 E8j6/g FDACqhXF6WF0r++YUcxfxLeXVhyWPs7pzStaVsf+WDk
tuvd6dfr4kcYakitJ4ke5Ru31jiJh8942XzhhSytwIg cEiiEjlJXV8LNA6Exvg70QoPdDeedRLVf37AFt5QaCI
-> ssh-ed25519 xUMv2w j2ptgF7kd9RKBHut2n++jCDDp3mLKm4gIHpIG9Hg2xw -> ssh-ed25519 xUMv2w dWhqulynXSqCLa9u1Q9lGKBMGVZg9LCGATO843N7hV8
390rYja1NPESmRCXgbiUJJVRQQEt5NLw+kySAk0vbWI HySkoB4ro3BF9WmJOBD+70HeEJ56q4GYBzd+gulkeTY
-> ssh-ed25519 ph+d2g 9NDTnvI0w2ooUsa1IlyYScNie4HcuUj3kk1C8mADakA -> ssh-ed25519 ph+d2g R4PWRY+NhDF24tv70GJW1vsPsB9QpYihDMPsfkFiDSY
u9uQkf3YC0yuWX//58YMYdXjAOYLXQhj56zwGIIlpY8 BlHYhA8CABxIHoPvUExIfH/TWcgRZzlC0diGDAv6Vt4
-> ssh-ed25519 Cuo7gw PagCT6dPTNZH4mfUyBWYmWp9f4LPsf7u3BIWg1r0VHM -> ssh-ed25519 Cuo7gw jAd/EB+U99pI1sLMikC5GyTlksJWdfD4OUAffO1Bk3M
Uem6hhHcUvAXSCezB0qiO0J2MI0BnO560MAP6UWhnFA zoEO1VNCNBrNTkVzVSxj7BQfvO7zxHyyK5LcR5BYYpM
-> ssh-ed25519 f31uNA 2MXm2EGDzWn8KT0AE35rhKMi8XBntmGXj8Mlx1DSfgw -> ssh-ed25519 jo1MPA dSgNY92AA7ajdEWYEYa8iHV8UxvssFFwLB04ujy9MVQ
ul4HdMXxWQSbqLJHLABits78rCBL0geTkT++ru9QWKI FWF//+BYI1mBSletrzhWVmpbaikttT+5EdC7Nx1n8yw
--- 8Sfze/lOcjaaD52+EST5endtf3Za9wFqFqggxpXwp8s -> ssh-ed25519 eyVEZQ GXbXx26XpZWfuUA0C4X6qUX+kqszU+R4tTU2DbVk7Fg
ÎĎUÎma1Żţ~š4  şç”…_ëp˙D¨šŚ ĐŇ/ rC5ľžN3'Ä˝đV<>V|¨[R<>€ Ä•Č< / _OUe7ŃĄţ†ŕwsŹÁ?řÜC1Héhx( öbP))‘ąÂÉéHń†Q„ţ€6<E282AC>žW0Üť <0B>.{  7/uCq+MgBGZ3/c0jPfP8pOhm1muY0nGAW2SLtYAqNZ0
ËŐŇÝĄĹQ|ŤRĽJ˝ęÍmăű6ż“ţŞ›Đ:T¸.ěâŇNoćI#aBc<42>-*Jňĺ~gC-CαöĽ‰KorCĎěďG@AŤË7ÂXjĄ]ĂĄ7¶®ą Ć,?<3F>Ü—šşâvp<76><70> -> ssh-ed25519 f31uNA pB2iefe/IJ2DfnKke6Z4Dfs7XC7W8akZs7enMRjs/38
0oVjdzrfvyBghxcfZo/RWFkmGH82YrChzZTbACdha8M
-> skta,%'-grease
P7xAIiGlHiTbYPT4+QbYiI9l0NLWCCfVqJi1haJSASQ5lpwPhbO+bRgPX/vu/pjO
9PA5QrwU0+8BmRuPSNZEny8xMGHMHS9IE9Mkcfzf/fDhgbYnviqGzN2wHQ
--- F4UtIaXx8fRS2jHGM+h12+hO48cDq1K3Vpo+fse4wks
÷µšbùÖ˜áK«à<EFBFBD>ÂTX™½É@ø6^øüÃy:!
bwsÛ nÑkѹwdbÎÐ<13>ÓÜçS‡½™Ö@—d<E28094>Mb«F ¢<01>ëÀ/UêG \­½Þ7}ZG]:AìJ³p,<2C>ÜÈ5YzTcس™«ÚÔ¾z°<>„;³`¨ÚJ]MR¤Ï¹0­ƒXóu!L´0ÔðjÒ1RÔ½Šk]RëŸ*~Y‡zµ•P)ȯ!H)±-=YPÙGýlþ¬5êæbkEY4ž´ ¶Žþ°RÁ9°´Üð˜ïš­"¡àÀ#¬M4­

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,14 +0,0 @@
age-encryption.org/v1
-> ssh-ed25519 E8j6/g p21/KPTNTZrRXQUvPtlkHZuiFyNGkJWxF/yfhn643gk
jnN29WaHvFjMIjzVe0hkOEcolovBwjcgc2RfDlgY97E
-> ssh-ed25519 xUMv2w Dvet20WUzCfQeoKrdmCb12ouUNlePgFDdKEUZP82PmA
Prj/pjjj+oDqwKq+Q59aSj80YqICcgvulCBVy8CYx5Q
-> ssh-ed25519 ph+d2g vvjz0afKneI+lpiGGm8JuDTlJDlmoUygm/roW1vQphw
imYWGoW9O4MTbwTqXC5+5bH9sBf6qgkEJ8tNDtx6B0E
-> ssh-ed25519 Cuo7gw zUGiEgCtGzwZOVUl5T3jMBdwYzf657jMAbfJ/G1uGX8
jeoWPVh4+AVyGqdZlG1Do3XHT/bwojZsT14I8E3aF1s
-> ssh-ed25519 f31uNA KmRTboipwSZZyDV1d69x4Apn0IjeboMxhmFVJBm72XI
Rgk4ranEXY0mcyBX7nWnW31yKZ8J3hrfzMV5NeQ3tLk
--- RW/X1U5gc3VSKroi8ZAIHZt4tvNShY/viK2TE2WSY4Q
²™|utÖ<74>¤Ù P¦Î²³ÈØ€ÏÜ^¯Ä<G_èB©fD A“<41>xÒÃhËàÍ|§þß<.ÀHF»¦'šP0YŒ'¡<¢õäŒÅ5“ï¢ÒG†™ý¬å Šuζ9ËCz17Lg†Ó‰p^új§<6A>PtÏ:j¶þ?¯½<Ÿs¢ì Ý®³{c<>9¸®ý˜­ç1Tö¼6T\ßSó¤s^©<10>Na©
0¯weÓ&yðšmd9 íš7|cGwØ~ý,Èv4®k˯;Ò9H0ŽfŒ.2Gø€:þ{™ŒWùE

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,12 @@
age-encryption.org/v1
-> ssh-ed25519 E8j6/g gJuAvRgKZ+6ehBQyCNTunmig/KISAJnCYlOuzfBbvVk
nDft9dvAZ0yfZ++5gogeGNpeZ+/lZPWq55AiJuZ75fw
-> ssh-ed25519 jo1MPA cEjtf6w0pYrqucz2RiE4ZKU5NTYYcfZCc/x8DylfrxQ
a7zucSZ3r5iuoiuDOGqsdZKPtJImvxNECpY9oU2aw1I
-> ssh-ed25519 eyVEZQ PgAkkmsG71yet2D3YGhj7npiiRNmHdVhJSf5aQEdQAY
T2FHjCMGy3cVM2DoSrpTG9mUzwEYmaQqYeG8mfgizOo
-> n7f-grease
f9wMNntlF2Tg0Javc6ZA8o1J9unFH1lnE+0ahbwkWLRTvDkHDtFqipyk+/NdsaOW
936dsytbmxeoHo+TDJD3RLBEv3FC7bj6Jqxvy/xTa0TxPdOiD00
--- XKujnaAhHN7bDG5+6pI08Ph3ckoYjLhoYETBNe0nnO8
'ンェテタヌ<06><>輦膨F^W*<12>Q-Iモ(<28>L)ーf Bヘ!t6.ッ?;ェsI'湜ウ容el`ァ<>ej0!螂Yマ+゚ォ\s

View File

@ -0,0 +1,14 @@
age-encryption.org/v1
-> ssh-ed25519 E8j6/g kMV8oOZ0VaMZpgXsITy926b2tz4gPkdFWCPBTjrHZws
d84LBwZKEseLfzxeWoAK4U7yvujb4tcHlhpN7ekrTMo
-> ssh-ed25519 jo1MPA rrGisZS1Cxz1MPrDVXM6onH1c1dR7Okin5Nt0xKwLCY
nm6d/qY8Nc/Sf/oYHlRkohlxrarK9YNVvOPLMQy0GKE
-> ssh-ed25519 eyVEZQ FzbjTRpUGtBADSjkghcbIMB54gfU9v5gdaRc0AIiU0g
KMx7n20YT98fnWVnL85U0hIXBSZLjmtAkb1xAJJsjyY
-> ,Xl5x-grease
IRMPRhKPrHEgzFPR7ina/RGj9ZrJBKjUPkvLHHeYbbqSTAVKaDvw7PB7PhKguZAS
sz9zClcUOw7oVCJrdBtxh7yk1jbswBHuAVth8WFprw
--- XdvJ6QFD6qJN6DGHUNeSO+NugB0GVvt+ikLmo9a/AQs
ÁÈgnûHZ2lYzbªh”r T8©}•þŒum 3yiCl§Í5ÚûÕaÂJd%ÒÙ„íPOöíó}÷$<24><>w
,I°ôÞD
^7¤ëœ-ÀÃâX€}®'€ë#øŽó¯d{^jÊÉ:×0ÓÉä¶v4p‡†Šÿ…O/éÓwÏøNñpÙ öÀk

View File

@ -0,0 +1,11 @@
age-encryption.org/v1
-> ssh-ed25519 E8j6/g ANeIiD0aMBEXSThwdKuAkMEYakWtJ9oKsMx7Er5AQH8
TsRjG7NgYgjhsQqMngmnGZd4lWaxYp1M5LcWaGRIT9c
-> ssh-ed25519 jo1MPA aVw/p6M8uXyl4HZZJI4ZBZxuIT+CPC9+gBIsORnkUE0
q4PiJIE+RprxBASX3Sius4NgwTI3F/yvq6q0E9jkYjM
-> ssh-ed25519 eyVEZQ no+onP9+ihNw/gGM+6BfFLmrgVnTHHQ5wVvvzPZyv2I
HmFQH0vvkqoYZPRHePXe2lPAAC+WqVvjnYaa0DOjBpE
-> Qp-grease
T2r53ALi6jaq69uttwHKx25eZ+nJAf13HhLkaqI3TyFDSO32hA
--- jooKpUOZlHPop6yiTbUjVoSMV4Dd6lZLxJvNHfBZDJ4
~ý®Ð¯§v5¹i™ÂXµÎÚ]0`žõ¼¸D<`™üa6Õ²`“@Ž>Z¾ÀŠŸK¨±“yÂ,"î«Ò€Ý†&Œ#¢¥ªÞ_`3wÊI¤º­÷®BêkFPìÄlÅÝ\^ð£9è}*Yzb5˜=ŒÁ?ž-êmk_SØÔ”33¤Ú¢\

Binary file not shown.