Flake checks
All checks were successful
/ check (push) Successful in 1m40s

This commit is contained in:
Daniel Flanagan 2025-02-14 15:40:53 -06:00
parent d21df887fe
commit 95e91ffe71
19 changed files with 626 additions and 1103 deletions

View file

@ -20,7 +20,7 @@
nixosModules = import ./lib/modules/nixos inputs; nixosModules = import ./lib/modules/nixos inputs;
homeManagerModules = import ./lib/modules/home inputs; homeManagerModules = import ./lib/modules/home inputs;
# overlays = import ./lib/overlays inputs; overlays = import ./lib/overlays inputs;
formatter = uGenPkgs (p: p.nixfmt-rfc-style); formatter = uGenPkgs (p: p.nixfmt-rfc-style);
@ -30,7 +30,7 @@
TODO: nixos ISO? TODO: nixos ISO?
*/ */
} }
// (import ./nix/constants.nix inputs) // (import ./lib/constants.nix inputs)
// { // {
flakeLib = lib; flakeLib = lib;
}; };

View file

@ -1,7 +1,7 @@
{ nixpkgs, ... }: { nixpkgs, ... }:
{ {
style = { style = {
colors = (import ./lib/colors.nix { inherit (nixpkgs) lib; }).schemes.catppuccin-mocha-sapphire; colors = (import ./colors.nix { inherit (nixpkgs) lib; }).schemes.catppuccin-mocha-sapphire;
font = { font = {
name = "IosevkaLyteTerm"; name = "IosevkaLyteTerm";

View file

@ -7,6 +7,7 @@ let
(_: p: p); (_: p: p);
in in
rec { rec {
inherit forSelfOverlay;
systems = [ systems = [
"aarch64-linux" "aarch64-linux"
"aarch64-darwin" "aarch64-darwin"
@ -14,6 +15,8 @@ rec {
"x86_64-linux" "x86_64-linux"
]; ];
forSystems = nixpkgs: nixpkgs.lib.genAttrs systems; forSystems = nixpkgs: nixpkgs.lib.genAttrs systems;
pkgsFor = nixpkgs: system: (import nixpkgs { inherit system; }).extend forSelfOverlay; pkgsFor =
nixpkgs: system:
(import nixpkgs { inherit system; }).extend (builtins.trace forSelfOverlay forSelfOverlay);
genPkgs = nixpkgs: func: (forSystems nixpkgs (system: func (pkgsFor nixpkgs system))); genPkgs = nixpkgs: func: (forSystems nixpkgs (system: func (pkgsFor nixpkgs system)));
} }

View file

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View file

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View file

@ -1,11 +1,38 @@
{ self, ... }: { self, slippi, ... }:
let let
inherit (self) outputs; inherit (self) outputs;
inherit (outputs) homeManagerModules constants; inherit (outputs) homeManagerModules style;
inherit (constants) style;
in in
{ {
bat = { common =
{
pkgs,
lib,
config,
...
}:
{
imports = with homeManagerModules; [
slippi.homeManagerModules.default
# nix-colors.homeManagerModules.default
fish
homeManagerModules.helix
git
jujutsu
zellij
htop
sshconfig
senpai
iex
cargo
/*
broot
nnn
tmux
*/
];
programs.bat = { programs.bat = {
enable = true; enable = true;
config = { config = {
@ -28,6 +55,122 @@ in
home.shellAliases = { home.shellAliases = {
cat = "bat"; cat = "bat";
}; };
programs.home-manager.enable = true;
programs.direnv.mise = {
enable = true;
};
programs.mise = {
enable = true;
enableFishIntegration = true;
enableBashIntegration = true;
enableZshIntegration = true;
};
programs.jujutsu = {
enable = true;
};
programs.jq = {
enable = true;
};
programs.btop = {
enable = true;
package = pkgs.btop.override {
rocmSupport = true;
};
};
# services.ssh-agent.enable = true;
home = {
sessionVariables = {
TERMINAL = "ghostty";
EDITOR = "hx";
VISUAL = "hx";
PAGER = "less";
MANPAGER = "less";
};
packages = with pkgs; [
# tools I use when editing nix code
# kanidm
alejandra
gnupg
(pkgs.buildEnv {
name = "my-common-scripts";
paths = [ ./scripts/common ];
})
];
};
programs.direnv = {
enable = true;
nix-direnv.enable = true;
};
programs.skim = {
# https://github.com/lotabout/skim/issues/494
enable = false;
enableFishIntegration = true;
defaultOptions = [
"--no-clear-start"
"--color=16"
"--height=20"
];
};
programs.atuin = {
enable = true;
enableBashIntegration = config.programs.bash.enable;
enableFishIntegration = config.programs.fish.enable;
enableZshIntegration = config.programs.zsh.enable;
enableNushellIntegration = config.programs.nushell.enable;
flags = [
"--disable-up-arrow"
];
settings = {
auto_sync = true;
sync_frequency = "1m";
sync_address = "https://atuin.h.lyte.dev";
keymap_mode = "vim-insert";
inline_height = 20;
show_preview = true;
sync = {
records = true;
};
dotfiles = {
enabled = true;
};
};
};
programs.fzf = {
# using good ol' fzf until skim sucks less out of the box I guess
enable = true;
/*
enableFishIntegration = true;
defaultCommand = "fd --type f";
defaultOptions = ["--height 40%"];
fileWidgetOptions = ["--preview 'head {}'"];
*/
};
# TODO: regular cron or something?
programs.nix-index = {
enable = true;
enableBashIntegration = config.programs.bash.enable;
enableFishIntegration = config.programs.fish.enable;
enableZshIntegration = config.programs.zsh.enable;
};
}; };
eww = eww =
@ -150,309 +293,32 @@ in
*/ */
}; };
common =
{
pkgs,
lib,
config,
...
}:
{
imports = with homeManagerModules; [
# nix-colors.homeManagerModules.default
fish
bat
homeManagerModules.helix
git
jujutsu
zellij
htop
sshconfig
/*
broot
nnn
tmux
*/
];
programs.home-manager.enable = true;
# services.ssh-agent.enable = true;
home = {
username = lib.mkDefault "lytedev";
homeDirectory = lib.mkDefault "/home/lytedev";
stateVersion = lib.mkDefault "24.05";
sessionVariables = {
TERMINAL = "ghostty";
EDITOR = "hx";
VISUAL = "hx";
PAGER = "less";
MANPAGER = "less";
};
packages = with pkgs; [
# tools I use when editing nix code
# kanidm
alejandra
gnupg
(pkgs.buildEnv {
name = "my-common-scripts";
paths = [ ./scripts/common ];
})
];
};
programs.direnv = {
enable = true;
nix-direnv.enable = true;
};
programs.skim = {
# https://github.com/lotabout/skim/issues/494
enable = false;
enableFishIntegration = true;
defaultOptions = [
"--no-clear-start"
"--color=16"
"--height=20"
];
};
programs.atuin = {
enable = true;
enableBashIntegration = config.programs.bash.enable;
enableFishIntegration = config.programs.fish.enable;
enableZshIntegration = config.programs.zsh.enable;
enableNushellIntegration = config.programs.nushell.enable;
flags = [
"--disable-up-arrow"
];
settings = {
auto_sync = true;
sync_frequency = "1m";
sync_address = "https://atuin.h.lyte.dev";
keymap_mode = "vim-insert";
inline_height = 20;
show_preview = true;
sync = {
records = true;
};
dotfiles = {
enabled = true;
};
};
};
programs.fzf = {
# using good ol' fzf until skim sucks less out of the box I guess
enable = true;
/*
enableFishIntegration = true;
defaultCommand = "fd --type f";
defaultOptions = ["--height 40%"];
fileWidgetOptions = ["--preview 'head {}'"];
*/
};
# TODO: regular cron or something?
programs.nix-index = {
enable = true;
enableBashIntegration = config.programs.bash.enable;
enableFishIntegration = config.programs.fish.enable;
enableZshIntegration = config.programs.zsh.enable;
};
};
desktop = { desktop = {
imports = with homeManagerModules; [ imports = with homeManagerModules; [
wezterm
ghostty ghostty
]; ];
}; };
# ewwbar = {}; # ewwbar = {};
firefox = firefox = import ./firefox.nix;
{ pkgs, ... }: fish = import ./fish.nix;
{
programs.firefox = {
/*
TODO: this should be able to work on macos, no?
TODO: enable color scheme/theme by default
*/
enable = true;
profiles = {
daniel = {
id = 0;
settings = {
"general.smoothScroll" = true;
"browser.zoom.siteSpecific" = true;
};
extraConfig = ''
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
// user_pref("full-screen-api.ignore-widgets", true);
user_pref("media.ffmpeg.vaapi.enabled", true);
user_pref("media.rdd-vpx.enabled", true);
'';
userChrome = ''
#webrtcIndicator {
display: none;
}
'';
/*
userContent = ''
'';
*/
};
};
};
};
firefox-no-tabs = {
programs.firefox = {
profileVersion = null;
profiles = {
daniel = {
settings = {
"alerts.useSystemBackend" = true;
"widget.gtk.rounded-bottom-corners.enabled" = true;
};
userChrome = ''
#TabsToolbar {
visibility: collapse;
}
#main-window[tabsintitlebar="true"]:not([extradragspace="true"]) #TabsToolbar>.toolbar-items {
opacity: 0;
pointer-events: none;
}
#main-window:not([tabsintitlebar="true"]) #TabsToolbar {
visibility: collapse !important;
}
'';
};
};
};
};
fish =
{ pkgs, ... }:
{
home = {
packages = [
pkgs.gawk # used in prompt
];
};
programs.eza = {
enable = true;
};
programs.fish = {
enable = true;
# I load long scripts from files for a better editing experience
shellInit = builtins.readFile ./fish/shellInit.fish;
interactiveShellInit = builtins.readFile ./fish/interactiveShellInit.fish;
loginShellInit = "";
functions = {
# TODO: I think these should be loaded from fish files too for better editor experience?
d = ''
# --wraps=cd --description "Quickly jump to NICE_HOME (or given relative or absolute path) and list files."
if count $argv > /dev/null
cd $argv
else
cd $NICE_HOME
end
la
'';
c = ''
if count $argv > /dev/null
cd $NICE_HOME && d $argv
else
d $NICE_HOME
end
'';
ltl = ''
set d $argv[1] .
set -l l ""
for f in $d[1]/*
if test -z $l; set l $f; continue; end
if command test $f -nt $l; and test ! -d $f
set l $f
end
end
echo $l
'';
has_command = "command --quiet --search $argv[1]";
};
shellAbbrs = { };
shellAliases = {
# TODO: an alias that wraps `rm` such that if we run it without git committing first (when in a git repo)
ls = "eza --group-directories-first --classify";
l = "ls";
ll = "ls --long --group";
la = "ll --all";
lA = "la --all"; # --all twice to show . and ..
tree = "ls --tree --level=3";
lt = "ll --sort=modified";
lat = "la --sort=modified";
lc = "lt --sort=accessed";
lT = "lt --reverse";
lC = "lc --reverse";
lD = "la --only-dirs";
"cd.." = "d ..";
"cdc" = "d $XDG_CONFIG_HOME";
"cdn" = "d $NOTES_PATH";
"cdl" = "d $XDG_DOWNLOAD_DIR";
"cdg" = "d $XDG_GAMES_DIR";
".." = "d ..";
"..." = "d ../..";
"...." = "d ../../..";
"....." = "d ../../../..";
"......" = "d ../../../../..";
"......." = "d ../../../../../..";
"........" = "d ../../../../../../..";
"........." = "d ../../../../../../../..";
p = "ping";
dc = "docker compose";
pc = "podman-compose";
k = "kubectl";
kg = "kubectl get";
v = "$EDITOR";
sv = "sudo $EDITOR";
kssh = "kitty +kitten ssh";
};
};
};
jujutsu = jujutsu =
{ ... }: { config, lib, ... }:
{ {
config = lib.mkIf (builtins.hasAttr "primary" config.accounts.email.accounts) {
programs.jujutsu = { programs.jujutsu = {
enable = true; enable = true;
settings = { settings = {
user = { user = {
email = "daniel@lyte.dev"; email = config.accounts.email.accounts.primary.address;
name = "Daniel Flanagan"; name = "Daniel Flanagan";
}; };
}; };
}; };
}; };
};
git = git =
{ lib, ... }: { lib, ... }:
@ -640,20 +506,26 @@ in
}; };
}; };
home.packages = with pkgs.gnomeExtensions; [ home = {
packages = with pkgs.gnomeExtensions; [
tiling-shell tiling-shell
blur-my-shell blur-my-shell
appindicator appindicator
]; ];
file.".face" = {
enable = true;
source = builtins.fetchurl {
url = "https://lyte.dev/img/avatar3-square-512.png";
sha256 = "sha256:15zwbwisrc01m7ad684rsyq19wl4s33ry9xmgzmi88k1myxhs93x";
};
};
};
programs.gnome-shell = { programs.gnome-shell = {
enable = true; enable = true;
extensions = [ { package = pkgs.gnomeExtensions.gsconnect; } ]; extensions = [ { package = pkgs.gnomeExtensions.gsconnect; } ];
}; };
programs.firefox.package = pkgs.firefox.override {
nativeMessagingHosts = with pkgs; [ bitwarden ];
};
}; };
helix = helix =
@ -2147,4 +2019,28 @@ in
''; '';
}; };
}; };
daniel =
{ config, ... }:
{
home = {
username = "daniel";
homeDirectory = "/home/daniel/.home";
};
accounts.email.accounts = {
primary = {
primary = true;
address = "daniel@lyte.dev";
};
legacy = {
address = "wraithx2@gmail.com";
};
io = {
# TODO: finalize deprecation
address = "daniel@lytedev.io";
};
};
};
} }

View file

@ -0,0 +1,56 @@
{ pkgs, ... }:
{
enable = true;
programs.firefox = {
profileVersion = null;
package = pkgs.firefox.override {
nativeMessagingHosts = with pkgs; [ bitwarden ];
};
/*
TODO: this should be able to work on macos, no?
TODO: enable color scheme/theme by default
*/
profiles = {
daniel = {
id = 0;
settings = {
"alerts.useSystemBackend" = true;
"widget.gtk.rounded-bottom-corners.enabled" = true;
"general.smoothScroll" = true;
"browser.zoom.siteSpecific" = true;
};
extraConfig = ''
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
// user_pref("full-screen-api.ignore-widgets", true);
user_pref("media.ffmpeg.vaapi.enabled", true);
user_pref("media.rdd-vpx.enabled", true);
'';
userChrome = ''
#TabsToolbar {
visibility: collapse;
}
#main-window[tabsintitlebar="true"]:not([extradragspace="true"]) #TabsToolbar>.toolbar-items {
opacity: 0;
pointer-events: none;
}
#main-window:not([tabsintitlebar="true"]) #TabsToolbar {
visibility: collapse !important;
}
#webrtcIndicator {
display: none;
}
'';
/*
userContent = ''
'';
*/
};
};
};
}

91
lib/modules/home/fish.nix Normal file
View file

@ -0,0 +1,91 @@
{ pkgs, ... }:
{
home = {
packages = [
pkgs.gawk # used in prompt
];
};
programs.eza = {
enable = true;
};
programs.fish = {
enable = true;
# I load long scripts from files for a better editing experience
shellInit = builtins.readFile ./fish/shellInit.fish;
interactiveShellInit = builtins.readFile ./fish/interactiveShellInit.fish;
loginShellInit = "";
functions = {
# TODO: I think these should be loaded from fish files too for better editor experience?
d = ''
# --wraps=cd --description "Quickly jump to NICE_HOME (or given relative or absolute path) and list files."
if count $argv > /dev/null
cd $argv
else
cd $NICE_HOME
end
la
'';
c = ''
if count $argv > /dev/null
cd $NICE_HOME && d $argv
else
d $NICE_HOME
end
'';
ltl = ''
set d $argv[1] .
set -l l ""
for f in $d[1]/*
if test -z $l; set l $f; continue; end
if command test $f -nt $l; and test ! -d $f
set l $f
end
end
echo $l
'';
has_command = "command --quiet --search $argv[1]";
};
shellAbbrs = { };
shellAliases = {
# TODO: an alias that wraps `rm` such that if we run it without git committing first (when in a git repo)
ls = "eza --group-directories-first --classify";
l = "ls";
ll = "ls --long --group";
la = "ll --all";
lA = "la --all"; # --all twice to show . and ..
tree = "ls --tree --level=3";
lt = "ll --sort=modified";
lat = "la --sort=modified";
lc = "lt --sort=accessed";
lT = "lt --reverse";
lC = "lc --reverse";
lD = "la --only-dirs";
"cd.." = "d ..";
"cdc" = "d $XDG_CONFIG_HOME";
"cdn" = "d $NOTES_PATH";
"cdl" = "d $XDG_DOWNLOAD_DIR";
"cdg" = "d $XDG_GAMES_DIR";
".." = "d ..";
"..." = "d ../..";
"...." = "d ../../..";
"....." = "d ../../../..";
"......" = "d ../../../../..";
"......." = "d ../../../../../..";
"........" = "d ../../../../../../..";
"........." = "d ../../../../../../../..";
p = "ping";
dc = "docker compose";
pc = "podman-compose";
k = "kubectl";
kg = "kubectl get";
v = "$EDITOR";
sv = "sudo $EDITOR";
kssh = "kitty +kitten ssh";
};
};
}

View file

@ -3,13 +3,29 @@ let
inherit (self) outputs; inherit (self) outputs;
inherit (outputs) inherit (outputs)
nixosModules nixosModules
homeManagerModules # overlays
overlays pubkey
constants
; ;
inherit (constants) pubkey;
in in
{ {
common = {
imports = with nixosModules; [
deno-netlify-ddns-client
shell-defaults-and-applications
desktop
wifi
printing
podman
virtual-machines
postgres
gaming
gnome
daniel
root
];
};
nix-config = (import ../../../flake.nix).nixConfig;
shell-defaults-and-applications = import ./shell-config.nix; shell-defaults-and-applications = import ./shell-config.nix;
deno-netlify-ddns-client = import ./deno-netlify-ddns-client.nix; deno-netlify-ddns-client = import ./deno-netlify-ddns-client.nix;
@ -17,230 +33,6 @@ in
# boot.uki.tries = 3; # boot.uki.tries = 3;
# services.irqbalance.enable = true; # services.irqbalance.enable = true;
# this is not ready for primetime yet
# services.kanidm = {
# enableClient = true;
# enablePam = true;
# package = pkgs.kanidm;
# clientSettings.uri = "https://idm.h.lyte.dev";
# unixSettings = {
# # hsm_pin_path = "/somewhere/else";
# pam_allowed_login_groups = [];
# };
# };
# systemd.tmpfiles.rules = [
# "d /etc/kanidm 1755 nobody users -"
# ];
# module has the incorrect file permissions out of the box
# environment.etc = {
/*
"kanidm" = {
enable = true;
user = "nobody";
group = "users";
mode = "0755";
};
*/
# "kanidm/unixd" = {
# user = "kanidm-unixd";
# group = "kanidm-unixd";
# mode = "0700";
# };
# "kanidm/config" = {
# user = "nobody";
# group = "users";
# mode = "0755";
# };
# };
ewwbar =
{ pkgs, ... }:
{
# imports = with nixosModules; [];
environment.systemPackages = with pkgs; [
eww
upower
jq
];
# TODO: include the home-manager modules for daniel?
};
niri =
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [ niri ];
systemd.user.services.polkit = {
description = "PolicyKit Authentication Agent";
wantedBy = [ "niri.service" ];
after = [ "graphical-session.target" ];
partOf = [ "graphical-session.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.libsForQt5.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1";
Restart = "on-failure";
RestartSec = 1;
TimeoutStopSec = 10;
};
};
# security.pam.services.swaylock = {};
programs.dconf.enable = pkgs.lib.mkDefault true;
fonts.enableDefaultPackages = pkgs.lib.mkDefault true;
security.polkit.enable = true;
services.gnome.gnome-keyring.enable = true;
};
hyprland =
{ pkgs, ... }:
{
imports = with nixosModules; [
ewwbar
pipewire
];
programs.hyprland = {
enable = true;
};
environment.systemPackages = with pkgs; [
hyprpaper
xwaylandvideobridge
netcat-openbsd
];
home-manager.users.daniel = {
imports = with homeManagerModules; [
hyprland
];
};
# TODO: include the home-manager modules for daniel?
};
sway =
{ pkgs, ... }:
{
imports = with nixosModules; [
pipewire
];
systemd.user.services."wait-for-full-path" = {
description = "wait for systemd units to have full PATH";
wantedBy = [ "xdg-desktop-portal.service" ];
before = [ "xdg-desktop-portal.service" ];
path = with pkgs; [
systemd
coreutils
gnugrep
];
script = ''
ispresent () {
systemctl --user show-environment | grep -E '^PATH=.*/.nix-profile/bin'
}
while ! ispresent; do
sleep 0.1;
done
'';
serviceConfig = {
Type = "oneshot";
TimeoutStartSec = "60";
};
};
home-manager.users.daniel = {
imports = with homeManagerModules; [
sway
];
};
programs.sway = {
enable = true;
wrapperFeatures.gtk = true;
};
# services.xserver.libinput.enable = true;
# TODO: a lot of this probably needs de-duping with hyprland?
services.gnome.gnome-keyring.enable = true;
xdg.portal = {
enable = true;
wlr.enable = true;
# gtk.enable = true;
extraPortals = with pkgs; [
xdg-desktop-portal-wlr
xdg-desktop-portal-gtk
];
};
services.dbus.enable = true;
security.polkit.enable = true; # needed for home-manager integration
programs.thunar = {
enable = true;
plugins = with pkgs.xfce; [
thunar-archive-plugin
thunar-volman
];
};
services.gvfs = {
enable = true;
};
environment = {
variables = {
VISUAL = "hx";
};
systemPackages = with pkgs; [
brightnessctl
feh
grim
libinput
libinput-gestures
libnotify
mako
noto-fonts
pamixer
playerctl
pulseaudio
pulsemixer
slurp
swaybg
swayidle
swaylock
swayosd
tofi
waybar
wl-clipboard
zathura
/*
gimp
inkscape
krita
lutris
nil
nixpkgs-fmt
pavucontrol
rclone
restic
steam
vlc
vulkan-tools
weechat
wine
*/
];
};
};
remote-disk-key-entry-on-boot = remote-disk-key-entry-on-boot =
{ {
lib, lib,
@ -270,6 +62,7 @@ in
}; };
laptop = laptop =
# TODO: modularize
{ pkgs, ... }: { pkgs, ... }:
{ {
imports = with nixosModules; [ imports = with nixosModules; [
@ -311,248 +104,21 @@ in
}; };
}; };
touchscreen =
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
wvkbd # on-screen keyboard
flakeInputs.iio-hyprland.outputs.packages.${system}.default # auto-rotate hyprland displays
flakeInputs.hyprgrass.outputs.packages.${system}.hyprgrass # hyprland touch gestures
];
};
emacs =
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
emacs
];
home-manager.users.daniel = {
imports = with homeManagerModules; [
emacs
];
};
};
development-tools =
{
pkgs,
lib,
...
}:
{
imports = with nixosModules; [
postgres
podman
troubleshooting-tools
emacs
];
environment.sessionVariables.NIXOS_OZONE_WL = "1";
programs.neovim = {
enable = true;
/*
plugins = [
pkgs.vimPlugins.nvim-treesitter.withAllGrammars
];
*/
};
hardware.gpgSmartcards.enable = true;
# services.udev.packages = with pkgs; [
# # TODO: I think these get the whole package pulled in... should find out
# # if there's a way to get just the rules and not 4 chromes
# platformio
# openocd
# pkgs.yubikey-personalization
# via
# ];
# programs.adb.enable = true;
# users.users.daniel.extraGroups = ["adbusers"];
home-manager.users.daniel = {
programs.direnv.mise = {
enable = true;
};
programs.mise = {
enable = true;
enableFishIntegration = true;
enableBashIntegration = true;
enableZshIntegration = true;
};
programs.thunderbird = {
enable = false;
profiles = {
daniel = {
isDefault = true;
# name = "daniel";
};
};
};
programs.nushell = {
enable = false;
};
programs.jujutsu = {
enable = lib.mkDefault true;
};
programs.k9s = {
enable = false;
};
programs.vscode = {
enable = false;
};
programs.jq = {
enable = false;
};
programs.btop = {
enable = true;
package = pkgs.btop.override {
rocmSupport = true;
};
};
};
};
troubleshooting-tools =
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
iftop
bottom
btop
dnsutils
dogdns
htop
inetutils
nmap
pciutils
hexyl
pkgs.unixtools.xxd
usbutils
comma
];
};
music-consumption =
{ pkgs, ... }:
{
environment = {
systemPackages = with pkgs; [
spotube
spotdl
];
};
};
video-tools =
{ pkgs, ... }:
{
environment = {
systemPackages = with pkgs; [
ffmpeg-full
obs-studio
];
};
};
# android-dev = {pkgs, ...}: {
# services.udev.packages = [
# pkgs.android-udev-rules
# ];
# environment.systemPackages = [pkgs.android-studio];
# };
graphical-workstation =
{
pkgs,
lib,
options,
config,
...
}:
{
imports = with nixosModules; [
sway
# hyprland
enable-flatpaks-and-appimages
fonts
development-tools
printing
music-consumption
kde-connect
# plasma6
gnome
video-tools
radio-tools
# android-dev
];
xdg.portal.enable = true;
hardware =
if builtins.hasAttr "graphics" options.hardware then
{
graphics = {
enable = true;
enable32Bit = true;
/*
driSupport32Bit = true;
driSupport = true;
*/
};
}
else
{
opengl = {
enable = true;
driSupport32Bit = true;
driSupport = true;
};
};
environment = {
systemPackages = with pkgs; [
firefox
google-chrome
libnotify
slides
slack
discord
];
variables = {
/*
GTK_THEME = "Catppuccin-Mocha-Compact-Sapphire-Dark";
GTK_USE_PORTAL = "1";
*/
};
};
};
gnome = gnome =
{ {
pkgs, pkgs,
lib, lib,
config,
... ...
}: }:
{ {
imports = with nixosModules; [ pipewire ]; config = lib.mkIf config.services.xserver.desktopManager.gnome.enable {
services = { services = {
xserver = { xserver = {
enable = true; enable = true;
displayManager.gdm.enable = true; displayManager.gdm.enable = true;
desktopManager.gnome.enable = true; # desktopManager.gnome.enable = true;
}; };
udev.packages = [ pkgs.gnome-settings-daemon ]; udev.packages = [ pkgs.gnome-settings-daemon ];
}; };
@ -583,19 +149,6 @@ in
]; ];
allowedUDPPortRanges = allowedTCPPortRanges; allowedUDPPortRanges = allowedTCPPortRanges;
}; };
home-manager.users.daniel = {
imports = with homeManagerModules; [
gnome
];
home.file.".face" = {
enable = true;
source = builtins.fetchurl {
url = "https://lyte.dev/img/avatar3-square-512.png";
sha256 = "sha256:15zwbwisrc01m7ad684rsyq19wl4s33ry9xmgzmi88k1myxhs93x";
};
};
}; };
}; };
@ -874,7 +427,6 @@ in
virtual-machines = virtual-machines =
{ {
pkgs,
lib, lib,
config, config,
... ...
@ -941,6 +493,7 @@ in
pkgs, pkgs,
lib, lib,
config, config,
options,
... ...
}: }:
let let
@ -955,16 +508,44 @@ in
}; };
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
home-manager.users.daniel = { services.xserver.desktopManager.gnome.enable = true;
imports = with homeManagerModules; [
firefox-no-tabs xdg.portal.enable = true;
linux-desktop-environment-config
]; hardware =
if builtins.hasAttr "graphics" options.hardware then
{
graphics = {
enable = true;
# enable32Bit = true;
/*
driSupport32Bit = true;
driSupport = true;
*/
}; };
}
else
{
opengl = {
enable = true;
# driSupport32Bit = true;
driSupport = true;
};
};
fonts.packages = [
(
# allow nixpkgs 24.11 and unstable to both work
if builtins.hasAttr "nerd-fonts" pkgs then
(pkgs.nerd-fonts.symbols-only)
else
(pkgs.nerdfonts.override { fonts = [ "NerdFontsSymbolsOnly" ]; })
)
pkgs.iosevkaLyteTerm
];
services.flatpak.enable = true; services.flatpak.enable = true;
programs.appimage.binfmt = true; programs.appimage.binfmt = true;
services.printing.enable = true; services.printing.enable = true;
programs.virt-manager.enable = config.virtualization.libvirtd.enable; programs.virt-manager.enable = config.virtualisation.libvirtd.enable;
}; };
}; };
@ -1040,10 +621,14 @@ in
}; };
steam = steam =
{ pkgs, ... }: { pkgs, options, ... }:
{ {
programs.gamescope.enable = true; programs.gamescope.enable = true;
services.pipewire = {
alsa.support32Bit = true;
};
programs.steam = { programs.steam = {
enable = true; enable = true;
@ -1062,7 +647,27 @@ in
remotePlay.openFirewall = true; remotePlay.openFirewall = true;
}; };
hardware.steam-hardware.enable = true; hardware =
(
if builtins.hasAttr "graphics" options.hardware then
{
graphics = {
enable = true;
enable32Bit = true;
};
}
else
{
opengl = {
enable = true;
driSupport32Bit = true;
};
}
)
// {
steam-hardware.enable = true;
};
services.udev.packages = with pkgs; [ steam ]; services.udev.packages = with pkgs; [ steam ];
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
@ -1089,15 +694,6 @@ in
openssh.authorizedKeys.keys = [ pubkey ]; openssh.authorizedKeys.keys = [ pubkey ];
shell = lib.mkForce pkgs.fish; shell = lib.mkForce pkgs.fish;
}; };
home-manager.users.root = {
imports = [ homeManagerModules.common ];
home = {
username = "root";
homeDirectory = "/root";
stateVersion = pkgs.lib.mkDefault "24.05";
};
};
}; };
daniel = daniel =
@ -1107,30 +703,15 @@ in
config, config,
... ...
}: }:
let
username = "daniel";
in
{ {
imports = [ users.groups.daniel = { };
{ users.users.daniel = {
config = lib.mkIf config.lyte.shell.enable {
home-manager.users.${username} = {
imports = with homeManagerModules; [
senpai
iex
cargo
];
};
};
}
];
users.groups.${username} = { };
users.users.${username} = {
isNormalUser = true; isNormalUser = true;
home = "/home/${username}/.home"; home = "/home/daniel/.home";
description = "Daniel Flanagan";
createHome = true; createHome = true;
openssh.authorizedKeys.keys = [ pubkey ]; openssh.authorizedKeys.keys = [ pubkey ];
group = username; group = "daniel";
extraGroups = [ extraGroups = [
"users" "users"
"wheel" "wheel"
@ -1141,81 +722,5 @@ in
]; ];
packages = [ ]; packages = [ ];
}; };
home-manager.users.daniel = {
imports = [ homeManagerModules.common ];
home = {
username = "daniel";
homeDirectory = "/home/daniel/.home";
stateVersion = config.system.stateVersion;
}; };
accounts.email.accounts = {
primary = {
primary = true;
address = "daniel@lyte.dev";
};
legacy = {
address = "wraithx2@gmail.com";
};
io = {
# TODO: finalize deprecation
address = "daniel@lytedev.io";
};
};
};
};
valerie =
let
username = "valerie";
in
{
users.groups.${username} = { };
users.users.${username} = {
isNormalUser = true;
home = "/home/${username}";
createHome = true;
openssh.authorizedKeys.keys = [ pubkey ];
group = username;
extraGroups = [
"users"
"video"
];
packages = [ ];
};
};
flanfam =
let
username = "flanfam";
in
{
users.groups.${username} = { };
users.users.${username} = {
isNormalUser = true;
home = "/home/${username}";
createHome = true;
openssh.authorizedKeys.keys = [ pubkey ];
group = username;
extraGroups = [
"users"
"video"
];
packages = [ ];
};
};
family-users = {
imports = with nixosModules; [
# daniel # part of common
valerie
flanfam
];
};
# a common module that is intended to be imported by all NixOS systems
# intended to be auto-logged in and only run a certain application
# flanfamkiosk = {};
} }

