Begin Dendritic rewrite

This commit is contained in:
2026-03-06 16:24:53 -06:00
parent f3a90a0fe8
commit c1684a80f7
99 changed files with 4375 additions and 4643 deletions

View File

@@ -1,40 +0,0 @@
{
description = "Home-Manager Configuration";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
home-manager = {
url = "github:nix-community/home-manager/release-25.11";
inputs.nixpkgs.follows = "nixpkgs";
};
olympus = {
url = "git+https://gitea.esotericbytes.com/Blunkall-Technologies/Olympus";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
};
};
outputs = { self, nixpkgs, home-manager, olympus, ... } @ inputs: {
homeConfigurations = {
nathan = home-manager.lib.homeManagerConfiguration {
pkgs = import nixpkgs {
system = builtins.currentSystem;
};
modules = [
olympus.homes.nathan
./home.nix
];
extraSpecialArgs = {
inherit inputs;
};
};
};
};
}

View File

@@ -1,114 +1,114 @@
{ config, lib, pkgs, inputs, ... }: {
{ inputs, ... }: {
imports = let
dir = builtins.readDir ./.;
in (builtins.map (x: ./${x}) (builtins.filter
(file: (dir.${file} == "directory"))
(builtins.attrNames dir)
)) ++ [
inputs.sops-nix.homeManagerModules.sops
];
flake.homeModules.nathan = { config, lib, pkgs, ... }: {
options.homeconfig = with lib; {
imports = [
inputs.sops-nix.homeManagerModules.sops
];
name = mkOption {
type = with types; nullOr str;
default = null;
};
options.homeconfig = with lib; {
graphical = mkOption {
type = with types; bool;
default = true;
};
name = mkOption {
type = with types; nullOr str;
default = null;
};
standalone = mkOption {
type = with types; bool;
default = false;
};
graphical = mkOption {
type = with types; bool;
default = true;
};
virtual-machines = mkOption {
type = with types; bool;
default = false;
};
};
standalone = mkOption {
type = with types; bool;
default = false;
};
config = {
homeconfig = {
name = "nathan";
mpd.enable = lib.mkDefault true;
calcurse.enable = lib.mkDefault true;
git.enable = lib.mkDefault true;
nh.enable = lib.mkDefault true;
minimal = lib.mkDefault false;
hyprland.enable = lib.mkDefault config.homeconfig.graphical;
hyprlock.enable = lib.mkDefault config.homeconfig.hyprland.enable;
wal.enable = lib.mkDefault config.homeconfig.graphical;
hyprpanel.enable = lib.mkDefault config.homeconfig.hyprland.enable;
rofi.enable = lib.mkDefault config.homeconfig.hyprland.enable;
firefox.enable = lib.mkDefault config.homeconfig.graphical;
};
home.username = lib.mkDefault config.homeconfig.name;
home.homeDirectory = lib.mkDefault "/home/${config.home.username}";
home.stateVersion = "23.11";
home.pointerCursor = lib.mkIf config.homeconfig.graphical {
gtk.enable = true;
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Classic";
size = 16;
};
dconf.settings = lib.mkIf config.homeconfig.virtual-machines {
"org/virt-manager/virt-manager/connections" = {
autoconnect = ["qemu:///system"];
uris = ["qemu:///system"];
virtual-machines = mkOption {
type = with types; bool;
default = false;
};
};
gtk = lib.mkIf (config.homeconfig.graphical && config.homeconfig.hyprland.enable) {
enable = true;
theme.name = "Tokyonight-Dark";
theme.package = pkgs.tokyonight-gtk-theme;
iconTheme.package = pkgs.rose-pine-icon-theme;
iconTheme.name = "rose-pine-moon";
};
sops = {
age.keyFile = "${config.home.homeDirectory}/.config/sops/age/keys.txt";
defaultSopsFile = ./secrets.yaml;
defaultSopsFormat = "yaml";
config = {
#secrets."remoteBuildKey" = {};
};
homeconfig = {
name = "nathan";
services.mpris-proxy.enable = true;
mpd.enable = lib.mkDefault true;
calcurse.enable = lib.mkDefault true;
git.enable = lib.mkDefault true;
nh.enable = lib.mkDefault true;
programs.ssh = {
enable = true;
minimal = lib.mkDefault false;
hyprland.enable = lib.mkDefault config.homeconfig.graphical;
hyprlock.enable = lib.mkDefault config.homeconfig.hyprland.enable;
wal.enable = lib.mkDefault config.homeconfig.graphical;
#hyprpanel.enable = lib.mkDefault config.homeconfig.hyprland.enable;
rofi.enable = lib.mkDefault config.homeconfig.hyprland.enable;
firefox.enable = lib.mkDefault config.homeconfig.graphical;
matchBlocks = {
"builder" = {
hostname = "esotericbytes.com";
user = "remote-builder";
identityFile = "${config.home.homeDirectory}/.ssh/id_ed25519";
port = 22;
};
"remote" = {
hostname = "esotericbytes.com";
user = "nathan";
identityFile = "${config.home.homeDirectory}/.ssh/id_ed25519";
port = 22;
aurora.enable = lib.mkDefault config.homeconfig.hyprland.enable;
};
home.username = lib.mkDefault config.homeconfig.name;
home.homeDirectory = lib.mkDefault "/home/${config.home.username}";
home.stateVersion = "23.11";
home.pointerCursor = lib.mkIf config.homeconfig.graphical {
gtk.enable = true;
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Classic";
size = 16;
};
dconf.settings = lib.mkIf config.homeconfig.virtual-machines {
"org/virt-manager/virt-manager/connections" = {
autoconnect = ["qemu:///system"];
uris = ["qemu:///system"];
};
};
};
gtk = lib.mkIf (config.homeconfig.graphical && config.homeconfig.hyprland.enable) {
enable = true;
theme.name = "Tokyonight-Dark";
theme.package = pkgs.tokyonight-gtk-theme;
iconTheme.package = pkgs.rose-pine-icon-theme;
iconTheme.name = "rose-pine-moon";
};
sops = {
age.keyFile = "${config.home.homeDirectory}/.config/sops/age/keys.txt";
defaultSopsFile = ./secrets.yaml;
defaultSopsFormat = "yaml";
#secrets."remoteBuildKey" = {};
};
services.mpris-proxy.enable = true;
programs.ssh = {
enable = true;
matchBlocks = {
"builder" = {
hostname = "esotericbytes.com";
user = "remote-builder";
identityFile = "${config.home.homeDirectory}/.ssh/id_ed25519";
port = 22;
};
"remote" = {
hostname = "esotericbytes.com";
user = "nathan";
identityFile = "${config.home.homeDirectory}/.ssh/id_ed25519";
port = 22;
};
};
};
};
};
}

View File

@@ -1,12 +1,15 @@
{ config, lib, ... }: {
{ ... }: {
home.file = {
".config/hypr" = lib.mkIf config.homeconfig.hyprland.enable { source = ./hypr; recursive = true; };
".config/hyprpanel" = lib.mkIf config.homeconfig.hyprpanel.enable { source = ./hyprpanel; recursive = true; };
".config/wal/templates" = lib.mkIf config.homeconfig.wal.enable { source = ./wal/templates; recursive = true; };
".config/ohmyposh" = { source = ./ohmyposh; recursive = true; };
".config/quickshell" = lib.mkIf config.homeconfig.quickshell.enable { source = ./quickshell; recursive = true; };
"Pictures/Wallpaper" = lib.mkIf config.homeconfig.graphical { source = ./Wallpaper; recursive = true; };
};
flake.homeModules.nathan = { config, lib, ... }: {
home.file = {
".config/hypr" = lib.mkIf config.homeconfig.hyprland.enable { source = ./hypr; recursive = true; };
".config/hyprpanel" = lib.mkIf config.homeconfig.hyprpanel.enable { source = ./hyprpanel; recursive = true; };
".config/wal/templates" = lib.mkIf config.homeconfig.wal.enable { source = ./wal/templates; recursive = true; };
".config/ohmyposh" = { source = ./ohmyposh; recursive = true; };
".config/quickshell" = lib.mkIf config.homeconfig.quickshell.enable { source = ./quickshell; recursive = true; };
"Pictures/Wallpaper" = lib.mkIf config.homeconfig.graphical { source = ./Wallpaper; recursive = true; };
};
};
}

View File

@@ -1,23 +1,21 @@
{ config, lib, pkgs, inputs, ... }: let
system = "x86_64-linux";
{ inputs, ... }: {
flake.homeModules.nathan = { config, lib, pkgs, ... }: let
system = pkgs.stdenv.hostPlatform;
pkgs-us = import inputs.nixpkgs-us {
inherit system;
config.allowUnfree = true;
inherit system;
config.allowUnfree = true;
};
in {
imports = [
./scripts
];
options.homeconfig.minimal = with lib; options.mkOption {
type = with types; bool;
default = false;
};
options.homeconfig.minimal = with lib; options.mkOption {
type = with types; bool;
default = false;
};
config = with lib; mkMerge [
config = with lib; mkMerge [
{
home.packages = with pkgs; [
@@ -49,72 +47,73 @@
}
(mkIf config.homeconfig.graphical {
home.packages = with pkgs; [
grim
slurp
xfce.thunar
wl-clipboard
blueberry
];
})
home.packages = with pkgs; [
grim
slurp
xfce.thunar
wl-clipboard
blueberry
];
})
(mkIf (!config.homeconfig.minimal) {
home.packages = with pkgs; [
cava
android-tools
neovim-remote
zulu
fastfetch
ncmpcpp
playerctl
mpc
ffmpeg
];
})
home.packages = with pkgs; [
cava
android-tools
neovim-remote
zulu
fastfetch
ncmpcpp
playerctl
mpc
ffmpeg
];
})
(mkIf (!config.homeconfig.minimal && config.homeconfig.graphical) {
nixpkgs.config = {
allowUnfree = true;
};
nixpkgs.config = {
allowUnfree = true;
};
home.packages = with pkgs; [
handbrake
quickemu
bottles
home.packages = with pkgs; [
pkgs-us.runapp
brightnessctl
libdbusmenu-gtk3
lmms
handbrake
quickemu
bottles
pkgs-us.runapp
brightnessctl
libdbusmenu-gtk3
lmms
#unfree {
geogebra
spotify
discord
geogebra
spotify
discord
#}
rustdesk-flutter
mpv
vlc
pavucontrol
rpi-imager
tigervnc
keepassxc
localsend
rustdesk-flutter
mpv
vlc
pavucontrol
rpi-imager
tigervnc
keepassxc
localsend
#3D modeling/printing
blender
freecad-wayland
cura-appimage
blender
freecad-wayland
cura-appimage
#productivity
libreoffice
libreoffice
#games
prismlauncher
];
prismlauncher
];
})
];
];
};
}

View File

@@ -1,135 +1,138 @@
{ config, lib, pkgs, inputs, ... }: let
{ ... }: {
system = "x86_64-linux";
flake.homeModules.nathan = { config, lib, pkgs, inputs, ... }: let
system = "x86_64-linux";
pkgs-us = import inputs.nixpkgs-us {
inherit system;
config.allowUnfree = true;
inherit system;
config.allowUnfree = true;
};
in {
options = {
homeconfig.scripts.enable = lib.options.mkOption {
type = lib.types.bool;
default = true;
options = {
homeconfig.scripts.enable = lib.options.mkOption {
type = lib.types.bool;
default = true;
};
};
config = lib.mkMerge [
(lib.mkIf (config.homeconfig.hyprland.enable && config.homeconfig.scripts.enable) {
home.packages = [
(pkgs.writeShellScriptBin "hyprrun" ''
${pkgs-us.runapp}/bin/runapp ''$@
#uwsm app -- ''$@
'')
];
})
(lib.mkIf (!config.homeconfig.hyprland.enable && config.homeconfig.scripts.enable) {
home.packages = [
(pkgs.writeShellScriptBin "hyprrun" ''
eval "''$@"
'')
];
})
(lib.mkIf config.homeconfig.scripts.enable {
home.packages = [
#scripts
(pkgs.writeShellScriptBin "randWallpaper" ''
file=''$(ls ${config.home.homeDirectory}/Pictures/Wallpaper/ | shuf -n 1)
setWallpaper ${config.home.homeDirectory}/Pictures/Wallpaper/''$file
'')
(pkgs.writeShellScriptBin "setWallpaper" ''
if [[ ! -d /tmp/nathan ]]; then
mkdir /tmp/nathan
fi
img=''$(realpath "''${1:-$(find ~/Pictures/Wallpaper/* | rofi -dmenu)}")
n=''$(basename "''$img")
ext="''${n''\#''\#*.}"
out=''${3:-/dev/null}
if [[ ''$ext == "gif" || ''$ext == "mp4" ]]; then
yes | ${pkgs.ffmpeg}/bin/ffmpeg -i "''$img" -vframes 1 /tmp/nathan/tmp.jpg >> ''$out
cp /tmp/nathan/tmp.jpg /tmp/nathan/tmp2.jpg
pidof mpvpaper && pkill mpvpaper
${pkgs.swww}/bin/swww img /tmp/nathan/tmp.jpg -t wipe >> ''$out
${pkgs.hyprpanel}/bin/hyprpanel sw /tmp/nathan/tmp2.jpg >> ''$out
sleep 0.3
hyprctl dispatch exec "${pkgs.mpvpaper}/bin/mpvpaper ALL ''$img -o loop"
${pkgs.hyprpanel}/bin/hyprpanel sw /tmp/nathan/tmp.jpg >> ''$out
rm /tmp/nathan/tmp2.jpg
else
pidof mpvpaper && pkill mpvpaper
hyprctl dispatch exec "${pkgs.swww}/bin/swww img ''$img -t wipe" >> ''$out
${pkgs.hyprpanel}/bin/hyprpanel sw "''$img" >> ''$out
fi
changeColors "''$img" "''$2" >> ''$out
'')
(pkgs.writeShellScriptBin "changeColors" ''
img=''$(realpath "''$1")
alpha=''${2:-70}
if [[ ''$alpha -lt 0 ]]; then
alpha=0
elif [[ ''$alpha -gt 100 ]]; then
alpha=100
fi
if [[ -f ~/.config/wal/colorschemes/dark/''$(basename "''$img")-''$alpha.json ]]; then
${pkgs.pywal16}/bin/wal -n -f "''$(basename "''$img")-''$alpha"
else
${pkgs.pywal16}/bin/wal -n -i "''$img" -a "''$alpha" --cols16 -p "''$(basename "''$img")-''$alpha"
fi
colorPrefix
'')
(pkgs.writeShellScriptBin "colorPrefix" ''
pidof firefox > /dev/null && ${pkgs.pywalfox-native}/bin/pywalfox update &
pidof kitty > /dev/null && pkill -USR1 kitty
pidof cava > /dev/null && pkill -USR1 cava
for i in ''$(ls /run/user/1000 | grep nvim); do
${pkgs.neovim-remote}/bin/nvr -s --servername /run/user/1000/''$i --remote-send '<cmd>colorscheme pywal<CR>';
done
eval "''$@"
'')
(pkgs.writeShellScriptBin "onSystemStart" ''
if [[ ! -d /tmp/nathan ]]; then
mkdir /tmp/nathan
fi
if [[ -f ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid ]]; then
rm ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid
fi
hyprctl --batch "\
dispatch exec ${pkgs.swww}/bin/swww-daemon ;\
dispatch exec setWallpaper ${config.home.homeDirectory}/Pictures/Wallpaper/bluescape.jpg ;\
dispatch exec ${pkgs.pyprland}/bin/pypr ;\
dispatch exec ${pkgs.netbird-ui}/bin/netbird-ui ;\
dispatch exec ${pkgs.hyprpolkitagent}/libexec/hyprpolkitagent ;\
setcursor Bibata-Modern-Classic 16"
sleep 3
hyprctl reload
hyprctl dispatch exec ${pkgs.pyprland}/bin/pypr toggle calendar
#tmux new-session -s hyprland
'')
];
})
];
};
config = lib.mkMerge [
(lib.mkIf (config.homeconfig.hyprland.enable && config.homeconfig.scripts.enable) {
home.packages = [
(pkgs.writeShellScriptBin "hyprrun" ''
${pkgs-us.runapp}/bin/runapp ''$@
#uwsm app -- ''$@
'')
];
})
(lib.mkIf (!config.homeconfig.hyprland.enable && config.homeconfig.scripts.enable) {
home.packages = [
(pkgs.writeShellScriptBin "hyprrun" ''
eval "''$@"
'')
];
})
(lib.mkIf config.homeconfig.scripts.enable {
home.packages = [
#scripts
(pkgs.writeShellScriptBin "randWallpaper" ''
file=''$(ls ${config.home.homeDirectory}/Pictures/Wallpaper/ | shuf -n 1)
setWallpaper ${config.home.homeDirectory}/Pictures/Wallpaper/''$file
'')
(pkgs.writeShellScriptBin "setWallpaper" ''
if [[ ! -d /tmp/nathan ]]; then
mkdir /tmp/nathan
fi
img=''$(realpath "''${1:-$(find ~/Pictures/Wallpaper/* | rofi -dmenu)}")
n=''$(basename "''$img")
ext="''${n''\#''\#*.}"
out=''${3:-/dev/null}
if [[ ''$ext == "gif" || ''$ext == "mp4" ]]; then
yes | ${pkgs.ffmpeg}/bin/ffmpeg -i "''$img" -vframes 1 /tmp/nathan/tmp.jpg >> ''$out
cp /tmp/nathan/tmp.jpg /tmp/nathan/tmp2.jpg
pidof mpvpaper && pkill mpvpaper
${pkgs.swww}/bin/swww img /tmp/nathan/tmp.jpg -t wipe >> ''$out
${pkgs.hyprpanel}/bin/hyprpanel sw /tmp/nathan/tmp2.jpg >> ''$out
sleep 0.3
hyprctl dispatch exec "${pkgs.mpvpaper}/bin/mpvpaper ALL ''$img -o loop"
${pkgs.hyprpanel}/bin/hyprpanel sw /tmp/nathan/tmp.jpg >> ''$out
rm /tmp/nathan/tmp2.jpg
else
pidof mpvpaper && pkill mpvpaper
hyprctl dispatch exec "${pkgs.swww}/bin/swww img ''$img -t wipe" >> ''$out
${pkgs.hyprpanel}/bin/hyprpanel sw "''$img" >> ''$out
fi
changeColors "''$img" "''$2" >> ''$out
'')
(pkgs.writeShellScriptBin "changeColors" ''
img=''$(realpath "''$1")
alpha=''${2:-70}
if [[ ''$alpha -lt 0 ]]; then
alpha=0
elif [[ ''$alpha -gt 100 ]]; then
alpha=100
fi
if [[ -f ~/.config/wal/colorschemes/dark/''$(basename "''$img")-''$alpha.json ]]; then
${pkgs.pywal16}/bin/wal -n -f "''$(basename "''$img")-''$alpha"
else
${pkgs.pywal16}/bin/wal -n -i "''$img" -a "''$alpha" --cols16 -p "''$(basename "''$img")-''$alpha"
fi
colorPrefix
'')
(pkgs.writeShellScriptBin "colorPrefix" ''
pidof firefox > /dev/null && ${pkgs.pywalfox-native}/bin/pywalfox update &
pidof kitty > /dev/null && pkill -USR1 kitty
pidof cava > /dev/null && pkill -USR1 cava
for i in ''$(ls /run/user/1000 | grep nvim); do
${pkgs.neovim-remote}/bin/nvr -s --servername /run/user/1000/''$i --remote-send '<cmd>colorscheme pywal<CR>';
done
eval "''$@"
'')
(pkgs.writeShellScriptBin "onSystemStart" ''
if [[ ! -d /tmp/nathan ]]; then
mkdir /tmp/nathan
fi
if [[ -f ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid ]]; then
rm ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid
fi
hyprctl --batch "\
dispatch exec ${pkgs.swww}/bin/swww-daemon ;\
dispatch exec setWallpaper ${config.home.homeDirectory}/Pictures/Wallpaper/bluescape.jpg ;\
dispatch exec ${pkgs.pyprland}/bin/pypr ;\
dispatch exec ${pkgs.netbird-ui}/bin/netbird-ui ;\
dispatch exec ${pkgs.hyprpolkitagent}/libexec/hyprpolkitagent ;\
setcursor Bibata-Modern-Classic 16"
sleep 3
hyprctl reload
hyprctl dispatch exec ${pkgs.pyprland}/bin/pypr toggle calendar
#tmux new-session -s hyprland
'')
];
})
];
}

View File

@@ -0,0 +1,17 @@
{ ... }: {
flake.homeModules.nathan = { config, lib, ... }: {
options.homeconfig.aurora.enable = with lib; mkOption {
type = with types; bool;
default = false;
};
config = lib.mkIf config.homeconfig.aurora.enable {
programs.aurora = {
enable = true;
};
};
};
}

View File

@@ -1,14 +1,17 @@
{ config, lib, pkgs, ... }: {
{ ... }: {
options.homeconfig.calcurse.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
flake.homeModules.nathan = { config, lib, pkgs, ... }: {
config = lib.mkIf config.homeconfig.calcurse.enable {
home.packages = with pkgs; [
calcurse
libnotify
];
options.homeconfig.calcurse.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
config = lib.mkIf config.homeconfig.calcurse.enable {
home.packages = with pkgs; [
calcurse
libnotify
];
};
};
}

View File

@@ -1,19 +1,14 @@
{ config, lib, pkgs, inputs, ... }: {
{ ... }: {
imports = let
dir = builtins.readDir ./.;
in builtins.map (x: ./${x}) (builtins.filter
(file: (dir.${file} == "directory"))
(builtins.attrNames dir)
);
flake.homeModules.nathan = { config, lib, pkgs, inputs, ... }: {
config = {
config = {
home.packages = lib.mkIf (!config.homeconfig.wal.enable) [
inputs.nixvim.packages.${pkgs.stdenv.hostPlatform.system}.default
];
home.packages = lib.mkIf (!config.homeconfig.wal.enable) [
inputs.nixvim.packages.${pkgs.stdenv.hostPlatform.system}.default
];
home.sessionVariables.EDITOR = "nvim";
home.sessionVariables.EDITOR = "nvim";
};
};
}

View File

@@ -1,59 +1,62 @@
{ config, lib, pkgs, inputs, ... }: {
{ ... }: {
options.homeconfig.firefox.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
flake.homeModules.nathan = { config, lib, pkgs, inputs, ... }: {
config = lib.mkIf config.homeconfig.firefox.enable {
options.homeconfig.firefox.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
home.sessionVariables.BROWSER = "${config.programs.firefox.package}/bin/firefox";
config = lib.mkIf config.homeconfig.firefox.enable {
home.packages = lib.mkIf config.homeconfig.wal.enable [
pkgs.pywalfox-native
];
home.sessionVariables.BROWSER = "${config.programs.firefox.package}/bin/firefox";
home.file.".mozilla/native-messaging-hosts/pywalfox.json".text = let
pywalfox-wrapper = pkgs.writeShellScriptBin "pywalfox-wrapper" ''
home.packages = lib.mkIf config.homeconfig.wal.enable [
pkgs.pywalfox-native
];
home.file.".mozilla/native-messaging-hosts/pywalfox.json".text = let
pywalfox-wrapper = pkgs.writeShellScriptBin "pywalfox-wrapper" ''
${pkgs.pywalfox-native}/bin/pywalfox start
'';
in lib.replaceStrings [ "<path>" ] [
"${pywalfox-wrapper}/bin/pywalfox-wrapper"
] (lib.readFile "${pkgs.pywalfox-native}/lib/python3.13/site-packages/pywalfox/assets/manifest.json");
'';
in lib.replaceStrings [ "<path>" ] [
"${pywalfox-wrapper}/bin/pywalfox-wrapper"
] (lib.readFile "${pkgs.pywalfox-native}/lib/python3.13/site-packages/pywalfox/assets/manifest.json");
programs.firefox = {
programs.firefox = {
enable = true;
package = pkgs.firefox;
enable = true;
package = pkgs.firefox;
profiles.nathan = {
search = {
default = "ddg";
privateDefault = "ddg";
force = true;
};
bookmarks = {
force = true;
settings = [
profiles.nathan = {
search = {
default = "ddg";
privateDefault = "ddg";
force = true;
};
bookmarks = {
force = true;
settings = [
{
name = "toolbar";
toolbar = true;
bookmarks = [
{
name = "NixOS Search - Packages";
url = "https://search.nixos.org/packages";
}
{
name = "NixOS Search - Packages";
url = "https://search.nixos.org/packages";
}
];
}
];
};
extensions.packages = with inputs.firefox-addons.packages.${pkgs.stdenv.hostPlatform.system}; [
ublock-origin
keepassxc-browser
pywalfox
];
};
extensions.packages = with inputs.firefox-addons.packages.${pkgs.stdenv.hostPlatform.system}; [
ublock-origin
keepassxc-browser
pywalfox
];
};
};
};

View File

@@ -1,44 +1,47 @@
{ config, lib, ... }: {
{ ... }: {
options.homeconfig.git.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
flake.homeModules.nathan = { config, lib, ... }: {
config = lib.mkIf config.homeconfig.git.enable {
sops = {
secrets = {
"git/username" = {};
"git/email" = {};
};
templates.gitconfig.content = ''
[user]
name = "${config.sops.placeholder."git/username"}"
email = "${config.sops.placeholder."git/email"}"
'';
options.homeconfig.git.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
programs.git = {
enable = true;
includes = [
{ path = "${config.sops.templates.gitconfig.path}"; }
];
settings = {
init = {
defaultBranch = "master";
config = lib.mkIf config.homeconfig.git.enable {
sops = {
secrets = {
"git/username" = {};
"git/email" = {};
};
safe.directory = "/etc/nixos";
templates.gitconfig.content = ''
[user]
name = "${config.sops.placeholder."git/username"}"
email = "${config.sops.placeholder."git/email"}"
'';
};
url = {
"ssh://gitea@gitea.esotericbytes.com/" = {
insteadOf = [
"server:"
];
programs.git = {
enable = true;
includes = [
{ path = "${config.sops.templates.gitconfig.path}"; }
];
settings = {
init = {
defaultBranch = "master";
};
safe.directory = "/etc/nixos";
url = {
"ssh://gitea@gitea.esotericbytes.com/" = {
insteadOf = [
"server:"
];
};
};
};
};

View File

@@ -1,51 +1,54 @@
{ config, lib, pkgs, ... }: {
{ ... }: {
options.homeconfig.hyprland.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
flake.homeModules.nathan = { config, lib, pkgs, ... }: {
config = lib.mkIf config.homeconfig.hyprland.enable {
options.homeconfig.hyprland.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
home.sessionVariables.NIX_OZONE_WL = "1";
config = lib.mkIf config.homeconfig.hyprland.enable {
programs.kitty.enable = lib.mkDefault true;
home.sessionVariables.NIX_OZONE_WL = "1";
home.packages = with pkgs; [
pyprland
];
programs.kitty.enable = lib.mkDefault true;
home.activation.extraHyprFile = lib.hm.dag.entryAfter ["writeBoundary"] ''
if [[ ! -f ${config.home.homeDirectory}/.config/hypr/otf.conf ]]; then
touch ${config.home.homeDirectory}/.config/hypr/otf.conf
fi
home.packages = with pkgs; [
pyprland
];
if [[ ! -f ${config.home.homeDirectory}/.config/background ]]; then
cp ${config.home.homeDirectory}/Pictures/Wallpaper/bluescape.jpg ${config.home.homeDirectory}/.config/background
chmod 600 ${config.home.homeDirectory}/.config/background
fi
'';
home.activation.extraHyprFile = lib.hm.dag.entryAfter ["writeBoundary"] ''
if [[ ! -f ${config.home.homeDirectory}/.config/hypr/otf.conf ]]; then
touch ${config.home.homeDirectory}/.config/hypr/otf.conf
fi
if [[ ! -f ${config.home.homeDirectory}/.config/background ]]; then
cp ${config.home.homeDirectory}/Pictures/Wallpaper/bluescape.jpg ${config.home.homeDirectory}/.config/background
chmod 600 ${config.home.homeDirectory}/.config/background
fi
'';
wayland.windowManager.hyprland = {
wayland.windowManager.hyprland = {
enable = true;
enable = true;
systemd = {
enable = false;
variables = [ "--all" ];
};
extraConfig = (if config.homeconfig.hyprpanel.enable then ''
bind = , Print, exec, bash -c ${pkgs.hyprpanel}/share/scripts/screenshot.sh"
'' else ''
bind = , Print, exec, grim -g "$(slurp)"
'') + ''
source = ${config.home.homeDirectory}/.config/hypr/main.conf
exec-shutdown = if [[ -f ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid ]]; then rm ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid; fi
'';
systemd = {
enable = false;
variables = [ "--all" ];
};
extraConfig = (if config.homeconfig.hyprpanel.enable then ''
bind = , Print, exec, bash -c ${pkgs.hyprpanel}/share/scripts/screenshot.sh"
'' else ''
bind = , Print, exec, grim -g "$(slurp)"
'') + ''
source = ${config.home.homeDirectory}/.config/hypr/main.conf
exec-shutdown = if [[ -f ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid ]]; then rm ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid; fi
'';
};
};
}

View File

@@ -1,51 +1,54 @@
{ config, lib, pkgs, ... }: {
{ ... }: {
options.homeconfig.hyprlock.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
flake.homeModules.nathan = { config, lib, pkgs, ... }: {
config = lib.mkIf config.homeconfig.hyprlock.enable {
programs.hyprlock = {
enable = true;
options.homeconfig.hyprlock.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
services.hypridle = {
enable = true;
config = lib.mkIf config.homeconfig.hyprlock.enable {
settings = {
programs.hyprlock = {
enable = true;
};
general = {
lock_cmd = "pidof hyprlock || hyprlock"; # avoid starting multiple hyprlock instances.
before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
after_sleep_cmd = "hyprctl --instance 0 dispatch dpms on"; # to avoid having to press a key twice to turn on the display.
services.hypridle = {
enable = true;
settings = {
general = {
lock_cmd = "pidof hyprlock || hyprlock"; # avoid starting multiple hyprlock instances.
before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
after_sleep_cmd = "hyprctl --instance 0 dispatch dpms on"; # to avoid having to press a key twice to turn on the display.
};
listener = [
{
timeout = 150; # 2.5min.
on-timeout = "brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor.
on-resume = "brightnessctl -r"; # monitor backlight restore.
}
{
timeout = 300; # 5min
on-timeout = "loginctl lock-session"; # lock screen when timeout has passed
}
{
timeout = 330; # 5.5min
on-timeout = "hyprctl --instance 0 dispatch dpms off"; # screen off when timeout has passed
on-resume = "hyprctl --instance 0 dispatch dpms on && brightnessctl -r"; # screen on when activity is detected after timeout has fired.
}
{
timeout = 1800; # 30min
on-timeout = "systemctl suspend"; # suspend pc
}
];
};
listener = [
{
timeout = 150; # 2.5min.
on-timeout = "brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor.
on-resume = "brightnessctl -r"; # monitor backlight restore.
}
{
timeout = 300; # 5min
on-timeout = "loginctl lock-session"; # lock screen when timeout has passed
}
{
timeout = 330; # 5.5min
on-timeout = "hyprctl --instance 0 dispatch dpms off"; # screen off when timeout has passed
on-resume = "hyprctl --instance 0 dispatch dpms on && brightnessctl -r"; # screen on when activity is detected after timeout has fired.
}
{
timeout = 1800; # 30min
on-timeout = "systemctl suspend"; # suspend pc
}
];
};
};
};

View File

@@ -1,14 +1,17 @@
{ config, lib, ... }: {
{ ... }: {
options.homeconfig.hyprpanel.enable = with lib; mkOption {
type = with types; bool;
default = false;
};
flake.homeModules.nathan = { config, lib, ... }: {
config = lib.mkIf config.homeconfig.hyprpanel.enable {
programs.hyprpanel = {
enable = true;
options.homeconfig.hyprpanel.enable = with lib; mkOption {
type = with types; bool;
default = false;
};
config = lib.mkIf config.homeconfig.hyprpanel.enable {
programs.hyprpanel = {
enable = true;
};
};
};
}

View File

@@ -1,21 +1,24 @@
{ config, lib, inputs, ... }: {
{ ... }: {
options.homeconfig.nh.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
flake.homeModules.nathan = { config, lib, inputs, ... }: {
config = lib.mkIf config.homeconfig.nh.enable {
programs.nh = {
enable = true;
package = let pkgs-us = import inputs.nixpkgs-us { system = "x86_64-linux"; }; in pkgs-us.nh;
#flake = "${config.home.homeDirectory}/Projects/Olympus";
options.homeconfig.nh.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
clean = {
config = lib.mkIf config.homeconfig.nh.enable {
programs.nh = {
enable = true;
dates = "weekly";
extraArgs = "--keep 5 --keep-since 5d";
package = let pkgs-us = import inputs.nixpkgs-us { system = "x86_64-linux"; }; in pkgs-us.nh;
#flake = "${config.home.homeDirectory}/Projects/Olympus";
clean = {
enable = true;
dates = "weekly";
extraArgs = "--keep 5 --keep-since 5d";
};
};
};
};

View File

@@ -1,19 +1,22 @@
{ config, lib, pkgs, inputs, ... }: {
{ ... }: {
options.homeconfig.wal.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
flake.homeModules.nathan = { config, lib, pkgs, inputs, ... }: {
config = lib.mkIf config.homeconfig.wal.enable {
options.homeconfig.wal.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
home.packages = with pkgs; [
inputs.nixvim.packages.${pkgs.stdenv.hostPlatform.system}.pywal
config = lib.mkIf config.homeconfig.wal.enable {
pywal16
imagemagick
];
home.packages = with pkgs; [
inputs.nixvim.packages.${pkgs.stdenv.hostPlatform.system}.pywal
pywal16
imagemagick
];
};
};
}

View File

@@ -1,26 +1,29 @@
{ config, lib, ... }: {
{ ... }: {
options.homeconfig.quickshell.enable = with lib; mkOption {
type = with types; bool;
default = false;
};
flake.homeModules.nathan = { config, lib, ... }: {
config = lib.mkIf config.homeconfig.quickshell.enable {
programs.quickshell = {
enable = true;
options.homeconfig.quickshell.enable = with lib; mkOption {
type = with types; bool;
default = false;
};
configs = {
config = lib.mkIf config.homeconfig.quickshell.enable {
default = config.homeDirectory + "/${config.home.file.".config/quickshell".target}";
};
systemd = {
programs.quickshell = {
enable = true;
target = lib.mkIf config.homeconfig.hyprland.enable "wayland-session@Hyprland.target";
};
activeConfig = "default";
configs = {
default = config.homeDirectory + "/${config.home.file.".config/quickshell".target}";
};
systemd = {
enable = true;
target = lib.mkIf config.homeconfig.hyprland.enable "wayland-session@Hyprland.target";
};
activeConfig = "default";
};
};
};
}

View File

@@ -1,19 +1,22 @@
{ config, lib, pkgs, ... }: {
options.homeconfig.rofi.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
{ ... }: {
config = lib.mkIf config.homeconfig.rofi.enable {
programs.rofi = {
flake.homeModules.nathan = { config, lib, pkgs, ... }: {
enable = true;
package = pkgs.rofi;
options.homeconfig.rofi.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
cycle = true;
config = lib.mkIf config.homeconfig.rofi.enable {
programs.rofi = {
theme = "/home/nathan/.cache/wal/colors-rofi-dark.rasi";
enable = true;
package = pkgs.rofi;
cycle = true;
theme = "/home/nathan/.cache/wal/colors-rofi-dark.rasi";
};
};
};
}

View File

@@ -1,31 +1,35 @@
{ config, lib, pkgs, ... }: {
{ ... }: {
home.packages = with pkgs; [ oh-my-posh ];
flake.homeModules.nathan = { config, lib, pkgs, ... }: {
programs.bash = {
enable = true;
enableCompletion = true;
home.packages = with pkgs; [ oh-my-posh ];
shellAliases = {
ls = "eza";
ll = "ls -l";
programs.bash = {
enable = true;
enableCompletion = true;
ksh = "kitten ssh";
shellAliases = {
ls = "eza";
ll = "ls -l";
vi = "nvim";
vim = "nvim";
ksh = "kitten ssh";
v = "nvim";
vi = "nvim";
vim = "nvim";
};
bashrcExtra = ''
source ${pkgs.blesh}/share/blesh/ble.sh
'';
initExtra = if config.homeconfig.wal.enable then (lib.mkBefore ''
cat ${config.home.homeDirectory}/.cache/wal/sequences
eval "$(oh-my-posh init bash --config ${config.home.homeDirectory}/.cache/wal/ohmyposh.toml)"
'') else (lib.mkBefore ''
eval "$(oh-my-posh init bash --config ${config.home.homeDirectory}/.config/ohmyposh/ohmyposh.toml)"
'');
};
bashrcExtra = ''
source ${pkgs.blesh}/share/blesh/ble.sh
'';
initExtra = if config.homeconfig.wal.enable then (lib.mkBefore ''
cat ${config.home.homeDirectory}/.cache/wal/sequences
eval "$(oh-my-posh init bash --config ${config.home.homeDirectory}/.cache/wal/ohmyposh.toml)"
'') else (lib.mkBefore ''
eval "$(oh-my-posh init bash --config ${config.home.homeDirectory}/.config/ohmyposh/ohmyposh.toml)"
'');
};
}

View File

@@ -1,18 +1,21 @@
{ config, lib, pkgs, ... }: {
{ ... }: {
programs.bat = {
flake.homeModules.nathan = { config, lib, pkgs, ... }: {
enable = true;
programs.bat = {
extraPackages = with pkgs.bat-extras; [
batman
batpipe
batgrep
batdiff
batwatch
prettybat
];
enable = true;
extraPackages = with pkgs.bat-extras; [
batman
batpipe
batgrep
batdiff
batwatch
prettybat
];
};
};
};
}

View File

@@ -1,17 +0,0 @@
{ ... }: {
imports = [
./bat
./bash
./eza
./fzf
./lf
./tmux
./kitty
./zoxide
./zsh
./ssh
./ohmyposh
./opencode
];
}

View File

@@ -1,17 +1,20 @@
{ config, lib, pkgs, ... }: {
{ ... }: {
programs.eza = {
flake.homeModules.nathan = { config, lib, pkgs, ... }: {
enable = true;
programs.eza = {
enableZshIntegration = true;
enable = true;
extraOptions = [
"--color=auto"
];
enableZshIntegration = true;
git = true;
extraOptions = [
"--color=auto"
];
icons = "auto";
};
git = true;
icons = "auto";
};
};
}

View File

@@ -1,15 +1,18 @@
{ config, lib, pkgs, ... }: {
{ ... }: {
programs.fzf = {
enable = true;
flake.homeModules.nathan = { config, lib, pkgs, ... }: {
enableZshIntegration = true;
programs.fzf = {
tmux = {
#enableShellIntegration = true;
enable = true;
#shellIntegrationOptions = [];
enableZshIntegration = true;
tmux = {
#enableShellIntegration = true;
#shellIntegrationOptions = [];
};
};
};
};
}

View File

@@ -1,33 +1,36 @@
{ config, ... }: {
programs.kitty = {
enable = true;
{ ... }: {
font = {
name = "FiraCode Nerd Font";
size = 12;
flake.homeModules.nathan = { config, ... }: {
programs.kitty = {
enable = true;
font = {
name = "FiraCode Nerd Font";
size = 12;
};
extraConfig = ''
confirm_os_window_close 0
include ${config.home.homeDirectory}/.cache/wal/colors-kitty.conf
disable_ligatures never
dynamic_background_opacity yes
tab_bar_edge top
map ctrl+shift+t new_tab
map ctrl+shift+w close_tab
map ctrl+tab next_tab
map ctrl+shift+tab previous_tab
'';
};
};
extraConfig = ''
confirm_os_window_close 0
include ${config.home.homeDirectory}/.cache/wal/colors-kitty.conf
disable_ligatures never
dynamic_background_opacity yes
tab_bar_edge top
map ctrl+shift+t new_tab
map ctrl+shift+w close_tab
map ctrl+tab next_tab
map ctrl+shift+tab previous_tab
'';
};
}

View File

@@ -1,7 +1,10 @@
{ ... }: {
config = {
programs.lf = {
enable = true;
flake.homeModules.nathan = { ... }: {
config = {
programs.lf = {
enable = true;
};
};
};
}

View File

@@ -1,136 +1,139 @@
{ config, lib, pkgs, ... }: {
{ ... }: {
home.packages = with pkgs; [
oh-my-posh
];
programs.zsh = {
initContent = with lib; mkMerge [
(mkIf config.homeconfig.wal.enable (mkBefore ''
cat ${config.home.homeDirectory}/.cache/wal/sequences
eval "$(oh-my-posh init zsh --config ${config.home.homeDirectory}/.cache/wal/ohmyposh.toml)"
''))
flake.homeModules.nathan = { config, lib, pkgs, ... }: {
(mkIf (!config.homeconfig.wal.enable) (mkBefore ''
eval "$(oh-my-posh init zsh --config ${config.home.homeDirectory}/.config/ohmyposh/ohmyposh.toml)"
''))
];
home.packages = with pkgs; [
oh-my-posh
];
};
programs.zsh = {
home.file.".config/wal/templates/ohmyposh.toml".text = ''
initContent = with lib; mkMerge [
(mkIf config.homeconfig.wal.enable (mkBefore ''
cat ${config.home.homeDirectory}/.cache/wal/sequences
eval "$(oh-my-posh init zsh --config ${config.home.homeDirectory}/.cache/wal/ohmyposh.toml)"
''))
(mkIf (!config.homeconfig.wal.enable) (mkBefore ''
eval "$(oh-my-posh init zsh --config ${config.home.homeDirectory}/.config/ohmyposh/ohmyposh.toml)"
''))
];
};
home.file.".config/wal/templates/ohmyposh.toml".text = ''
#:schema https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json
version = 2
final_space = true
console_title_template = '{{{{ .Shell }}}} in {{{{ .Folder }}}}'
version = 2
final_space = true
console_title_template = '{{{{ .Shell }}}} in {{{{ .Folder }}}}'
[[blocks]]
type = 'prompt'
alignment = 'left'
newline = true
[[blocks]]
type = 'prompt'
alignment = 'left'
newline = true
[[blocks.segments]]
type = 'os'
style = 'diamond'
trailing_diamond = ''
background = 'p:c1'
foreground = 'p:c12'
template = ' {{{{ .Icon }}}} '
[[blocks.segments]]
type = 'os'
style = 'diamond'
trailing_diamond = ''
background = 'p:c1'
foreground = 'p:c12'
template = ' {{{{ .Icon }}}} '
[[blocks.segments]]
type = 'session'
style = 'diamond'
trailing_diamond = ''
background = 'p:c2'
foreground = 'p:c14'
template = '{{{{ .UserName }}}}@{{{{ .HostName }}}}'
[[blocks.segments]]
type = 'session'
style = 'diamond'
trailing_diamond = ''
background = 'p:c2'
foreground = 'p:c14'
template = '{{{{ .UserName }}}}@{{{{ .HostName }}}}'
[[blocks.segments]]
type = 'path'
style = 'diamond'
trailing_diamond = ''
background = 'p:c4'
foreground = 'p:c13'
template = '{{{{ .Path }}}}'
[[blocks.segments]]
type = 'path'
style = 'diamond'
trailing_diamond = ''
background = 'p:c4'
foreground = 'p:c13'
template = '{{{{ .Path }}}}'
[blocks.segments.properties]
style = 'full'
[blocks.segments.properties]
style = 'full'
[[blocks]]
type = 'prompt'
overflow = 'hidden'
alignment = 'right'
[[blocks]]
type = 'prompt'
overflow = 'hidden'
alignment = 'right'
[[blocks.segments]]
type = 'executiontime'
style = 'diamond'
leading_diamond = ''
background = 'p:c4'
foreground = 'p:c13'
template = '{{{{ .FormattedMs }}}}'
[[blocks.segments]]
type = 'executiontime'
style = 'diamond'
leading_diamond = ''
background = 'p:c4'
foreground = 'p:c13'
template = '{{{{ .FormattedMs }}}}'
[[blocks.segments]]
type = 'time'
style = 'diamond'
leading_diamond = ''
background = 'p:c2'
foreground = 'p:c14'
[[blocks.segments]]
type = 'time'
style = 'diamond'
leading_diamond = ''
background = 'p:c2'
foreground = 'p:c14'
[[blocks.segments]]
type = 'shell'
style = 'diamond'
leading_diamond = ''
background = 'p:c1'
foreground = 'p:c12'
[[blocks.segments]]
type = 'shell'
style = 'diamond'
leading_diamond = ''
background = 'p:c1'
foreground = 'p:c12'
[[blocks]]
type = 'prompt'
alignment = 'left'
newline = true
[[blocks]]
type = 'prompt'
alignment = 'left'
newline = true
[[blocks.segments]]
type = 'text'
style = 'plain'
background = 'transparent'
foreground_templates = [
"{{{{ if gt .Code 0 }}}}p:c13{{{{end}}}}",
"{{{{ if eq .Code 0 }}}}p:c14{{{{end}}}}",
]
template = "{{{{ if gt .Code 0 }}}}! {{{{else}}}} {{{{end}}}}"
[[blocks.segments]]
type = 'text'
style = 'plain'
background = 'transparent'
foreground_templates = [
"{{{{ if gt .Code 0 }}}}p:c13{{{{end}}}}",
"{{{{ if eq .Code 0 }}}}p:c14{{{{end}}}}",
]
template = "{{{{ if gt .Code 0 }}}}! {{{{else}}}} {{{{end}}}}"
[transient_prompt]
foreground_templates = [
"{{{{ if gt .Code 0 }}}}p:c13{{{{end}}}}",
"{{{{ if eq .Code 0 }}}}p:c14{{{{end}}}}",
]
background = 'transparent'
template = "{{{{ if gt .Code 0 }}}}! {{{{else}}}} {{{{end}}}}"
[transient_prompt]
foreground_templates = [
"{{{{ if gt .Code 0 }}}}p:c13{{{{end}}}}",
"{{{{ if eq .Code 0 }}}}p:c14{{{{end}}}}",
]
background = 'transparent'
template = "{{{{ if gt .Code 0 }}}}! {{{{else}}}} {{{{end}}}}"
[secondary_prompt]
background = 'transparent'
forground = 'p:c14'
template = " "
[secondary_prompt]
background = 'transparent'
forground = 'p:c14'
template = " "
[palette]
[palette]
c0 = "{color0}"
c1 = "{color1}"
c2 = "{color2}"
c3 = "{color3}"
c4 = "{color4}"
c5 = "{color5}"
c6 = "{color6}"
c7 = "{color7}"
c8 = "{color8}"
c9 = "{color9}"
c10 = "{color10}"
c11 = "{color11}"
c12 = "{color12}"
c13 = "{color13}"
c14 = "{color14}"
c15 = "{color15}"
'';
c0 = "{color0}"
c1 = "{color1}"
c2 = "{color2}"
c3 = "{color3}"
c4 = "{color4}"
c5 = "{color5}"
c6 = "{color6}"
c7 = "{color7}"
c8 = "{color8}"
c9 = "{color9}"
c10 = "{color10}"
c11 = "{color11}"
c12 = "{color12}"
c13 = "{color13}"
c14 = "{color14}"
c15 = "{color15}"
'';
};
}

View File

@@ -1,48 +1,51 @@
{ config, lib, ... }: {
{ ... }: {
options.homeconfig.opencode.enable = with lib; mkOption {
type = with types; bool;
default = true;
};
flake.homeModules.nathan = { config, lib, ... }: {
config = lib.mkIf config.homeconfig.opencode.enable {
options.homeconfig.opencode.enable = with lib; mkOption {
type = with types; bool;
default = true;
};
programs.opencode = {
enable = true;
config = lib.mkIf config.homeconfig.opencode.enable {
settings = {
theme = "system";
model = "ollama-remote/qwen3:8b";
programs.opencode = {
enable = true;
provider = {
ollama-local = {
name = "Ollama (local)";
settings = {
theme = "system";
model = "ollama-remote/qwen3:8b";
npm = "@ai-sdk/openai-compatible";
provider = {
ollama-local = {
name = "Ollama (local)";
options.baseURL = "http://localhost:11434/v1";
npm = "@ai-sdk/openai-compatible";
options.baseURL = "http://localhost:11434/v1";
models = {
"ministral-3:8b".name = "Ministral 3 8B";
"llama3.2".name = "Llama 3.2";
"qwen3:8b".name = "Qwen 3";
};
models = {
"ministral-3:8b".name = "Ministral 3 8B";
"llama3.2".name = "Llama 3.2";
"qwen3:8b".name = "Qwen 3";
};
};
ollama-remote = {
name = "Ollama (remote)";
ollama-remote = {
name = "Ollama (remote)";
npm = "@ai-sdk/openai-compatible";
npm = "@ai-sdk/openai-compatible";
options.baseURL = "https://ollama.esotericbytes.com/v1";
options.baseURL = "https://ollama.esotericbytes.com/v1";
models = {
"ministral-3:8b".name = "Ministral 3 8B";
"llama3.2".name = "Llama 3.2";
"qwen3:8b".name = "Qwen 3";
};
models = {
"ministral-3:8b".name = "Ministral 3 8B";
"llama3.2".name = "Llama 3.2";
"qwen3:8b".name = "Qwen 3";
};
};
};
};

View File

@@ -1,24 +1,27 @@
{ ... }: {
programs.ssh = {
flake.homeModules.nathan = { ... }: {
enable = true;
programs.ssh = {
# defaults as of 25.11
matchBlocks."*" = {
forwardAgent = false;
addKeysToAgent = "no";
compression = false;
serverAliveInterval = 0;
serverAliveCountMax = 3;
hashKnownHosts = false;
userKnownHostsFile = "~/.ssh/known_hosts";
controlMaster = "no";
controlPath = "~/.ssh/master-%r@%n:%p";
controlPersist = "no";
enable = true;
# defaults as of 25.11
matchBlocks."*" = {
forwardAgent = false;
addKeysToAgent = "no";
compression = false;
serverAliveInterval = 0;
serverAliveCountMax = 3;
hashKnownHosts = false;
userKnownHostsFile = "~/.ssh/known_hosts";
controlMaster = "no";
controlPath = "~/.ssh/master-%r@%n:%p";
controlPersist = "no";
};
enableDefaultConfig = false;
};
};
enableDefaultConfig = false;
};
}

View File

@@ -1,23 +1,26 @@
{ config, lib, pkgs, ... }: {
{ ... }: {
programs.tmux = {
enable = true;
clock24 = true;
mouse = true;
baseIndex = 1;
keyMode = "vi";
prefix = "C-b";
shell = "${pkgs.zsh}/bin/zsh";
};
flake.homeModules.nathan = { config, lib, pkgs, ... }: {
programs.tmux = {
enable = true;
clock24 = true;
mouse = true;
baseIndex = 1;
keyMode = "vi";
prefix = "C-b";
shell = "${pkgs.zsh}/bin/zsh";
};
};
}

View File

@@ -1,13 +1,16 @@
{ config, lib, pkgs, ... }: {
{ ... }: {
programs.zoxide = {
flake.homeModules.nathan = { ... }: {
enable = true;
programs.zoxide = {
enableZshIntegration = true;
enable = true;
options = [
"--cmd cd"
];
};
enableZshIntegration = true;
options = [
"--cmd cd"
];
};
};
}

View File

@@ -1,37 +1,40 @@
{ lib, ... }: {
{ ... }: {
programs.zsh = {
enable = true;
flake.homeModules.nathan = { lib, ... }: {
initContent = lib.mkOrder 1200 ''
bindkey ' ' magic-space
'';
enableCompletion = true;
autosuggestion.enable = true;
syntaxHighlighting.enable = true;
shellAliases = {
ls = "eza";
ll = "ls -l";
programs.zsh = {
ksh = "kitten ssh";
enable = true;
vi = "nvim";
vim = "nvim";
initContent = lib.mkOrder 1200 ''
bindkey ' ' magic-space
'';
python = "python3.13";
python3 = "python3.13";
enableCompletion = true;
autosuggestion.enable = true;
syntaxHighlighting.enable = true;
shellAliases = {
ls = "eza";
ll = "ls -l";
ksh = "kitten ssh";
vi = "nvim";
vim = "nvim";
python = "python3.13";
python3 = "python3.13";
};
history = {
size = 5000;
ignoreAllDups = true;
ignoreSpace = true;
share = true;
};
};
};
history = {
size = 5000;
ignoreAllDups = true;
ignoreSpace = true;
share = true;
};
};
}

View File

@@ -1,9 +0,0 @@
{ ... }: {
imports = let
dir = builtins.readDir ./.;
in builtins.map (x: ./${x}) (builtins.filter
(file: (dir.${file} == "directory"))
(builtins.attrNames dir)
);
}

View File

@@ -1,41 +1,44 @@
{ config, lib, pkgs, ... }: {
{ ... }: {
options = {
homeconfig.mpd.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
flake.homeModules.nathan = { config, lib, pkgs, ... }: {
options = {
homeconfig.mpd.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
};
};
config = lib.mkIf config.homeconfig.mpd.enable {
services.mpd = {
enable = true;
network.startWhenNeeded = true;
network.port = 6600;
network.listenAddress = "127.0.0.1";
musicDirectory = "/home/nathan/Music";
extraConfig = ''
audio_output {
type "pipewire"
name "Audio1"
}
config = lib.mkIf config.homeconfig.mpd.enable {
services.mpd = {
enable = true;
network.startWhenNeeded = true;
network.port = 6600;
network.listenAddress = "127.0.0.1";
musicDirectory = "/home/nathan/Music";
extraConfig = ''
audio_output {
type "pipewire"
name "Audio1"
}
audio_output {
type "fifo"
name "visualizer"
path "/tmp/mpd.fifo"
format "44100:16:1"
name "visualizer"
path "/tmp/mpd.fifo"
format "44100:16:1"
}
'';
'';
};
services.mpdris2 = {
enable = true;
mpd.host = "127.0.0.1";
mpd.port = 6600;
package = pkgs.mpdris2;
mpd.musicDirectory = "/home/nathan/Music";
notifications = true;
};
};
services.mpdris2 = {
enable = true;
mpd.host = "127.0.0.1";
mpd.port = 6600;
package = pkgs.mpdris2;
mpd.musicDirectory = "/home/nathan/Music";
notifications = true;
};
};
}

View File

@@ -1,25 +1,38 @@
{ lib, inputs, ... }:
{ self, inputs, ... }: {
{
flake.homeModules.nathan = { lib, ... }:
config = {
homeconfig = {
graphical = lib.mkDefault false;
minimal = lib.mkDefault false;
{
hyprland.enable = false;
};
config = {
homeconfig = {
graphical = lib.mkDefault false;
minimal = lib.mkDefault false;
nix = {
nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];
settings = {
experimental-features = [ "nix-command" "flakes" ];
builders = "ssh://builder x86_64-linux,aarch64-linux /run/secrets/remoteBuildKey 1 1 nixos-test,benchmark,big-parallel,kvm - -";
builders-use-substituters = true;
hyprland.enable = false;
};
nix = {
nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];
settings = {
experimental-features = [ "nix-command" "flakes" ];
builders = "ssh://builder x86_64-linux,aarch64-linux /run/secrets/remoteBuildKey 1 1 nixos-test,benchmark,big-parallel,kvm - -";
builders-use-substituters = true;
};
};
programs.home-manager.enable = true;
};
programs.home-manager.enable = true;
};
}
flake.homeConfigurations.nathan = inputs.home-manager.lib.homeManagerConfiguration {
pkgs = import inputs.nixpkgs {
system = builtins.currentSystem;
};
modules = [
self.homeModules.nathan
];
};
}