View file

@ -1,84 +0,0 @@
{
pkgs,
lib,
...
}:
{
imports = [ ./pipewire.nix ];
# mkForce is used liberally to take precedence over KDE Plasma
# so I can have both "usable" at once
services.xserver.enable = lib.mkDefault true;
services.xserver.displayManager.gdm = {
enable = lib.mkForce true; # take precedence over KDE's SDDM
};
services.displayManager.execCmd = lib.mkForce "exec ${pkgs.gnome.gdm}/bin/gdm";
services.displayManager.defaultSession = lib.mkForce "gnome";
programs.ssh.askPassword = "${pkgs.gnome.seahorse}/libexec/seahorse/ssh-askpass";
hardware.pulseaudio.enable = false;
services.xserver.desktopManager.gnome = {
enable = lib.mkDefault true;
extraGSettingsOverridePackages = [ pkgs.gnome.mutter ];
extraGSettingsOverrides = ''
[org.gnome.mutter]
experimental-features=['scale-monitor-framebuffer']
'';
};
xdg.portal = {
enable = true;
};
services.dbus.enable = true;
services.gvfs = {
enable = true;
};
environment = {
variables = {
VISUAL = "hx";
PAGER = "less";
MANPAGER = "less";
};
systemPackages = with pkgs; [
gnome.gnome-power-manager
brightnessctl
feh
grim
libinput
libinput-gestures
libnotify
noto-fonts
pamixer
playerctl
pulsemixer
slurp
swaybg
swayidle
swaylock
waybar
wl-clipboard
zathura
/*
gimp
inkscape
krita
pavucontrol
pulseaudio
rclone
restic
steam
vlc
vulkan-tools
weechat
wine
*/
];
};
}

View file

@ -0,0 +1,39 @@
{
# this is not ready for primetime yet
# services.kanidm = {
# enableClient = true;
# enablePam = true;
# package = pkgs.kanidm;
# clientSettings.uri = "https://idm.h.lyte.dev";
# unixSettings = {
# # hsm_pin_path = "/somewhere/else";
# pam_allowed_login_groups = [];
# };
# };
# systemd.tmpfiles.rules = [
# "d /etc/kanidm 1755 nobody users -"
# ];
# module has the incorrect file permissions out of the box
# environment.etc = {
/*
"kanidm" = {
enable = true;
user = "nobody";
group = "users";
mode = "0755";
};
*/
# "kanidm/unixd" = {
# user = "kanidm-unixd";
# group = "kanidm-unixd";
# mode = "0700";
# };
# "kanidm/config" = {
# user = "nobody";
# group = "users";
# mode = "0755";
# };
# };
}

View file

@ -15,13 +15,12 @@ in
}; };
}; };
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
nix-index = { home-manager.users.daniel = { };
enable = true;
enableBashIntegration = true; programs.nix-index.enable = true;
enableFishIntegration = true; programs.command-not-found.enable = false;
enableZshIntegration = true;
};
users = { users = {
defaultUserShell = pkgs.fish; defaultUserShell = pkgs.fish;
}; };
@ -34,12 +33,6 @@ in
lfs.enable = true; lfs.enable = true;
}; };
}; };
programs.btop = {
enable = true;
package = pkgs.btop.override {
rocmSupport = true;
};
};
environment = { environment = {
variables = { variables = {
EDITOR = "hx"; EDITOR = "hx";
@ -49,25 +42,37 @@ in
MANPAGER = "bat --style=plain"; MANPAGER = "bat --style=plain";
}; };
systemPackages = with pkgs; [ systemPackages = with pkgs; [
zellij
helix
aria2 aria2
bat bat
bottom
btop
comma
curl curl
dnsutils
dogdns
dua dua
eza eza
fd fd
file file
helix
hexyl
htop
iftop
inetutils inetutils
iputils iputils
iputils
killall killall
nettools nettools
nmap
pciutils
unixtools.xxd
ripgrep ripgrep
rsync rsync
sd sd
usbutils
xh xh
zellij
]; ];
}; };
}; };
} }

View file

@ -4,16 +4,19 @@
nixpkgs-unstable, nixpkgs-unstable,
... ...
}@inputs: }@inputs:
{ rec {
default = final: _prev: { default = final: _prev: {
overlays = with self.overlays; [ overlays = [
additions additions
modifications modifications
unstable-packages unstable-packages
stable-packages
]; ];
}; };
additions = final: prev: (prev // self.outputs.packages.${prev.system}); forSelf = default;
additions = final: prev: (import ../../packages { pkgs = prev; });
modifications = modifications =
final: prev: final: prev:
@ -23,7 +26,22 @@
{ {
ghostty = ghostty.outputs.packages.${prev.system}.default; ghostty = ghostty.outputs.packages.${prev.system}.default;
helix = helix.outputs.packages.${prev.system}.default; helix = helix.outputs.packages.${prev.system}.default;
bitwarden = self.outputs.packages.${prev.system}.bitwarden;
bitwarden = prev.bitwarden.overrideAttrs (old: {
preBuild = ''
${old.preBuild}
pushd apps/desktop/desktop_native/proxy
cargo build --bin desktop_proxy --release
popd
'';
postInstall = ''
mkdir -p $out/bin
cp -r apps/desktop/desktop_native/target/release/desktop_proxy $out/bin
mkdir -p $out/lib/mozilla/native-messaging-hosts
substituteAll ${../../packages/bitwarden.json} $out/lib/mozilla/native-messaging-hosts/com.8bit.bitwarden.json
'';
});
}; };
unstable-packages = final: _prev: { unstable-packages = final: _prev: {

View file

@ -8,20 +8,4 @@ in
iosevkaLyteTermSubset = pkgs.callPackage ./iosevkaLyteTermSubset.nix { iosevkaLyteTermSubset = pkgs.callPackage ./iosevkaLyteTermSubset.nix {
inherit iosevkaLyteTerm; inherit iosevkaLyteTerm;
}; };
bitwarden = pkgs.bitwarden.overrideAttrs (old: {
preBuild = ''
${old.preBuild}
pushd apps/desktop/desktop_native/proxy
cargo build --bin desktop_proxy --release
popd
'';
postInstall = ''
mkdir -p $out/bin
cp -r apps/desktop/desktop_native/target/release/desktop_proxy $out/bin
mkdir -p $out/lib/mozilla/native-messaging-hosts
substituteAll ${./bitwarden.json} $out/lib/mozilla/native-messaging-hosts/com.8bit.bitwarden.json
'';
});
} }

View file

@ -4,6 +4,7 @@
nixpkgs, nixpkgs,
sops-nix, sops-nix,
disko, disko,
slippi,
home-manager, home-manager,
nixpkgs-unstable, nixpkgs-unstable,
home-manager-unstable, home-manager-unstable,
@ -24,6 +25,10 @@ let
}: }:
(nixpkgs.lib.nixosSystem { (nixpkgs.lib.nixosSystem {
inherit system; inherit system;
specialArgs = {
hardware = hardware.outputs.nixosModules;
diskoConfigurations = self.outputs.diskoConfigurations;
};
modules = [ modules = [
( (
{ {
@ -34,27 +39,23 @@ let
... ...
}: }:
{ {
imports = with self.outputs.nixosModules; [ imports = [
(modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
home-manager.nixosModules.home-manager home-manager.nixosModules.home-manager
sops-nix.nixosModules.sops sops-nix.nixosModules.sops
disko.nixosModules.disko disko.nixosModules.disko
deno-netlify-ddns-client slippi.nixosModules.default
shell-defaults-and-applications self.outputs.nixosModules.common
wifi
printing
podman
virtual-machines
postgres
gaming
gnome
daniel
root
]; ];
config = { config = {
lyte.shell.enable = lib.mkDefault true; lyte.shell.enable = lib.mkDefault true;
nixpkgs.config.allowUnfree = lib.mkDefault true; lyte.desktop.enable = lib.mkDefault false;
nixpkgs = {
config.allowUnfree = lib.mkDefault true;
overlays = [ self.flakeLib.forSelfOverlay ];
};
sops = { sops = {
age = { age = {
@ -64,9 +65,24 @@ let
}; };
}; };
# TODO: for each non-system user on the machine?
home-manager.users.root = {
home.stateVersion = lib.mkDefault config.system.stateVersion;
imports = with self.outputs.homeManagerModules; [
common
];
};
home-manager.users.daniel = {
home.stateVersion = lib.mkDefault config.system.stateVersion;
imports = with self.outputs.homeManagerModules; [
daniel
common
];
};
nix = { nix = {
nixPath = lib.mapAttrsToList (key: value: "${key}=${value.to.path}") config.nix.registry; nixPath = lib.mapAttrsToList (key: value: "${key}=${value.to.path}") config.nix.registry;
registry = lib.mapAttrs (_: value: { flake = value; }) self.inputs; # registry = lib.mapAttrs (_: value: { flake = value; }) self.inputs;
settings = { settings = {
trusted-users = lib.mkDefault [ "@wheel" ]; trusted-users = lib.mkDefault [ "@wheel" ];
@ -75,7 +91,7 @@ let
"flakes" "flakes"
]; ];
auto-optimise-store = lib.mkDefault true; auto-optimise-store = lib.mkDefault true;
} // self.nixConfig; };
}; };
systemd.services.nix-daemon.environment.TMPDIR = lib.mkDefault "/var/tmp"; # TODO: why did I do this again? systemd.services.nix-daemon.environment.TMPDIR = lib.mkDefault "/var/tmp"; # TODO: why did I do this again?
@ -89,7 +105,7 @@ let
home-manager.backupFileExtension = lib.mkDefault "hm-backup"; home-manager.backupFileExtension = lib.mkDefault "hm-backup";
users.users.root = { users.users.root = {
openssh.authorizedKeys.keys = lib.mkDefault [ self.constants.pubkey ]; openssh.authorizedKeys.keys = lib.mkDefault [ self.outputs.pubkey ];
}; };
services = { services = {
@ -136,7 +152,7 @@ let
earlySetup = lib.mkDefault true; earlySetup = lib.mkDefault true;
colors = colors =
with self.constants.style.colors; with self.outputs.style.colors;
lib.mkDefault [ lib.mkDefault [
bg bg
red red
@ -170,12 +186,6 @@ let
} }
) )
{
_module.args = {
hardware = hardware.outputs.nixosModules;
diskoConfigurations = self.outputs.diskoConfigurations;
};
}
(import path) (import path)
]; ];
}) })
@ -188,7 +198,7 @@ let
}; };
in in
{ {
beefcake = stableHost ./beefcake.nix { }; # beefcake = stableHost ./beefcake.nix { };
dragon = host ./dragon.nix { }; dragon = host ./dragon.nix { };
arm-dragon = host ./dragon.nix { system = "aarch64-linux"; }; # arm-dragon = host ./dragon.nix { system = "aarch64-linux"; };
} }

View file

@ -1,16 +1,16 @@
{ {
pkgs, pkgs,
lib,
config, config,
hardware, hardware,
diskoConfigurations, diskoConfigurations,
... ...
}: }:
{ {
# nix boilerplate
system.stateVersion = "24.11"; system.stateVersion = "24.11";
home-manager.users.daniel.home.stateVersion = "24.11";
networking.hostName = "dragon"; networking.hostName = "dragon";
# kernel and bootloader configuration
boot = { boot = {
kernelPackages = pkgs.linuxPackages_latest; kernelPackages = pkgs.linuxPackages_latest;
loader.efi.canTouchEfiVariables = true; loader.efi.canTouchEfiVariables = true;
@ -25,15 +25,24 @@
supportedFilesystems = [ "ntfs" ]; supportedFilesystems = [ "ntfs" ];
}; };
# hardware configuration
imports = with hardware; [ imports = with hardware; [
(diskoConfigurations.unencrypted { disk = "/dev/nvme0n1"; }) (diskoConfigurations.unencrypted { disk = "/dev/nvme0n1"; })
common-cpu-amd common-cpu-amd
common-gpu-amd common-gpu-amd
common-pc-ssd common-pc-ssd
]; ];
hardware.bluetooth.enable = true;
networking.wifi.enable = true;
powerManagement.cpuFreqGovernor = "performance";
sops.secrets.ddns-pass = { # application and services configuration
mode = "0400";
lyte.desktop.enable = true;
sops = {
defaultSopsFile = ../../secrets/dragon/secrets.yml;
secrets.ddns-pass.mode = "0400";
}; };
services.deno-netlify-ddns-client = { services.deno-netlify-ddns-client = {
passwordFile = config.sops.secrets.ddns-pass.path; passwordFile = config.sops.secrets.ddns-pass.path;
@ -43,14 +52,10 @@
ipv6 = false; ipv6 = false;
}; };
hardware.bluetooth.enable = true;
networking.wifi.enable = true;
powerManagement.cpuFreqGovernor = lib.mkDefault "performance";
home-manager.users.daniel = { home-manager.users.daniel = {
slippi-launcher = { slippi-launcher = {
enable = true; enable = true;
isoPath = "${config.home-manager.users.daniel.home.homeDirectory}/../games/roms/dolphin/melee.iso"; isoPath = "${config.users.users.daniel.home}/../games/roms/dolphin/melee.iso";
launchMeleeOnPlay = false; launchMeleeOnPlay = false;
}; };
}; };

View file

@ -84,7 +84,6 @@
home-manager.users.daniel = { home-manager.users.daniel = {
imports = with homeManagerModules; [ imports = with homeManagerModules; [
firefox-no-tabs
linux-desktop-environment-config linux-desktop-environment-config
]; ];
}; };
@ -122,7 +121,6 @@
iex iex
niri niri
cargo cargo
firefox-no-tabs
linux-desktop-environment-config linux-desktop-environment-config
]; ];
}; };
@ -192,7 +190,6 @@
senpai senpai
iex iex
cargo cargo
firefox-no-tabs
linux-desktop-environment-config linux-desktop-environment-config
# slippi.homeManagerModules.default # slippi.homeManagerModules.default
]; ];
@ -262,7 +259,6 @@
senpai senpai
iex iex
cargo cargo
firefox-no-tabs
linux-desktop-environment-config linux-desktop-environment-config
slippi.homeManagerModules.default slippi.homeManagerModules.default
]; ];
@ -301,7 +297,6 @@
home-manager.users.daniel = { home-manager.users.daniel = {
imports = with homeManagerModules; [ imports = with homeManagerModules; [
firefox-no-tabs
linux-desktop-environment-config linux-desktop-environment-config
]; ];
}; };

View file

@ -1,7 +1,7 @@
<div align="center"> <div align="center">
<h1> <h1>
<img width="100" src="images/Nix_snowflake_lytedev.svg" /> <br> <img width="100" src="lib/images/Nix_snowflake_lytedev.svg" /> <br>
Nix for <code>lytedev</code> Nix for <code>lytedev</code>
</h1> </h1>