Compare commits

..

No commits in common. "64572cb106a6725178e3651a6008017eeb2419bc" and "2b4ad99e25f41fe4b5555ef739f91443b1b3d349" have entirely different histories.

159 changed files with 2665 additions and 291 deletions

View file

@ -62,6 +62,6 @@ This defines flake-based development environment templates for projects written
This defines the core of the NixOS configuration using helper functions from `lib/`, which is organized as a flake-parts-based structure for better modularity: This defines the core of the NixOS configuration using helper functions from `lib/`, which is organized as a flake-parts-based structure for better modularity:
1. `inputs`: Declares all external dependencies including, such as core Nix components (`nixpkgs`, `flake-parts`, `systems`) and user environment components (`home-manager`, `sops-nix`). 1. `inputs`: Declares all external dependencies including, such as core Nix components (`nixpkgs`, `flake-parts`, `systems`) and user environment components (`home-manager`, `sops-nix`).
2. `outputs`: Uses flake-parts to organize system configurations for multiple machines (`mars`, `deimos`, `phobos` and `ceres`) and shared modules (`core`, `mantle`, `crust`) imported across systems. 2. `outputs`: Uses flake-parts to organize system configurations for multiple machines (`mars`, `venus`, `deimos`, `charon`, and `ceres`) and shared modules (`core`, `mantle`, `crust`) imported across systems.
Each system imports specialized modules and user profiles based on its intended purpose and users, creating a flexible but consistent configuration framework across multiple machines. Each system imports specialized modules and user profiles based on its intended purpose and users, creating a flexible but consistent configuration framework across multiple machines.

View file

@ -81,6 +81,7 @@
./systems/mars ./systems/mars
./profiles/user0 ./profiles/user0
./profiles/user1 ./profiles/user1
./profiles/user3
config.nixosModules.mars config.nixosModules.mars
config.nixosModules.core config.nixosModules.core
config.nixosModules.mantle config.nixosModules.mantle
@ -92,9 +93,22 @@
inputs.nur.modules.nixos.default inputs.nur.modules.nixos.default
inputs.sops-nix.nixosModules.sops inputs.sops-nix.nixosModules.sops
]; ];
venus = inputs.self.lib.mkLinuxSystem [
./systems/venus
./profiles/user2
config.nixosModules.venus
config.nixosModules.core
config.nixosModules.mantle
config.nixosModules.crust
inputs.home-manager.nixosModules.home-manager
inputs.lix-module.nixosModules.default
inputs.sops-nix.nixosModules.sops
];
deimos = inputs.self.lib.mkLinuxSystem [ deimos = inputs.self.lib.mkLinuxSystem [
./systems/deimos ./systems/deimos
./profiles/user0 ./profiles/user0
./profiles/user1
./profiles/user2
config.nixosModules.deimos config.nixosModules.deimos
config.nixosModules.core config.nixosModules.core
config.nixosModules.mantle config.nixosModules.mantle
@ -117,6 +131,15 @@
inputs.nur.modules.nixos.default inputs.nur.modules.nixos.default
inputs.sops-nix.nixosModules.sops inputs.sops-nix.nixosModules.sops
]; ];
charon = inputs.self.lib.mkLinuxSystem [
./systems/charon
./profiles/user1
config.nixosModules.charon
config.nixosModules.core
config.nixosModules.crust
inputs.home-manager.nixosModules.home-manager
inputs.lix-module.nixosModules.default
];
ceres = inputs.self.lib.mkLinuxSystem [ ceres = inputs.self.lib.mkLinuxSystem [
./systems/ceres ./systems/ceres
./profiles/user0 ./profiles/user0

View file

@ -96,19 +96,19 @@ let
themesSubmodule = lib.types.submodule { themesSubmodule = lib.types.submodule {
options = { options = {
currentTheme = stringType; currentTheme = genOptions stringType "theme";
windowManager = { windowManager = {
gaps = intType; gaps = intType;
borders = intType; borders = intType;
rounding = intType; rounding = intType;
}; };
fonts = { fonts = {
name = stringType; names = genOptions stringType "name";
sizes = { sizes = {
applications = intType; applications = genOptions intType "size";
desktop = intType; desktop = genOptions intType "size";
popups = intType; popups = genOptions intType "size";
terminal = intType; terminal = genOptions intType "size";
}; };
}; };
cursor = { cursor = {

View file

@ -0,0 +1,20 @@
{ devicesFunctions }:
let
inherit (devicesFunctions)
ownerExclusiveReadWriteMask
charonIP
;
in
{
label = "Charon";
name = "charon";
sync = {
address0 = "";
};
ip = {
address0 = charonIP;
};
boot = {
options = ownerExclusiveReadWriteMask;
};
}

View file

@ -10,6 +10,7 @@ in
label = dummy; label = dummy;
sync = { sync = {
address0 = "RMDKNJY-BTX6FYF-G6SR332-WS6HARI-PF74SC6-VPBSGRQ-MKVQZEQ-KSIB6QV"; # User0 address0 = "RMDKNJY-BTX6FYF-G6SR332-WS6HARI-PF74SC6-VPBSGRQ-MKVQZEQ-KSIB6QV"; # User0
address1 = "RUKSHY4-UCBYRVG-CVYFCMU-M3NLA3Q-JINRF5V-YPR5W32-TEIBJN6-DNQRCAR"; # User2
}; };
ip = { ip = {
address0 = phoneIP; address0 = phoneIP;

View file

@ -4,18 +4,23 @@ let
sambaPermissions sambaPermissions
userIdForUser0 userIdForUser0
userIdForUser1 userIdForUser1
userIdForUser3
synologyIP synologyIP
; ;
user0 = "nick"; user0 = "nick";
user1 = "streaming"; user1 = "garnet";
user3 = "streaming";
user0Name = "Nick"; user0Name = "Nick";
user1Name = "Garnet";
user3Name = "Streaming";
synologyName = "synology"; synologyName = "synology";
in in
{ {
label = "Synology"; label = "Synology";
sync = { sync = {
address0 = "MWRGX2V-F5XKE5E-REP6ECT-OOPFBMF-22NHSMW-YFBU6MB-PLFUN63-R3MW2QX"; # User0 address0 = "MWRGX2V-F5XKE5E-REP6ECT-OOPFBMF-22NHSMW-YFBU6MB-PLFUN63-R3MW2QX"; # User0
address1 = ""; # User2
}; };
name = synologyName; name = synologyName;
ip = { ip = {
@ -27,10 +32,22 @@ in
device = "//${synologyIP}/homes/${user0Name}"; device = "//${synologyIP}/homes/${user0Name}";
options = sambaPermissions ++ userIdForUser0; options = sambaPermissions ++ userIdForUser0;
}; };
# Streaming Folder # Garnet Home Folder
folder1 = { folder1 = {
mount = "/mnt/media/${synologyName}/${user1}"; mount = "/mnt/media/${synologyName}/${user1}";
device = "//${synologyIP}/homes/${user0Name}"; device = "//${synologyIP}/homes/${user1Name}";
options = sambaPermissions ++ userIdForUser1; options = sambaPermissions ++ userIdForUser1;
}; };
# Minecraft Worlds
folder2 = {
mount = "/home/${user1}/.local/share/PrismLauncher/instances/1.21/.minecraft/saves";
device = "//${synologyIP}/homes/${user1Name}/Minecraft";
options = sambaPermissions ++ userIdForUser1;
};
# Streaming Folder
folder3 = {
mount = "/mnt/media/${synologyName}/${user3}";
device = "//${synologyIP}/homes/${user0Name}";
options = sambaPermissions ++ userIdForUser3;
};
} }

View file

@ -0,0 +1,33 @@
{ devicesFunctions }:
let
inherit (devicesFunctions)
readWritePermissions
venusIP
;
drivePath = "/run/media";
byLabel = "/dev/disk/by-label";
in
{
label = "Venus";
name = "venus";
ip = {
address0 = venusIP;
};
boot = {
options = [
"fmask=0022"
"dmask=0022"
];
};
storage0 = {
mount = "${drivePath}/games";
device = "${byLabel}/Games";
options = readWritePermissions;
};
storage1 = {
mount = "${drivePath}/entertainment";
device = "${byLabel}/Entertainment";
options = readWritePermissions;
};
}

View file

@ -38,17 +38,22 @@ let
"uid=1000" "uid=1000"
]; ];
userIdForUser1 = [ userIdForUser1 = [
"uid=1001"
];
userIdForUser3 = [
"uid=1002" "uid=1002"
]; ];
dummy = [ dummy = [
]; ];
ceresStorageDriveName = "NAS1"; ceresStorageDriveName = "NAS1";
ceresIP = "192.168.50.140"; ceresIP = "192.168.50.140";
charonIP = "192.168.50.42";
deimosIP = "192.168.50.142"; deimosIP = "192.168.50.142";
marsIP = "192.168.50.218"; marsIP = "192.168.50.218";
phoneIP = "192.168.50.243"; phoneIP = "192.168.50.243";
phobosIP = "192.168.50.180"; phobosIP = "192.168.50.180";
synologyIP = "192.168.50.210"; synologyIP = "192.168.50.210";
venusIP = "192.168.58.104";
brotherIP = "192.168.50.195"; brotherIP = "192.168.50.195";
}; };

View file

@ -1,5 +1,7 @@
let let
currentTheme0 = catppuccin-macchiato; currentTheme0 = catppuccin-macchiato; # User0 Theme
currentTheme1 = catppuccin-mocha; # User1 Theme
currentTheme2 = catppuccin-mocha; # User2 Theme
brogrammer = "brogrammer"; brogrammer = "brogrammer";
catppuccin-frappe = "catppuccin-frappe"; catppuccin-frappe = "catppuccin-frappe";
@ -27,18 +29,42 @@ in
borders = 3; borders = 3;
rounding = 20; rounding = 20;
}; };
currentTheme = currentTheme0; currentTheme = {
theme0 = currentTheme0; # User0 Theme
theme1 = currentTheme1; # User1 Theme
theme2 = currentTheme2; # User2 Theme
};
cursor = { cursor = {
name = ""; name = "";
size = 18; size = 18;
}; };
fonts = { fonts = {
name = "MonaspiceRn Nerd Font"; names = {
name0 = "MonaspiceRn Nerd Font"; # User0 Font
name1 = ""; # User1 Font
name2 = ""; # User2 Font
};
sizes = { sizes = {
applications = 14; applications = {
desktop = 12; size0 = 14; # User0 Size
popups = 10; size1 = 14; # User1 Size
terminal = 10; size2 = 14; # User2 Size
};
desktop = {
size0 = 12; # User0 Size
size1 = 12; # User1 Size
size2 = 12; # User2 Size
};
popups = {
size0 = 10; # User0 Size
size1 = 10; # User1 Size
size2 = 10; # User2 Size
};
terminal = {
size0 = 10; # User0 Size
size1 = 10; # User1 Size
size2 = 10; # User2 Size
};
}; };
}; };
palettes = palettes =
@ -65,6 +91,7 @@ in
${one-dark} = import (palettePath + onePath + /dark); ${one-dark} = import (palettePath + onePath + /dark);
${one-light} = import (palettePath + onePath + /light); ${one-light} = import (palettePath + onePath + /light);
${sparky} = import (palettePath + /sparky); ${sparky} = import (palettePath + /sparky);
}; };
}; };
} }

View file

@ -5,16 +5,11 @@ let
; ;
in in
{ {
name = "Streaming"; name = "Garnet";
aliases = {
};
email = { email = {
address0 = "nick@upRootNutrition.com"; address0 = "ninaeffler@gmail.com";
}; };
paths = { paths = {
path0 = "/home/${user1}/Files/Projects"; # Git path path0 = "/home/${user1}/Files/Projects"; # Git path
}; };
sshKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBF9TmImDoYDpsW5VMFbOcuK3aH4TWRtx/xGxT3yUtEN nick@desktop"
];
} }

View file

@ -0,0 +1,19 @@
{ user2 }:
let
inherit
user2
;
in
{
name = "Stacie";
email = {
address0 = "staciesimonson@gmail.com";
};
paths = {
path0 = "/home/${user2}"; # Git path
};
sshKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILQQDw0NigCC76G/GlHWIMunckaBmfgqbfJXFGWB+8fe stacie@desktop"
];
}

View file

@ -0,0 +1,20 @@
{ user3 }:
let
inherit
user3
;
in
{
name = "Streaming";
aliases = {
};
email = {
address0 = "nick@upRootNutrition.com";
};
paths = {
path0 = "/home/${user3}/Files/Projects"; # Git path
};
sshKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBF9TmImDoYDpsW5VMFbOcuK3aH4TWRtx/xGxT3yUtEN nick@desktop"
];
}

View file

@ -2,15 +2,21 @@ let
configPath = ./config; configPath = ./config;
user0 = "nick"; user0 = "nick";
user1 = "streaming"; user1 = "garnet";
user2 = "fallaryn";
user3 = "streaming";
in in
{ {
inherit inherit
user0 user0
user1 user1
user2
user3
; ;
users = { users = {
"${user0}" = import (configPath + /user0.nix) { inherit user0; }; "${user0}" = import (configPath + /user0.nix) { inherit user0; };
"${user1}" = import (configPath + /user1.nix) { inherit user1; }; "${user1}" = import (configPath + /user1.nix) { inherit user1; };
"${user2}" = import (configPath + /user2.nix) { inherit user2; };
"${user3}" = import (configPath + /user3.nix) { inherit user3; };
}; };
} }

View file

@ -1,3 +1,8 @@
{
flake,
pkgs,
...
}:
{ {
programs.yazi = programs.yazi =
let let

View file

@ -7,11 +7,19 @@
let let
inherit (flake.config.aesthetics.themes) currentTheme palettes; inherit (flake.config.aesthetics.themes) currentTheme palettes;
inherit (flake.config.people) user0; inherit (flake.config.people) user0 user1 user2;
user = config.home.username; user = config.home.username;
themeLogic = if user == user0 then currentTheme else currentTheme; themeLogic =
if user == user0 then
currentTheme.theme0
else if user == user1 then
currentTheme.theme1
else if user == user2 then
currentTheme.theme2
else
currentTheme.theme0;
el = palettes.${themeLogic}.colours; el = palettes.${themeLogic}.colours;

View file

@ -9,11 +9,19 @@ let
palettes palettes
; ;
inherit (flake.config.people) user0; inherit (flake.config.people) user0 user1 user2;
user = config.home.username; user = config.home.username;
themeLogic = if user == user0 then currentTheme else currentTheme; themeLogic =
if user == user0 then
currentTheme.theme0
else if user == user1 then
currentTheme.theme1
else if user == user2 then
currentTheme.theme2
else
currentTheme.theme0;
el = palettes.${themeLogic}.colours; el = palettes.${themeLogic}.colours;
in in

View file

@ -7,7 +7,9 @@ in
flake.homeModules = flake.homeModules =
let let
inherit (config.machines.devices) inherit (config.machines.devices)
charon
mars mars
venus
deimos deimos
ceres ceres
phobos phobos
@ -15,6 +17,8 @@ in
inherit (config.people) inherit (config.people)
user0 user0
user1 user1
user2
user3
; ;
in in
{ {
@ -55,12 +59,13 @@ in
systemMonitor systemMonitor
usbImager usbImager
virtManager virtManager
# polychromatic
espanso espanso
claudeCode claudeCode
zoom zoom
academic academic
hypr hypr
niri # niri
wayland wayland
theming theming
printManager printManager
@ -72,6 +77,27 @@ in
}; };
}; };
"${mars.name}-${user1}" = { "${mars.name}-${user1}" = {
imports = builtins.attrValues {
inherit (modules)
cli
brave
ghostty
zed
gaming
spotify
docs
mpv
kolourPaint
discord
signal
scrcpy
bitwarden
emote
desktop
;
};
};
"${mars.name}-${user3}" = {
imports = builtins.attrValues { imports = builtins.attrValues {
inherit (modules) inherit (modules)
cli cli
@ -97,6 +123,35 @@ in
; ;
}; };
}; };
"${venus.name}-${user2}" = {
imports = builtins.attrValues {
inherit (modules)
cli
firefox
brave
code
ghostty
gaming
spotify
audioProduction
wpsOffice
obsidian
okular
images
modeling
obsStudio
kdenlive
videoPlaying
discord
signal
tdesktop
teams
whatsApp
zoom
tools
;
};
};
"${deimos.name}-${user0}" = { "${deimos.name}-${user0}" = {
imports = builtins.attrValues { imports = builtins.attrValues {
inherit (modules) inherit (modules)
@ -140,6 +195,7 @@ in
niri niri
wayland wayland
theming theming
# polychromatic
dolphin dolphin
espanso espanso
zotero zotero
@ -148,6 +204,55 @@ in
; ;
}; };
}; };
"${deimos.name}-${user1}" = {
imports = builtins.attrValues {
inherit (modules)
cli
brave
ghostty
zed
gaming
spotify
docs
mpv
kolourPaint
discord
signal
scrcpy
bitwarden
emote
hypr
wayland
niri
theming
;
};
};
"${deimos.name}-${user2}" = {
imports = builtins.attrValues {
inherit (modules)
cli
firefox
brave
code
ghostty
gaming
spotify
wpsOffice
obsidian
okular
images
videoPlaying
discord
signal
niri
hypr
wayland
theming
tools
;
};
};
"${phobos.name}-${user0}" = { "${phobos.name}-${user0}" = {
imports = builtins.attrValues { imports = builtins.attrValues {
inherit (modules) inherit (modules)
@ -177,6 +282,30 @@ in
; ;
}; };
}; };
"${charon.name}-${user1}" = {
imports = builtins.attrValues {
inherit (modules)
cli
brave
ghostty
zed
gaming
spotify
docs
mpv
jellyfin
kolourPaint
systemMonitor
discord
signal
scrcpy
bitwarden
emote
gnome
theming
;
};
};
"${ceres.name}-${user0}" = { "${ceres.name}-${user0}" = {
imports = builtins.attrValues { imports = builtins.attrValues {
inherit (modules) inherit (modules)

View file

@ -28,6 +28,12 @@ let
"chat" "chat"
"ai" "ai"
]; ];
owncastTags = [
instances.owncast.name
"own"
"cast"
"stream"
];
syncthingTags = [ syncthingTags = [
instances.syncthing.name instances.syncthing.name
"sync" "sync"

View file

@ -24,10 +24,10 @@ in
"workbench.statusBar.visible" = false; "workbench.statusBar.visible" = false;
"editor.multiCursorLimit" = 700000; "editor.multiCursorLimit" = 700000;
"editor.wordWrap" = "on"; "editor.wordWrap" = "on";
"editor.fontSize" = fonts.sizes.applications; "editor.fontSize" = fonts.sizes.applications.size0;
"editor.fontFamily" = "'${fonts.name}', 'monospace', monospace"; "editor.fontFamily" = "'${fonts.names.name0}', 'monospace', monospace";
"terminal.integrated.fontSize" = fonts.sizes.applications; "terminal.integrated.fontSize" = fonts.sizes.applications.size0;
"terminal.integrated.fontFamily" = "'${fonts.name}', 'monospace', monospace"; "terminal.integrated.fontFamily" = "'${fonts.names.name0}', 'monospace', monospace";
"editor.fontLigatures" = true; "editor.fontLigatures" = true;
"elmLS.disableElmLSDiagnostics" = true; "elmLS.disableElmLSDiagnostics" = true;
"elmLS.elmReviewDiagnostics" = "warning"; "elmLS.elmReviewDiagnostics" = "warning";

View file

@ -5,13 +5,13 @@ let
; ;
in in
{ {
ui_font_family = fonts.name; ui_font_family = fonts.names.name0;
buffer_font_family = fonts.name; buffer_font_family = fonts.names.name0;
hour_format = "hour12"; hour_format = "hour12";
vim_mode = false; vim_mode = false;
show_whitespaces = "none"; show_whitespaces = "none";
ui_font_size = fonts.sizes.applications; ui_font_size = fonts.sizes.applications.size0;
buffer_font_size = fonts.sizes.applications; buffer_font_size = fonts.sizes.applications.size0;
tab_size = 2; tab_size = 2;
cursor_blink = true; cursor_blink = true;
theme = "Catppuccin Macchiato"; theme = "Catppuccin Macchiato";

View file

@ -25,9 +25,9 @@ in
TERM = "ghostty"; TERM = "ghostty";
}; };
font_family = fonts.name; font_family = fonts.names.name0;
font_features = null; font_features = null;
font_size = fonts.sizes.terminal; font_size = fonts.sizes.terminal.size0;
line_height = "comfortable"; line_height = "comfortable";
option_as_meta = false; option_as_meta = false;
button = false; button = false;

View file

@ -0,0 +1,816 @@
{
config,
flake,
...
}:
let
inherit (flake.config.aesthetics.themes) currentTheme palettes;
inherit (flake.config.people) user0 user1 user2;
user = config.home.username;
themeLogic =
if user == user0 then
currentTheme.theme0
else if user == user1 then
currentTheme.theme1
else if user == user2 then
currentTheme.theme2
else
currentTheme.theme0;
el = palettes.${themeLogic}.colours;
in
{
accents = [
"${el.base0E}66"
"${el.base07}66"
"${el.base16}66"
"${el.base0B}66"
"${el.base0A}66"
"${el.base09}66"
"${el.base08}66"
];
border = {
value = "#${el.base02}";
variant = "#${el.base0E}";
focused = "#${el.base07}";
selected = "#${el.base0E}";
transparent = "#${el.base0B}";
disabled = "#${el.base03}";
};
elevated_surface.background = "#${el.base01}";
surface.background = "#${el.base01}";
background = {
value = "#${el.base00}";
appearance = "opaque";
};
element = {
background = "#${el.base11}";
hover = "#${el.base03}4d";
active = "#${el.base04}4d";
selected = "#${el.base02}4d";
disabled = "#${el.base03}";
};
drop_target.background = "#${el.base02}66";
ghost_element = {
background = "#${el.base11}59";
hover = "#${el.base03}4d";
active = "#${el.base04}99";
selected = "#${el.base05}1a";
disabled = "#${el.base03}";
};
text = {
value = "#${el.base05}";
muted = "#${el.base05}";
placeholder = "#${el.base04}";
disabled = "#${el.base03}";
accent = "#${el.base0E}";
};
icon = {
value = "#${el.base05}";
muted = "#${el.base04}";
disabled = "#${el.base03}";
placeholder = "#${el.base04}";
accent = "#${el.base0E}";
};
status_bar.background = "#${el.base11}";
title_bar = {
background = "#${el.base11}";
inactive_background = "#${el.base11}d9";
};
toolbar.background = "#${el.base00}";
tab_bar.background = "#${el.base11}";
tab = {
inactive_background = "#${el.base11}";
active_background = "#${el.base00}";
};
search.match_background = "#${el.base0C}33";
panel = {
background = "#${el.base01}";
focused_border = "#${el.base05}";
indent_guide = "#${el.base02}99";
indent_guide_active = "#${el.base04}";
indent_guide_hover = "#${el.base0E}";
};
pane.focused_border = "#${el.base05}";
pane_group.border = "#${el.base02}";
scrollbar = {
thumb = {
background = "#${el.base0E}33";
hover_background = "#${el.base03}";
border = "#${el.base0E}";
scrollbar.track.background = null;
};
track.border = "#${el.base05}12";
};
editor = {
foreground = "#${el.base05}";
background = "#${el.base00}";
gutter.background = "#${el.base00}";
subheader.background = "#${el.base01}";
active_line.background = "#${el.base05}0d";
highlighted_line.background = null;
line_number = "#${el.base04}";
active_line_number = "#${el.base0E}";
invisible = "#${el.base05}66";
wrap_guide = "#${el.base04}";
active_wrap_guide = "#${el.base04}";
document_highlight = {
bracket_background = "#${el.base06}40";
read_background = "#${el.base05}29";
write_background = "#${el.base05}29";
};
indent_guide = "#${el.base02}99";
indent_guide_active = "#${el.base04}";
};
terminal = {
background = "#${el.base00}";
ansi.background = "#${el.base00}";
foreground = "#${el.base05}";
dim_foreground = "#${el.base04}";
bright_foreground = "#${el.base05}";
};
link_text.hover = "#${el.base15}";
conflict = {
value = "#${el.base0A}";
border = "#${el.base0A}";
background = "#${el.base01}";
};
created = {
value = "#${el.base0B}";
border = "#${el.base0B}";
background = "#${el.base01}";
};
deleted = {
value = "#${el.base08}";
border = "#${el.base08}";
background = "#${el.base01}";
};
hidden = {
value = "#${el.base03}";
border = "#${el.base03}";
background = "#${el.base01}";
};
hint = {
value = "#${el.base04}";
border = "#${el.base04}";
background = "#${el.base01}";
};
ignored = {
value = "#${el.base03}";
border = "#${el.base03}";
background = "#${el.base01}";
};
modified = {
value = "#${el.base0A}";
border = "#${el.base0A}";
background = "#${el.base01}";
};
predictive = {
value = "#${el.base03}";
border = "#${el.base07}";
background = "#${el.base01}";
};
renamed = {
value = "#${el.base16}";
border = "#${el.base16}";
background = "#${el.base01}";
};
info = {
value = "#${el.base0C}";
border = "#${el.base0C}";
background = "#${el.base05}33";
};
warning = {
value = "#${el.base0A}";
border = "#${el.base0A}";
background = "#${el.base0A}1f";
};
error = {
value = "#${el.base08}";
border = "#${el.base08}";
background = "#${el.base08}1f";
};
success = {
value = "#${el.base0B}";
border = "#${el.base0B}";
background = "#${el.base0B}1f";
};
unreachable = {
value = "#${el.base08}";
border = "#${el.base08}";
background = "#${el.base08}1f";
};
players = [
{
cursor = "#${el.base06}";
selection = "#${el.base04}80";
background = "#${el.base06}";
}
{
cursor = "#${el.base0E}";
selection = "#${el.base0E}33";
background = "#${el.base0E}";
}
{
cursor = "#${el.base07}";
selection = "#${el.base07}33";
background = "#${el.base07}";
}
{
cursor = "#${el.base16}";
selection = "#${el.base16}33";
background = "#${el.base16}";
}
{
cursor = "#${el.base0B}";
selection = "#${el.base0B}33";
background = "#${el.base0B}";
}
{
cursor = "#${el.base0A}";
selection = "#${el.base0A}33";
background = "#${el.base0A}";
}
{
cursor = "#${el.base09}";
selection = "#${el.base09}33";
background = "#${el.base09}";
}
{
cursor = "#${el.base08}";
selection = "#${el.base08}33";
background = "#${el.base08}";
}
];
syntax = {
variable = {
color = "#${el.base05}";
font_style = null;
font_weight = null;
};
variable.builtin = {
color = "#${el.base08}";
font_style = null;
font_weight = null;
};
variable.parameter = {
color = "#${el.base12}";
font_style = null;
font_weight = null;
};
variable.member = {
color = "#${el.base0D}";
font_style = null;
font_weight = null;
};
variable.special = {
color = "#${el.base17}";
font_style = "italic";
font_weight = null;
};
constant = {
color = "#${el.base09}";
font_style = null;
font_weight = null;
};
constant.builtin = {
color = "#${el.base09}";
font_style = null;
font_weight = null;
};
constant.macro = {
color = "#${el.base0E}";
font_style = null;
font_weight = null;
};
module = {
color = "#${el.base0A}";
font_style = "italic";
font_weight = null;
};
label = {
color = "#${el.base16}";
font_style = null;
font_weight = null;
};
string = {
color = "#${el.base0B}";
font_style = null;
font_weight = null;
};
string.documentation = {
color = "#${el.base0C}";
font_style = null;
font_weight = null;
};
string.regexp = {
color = "#${el.base09}";
font_style = null;
font_weight = null;
};
string.escape = {
color = "#${el.base17}";
font_style = null;
font_weight = null;
};
string.special = {
color = "#${el.base17}";
font_style = null;
font_weight = null;
};
string.special.path = {
color = "#${el.base17}";
font_style = null;
font_weight = null;
};
string.special.symbol = {
color = "#${el.base0F}";
font_style = null;
font_weight = null;
};
string.special.url = {
color = "#${el.base06}";
font_style = "italic";
font_weight = null;
};
character = {
color = "#${el.base0C}";
font_style = null;
font_weight = null;
};
character.special = {
color = "#${el.base17}";
font_style = null;
font_weight = null;
};
boolean = {
color = "#${el.base09}";
font_style = null;
font_weight = null;
};
number = {
color = "#${el.base09}";
font_style = null;
font_weight = null;
};
number.float = {
color = "#${el.base09}";
font_style = null;
font_weight = null;
};
type = {
color = "#${el.base0A}";
font_style = null;
font_weight = null;
};
type.builtin = {
color = "#${el.base0E}";
font_style = "italic";
font_weight = null;
};
type.definition = {
color = "#${el.base0A}";
font_style = null;
font_weight = null;
};
type.interface = {
color = "#${el.base0A}";
font_style = "italic";
font_weight = null;
};
type.super = {
color = "#${el.base0A}";
font_style = "italic";
font_weight = null;
};
attribute = {
color = "#${el.base09}";
font_style = null;
font_weight = null;
};
property = {
color = "#${el.base0D}";
font_style = null;
font_weight = null;
};
function = {
color = "#${el.base0D}";
font_style = null;
font_weight = null;
};
function.builtin = {
color = "#${el.base09}";
font_style = null;
font_weight = null;
};
function.call = {
color = "#${el.base0D}";
font_style = null;
font_weight = null;
};
function.macro = {
color = "#${el.base0C}";
font_style = null;
font_weight = null;
};
function.method = {
color = "#${el.base0D}";
font_style = null;
font_weight = null;
};
function.method.call = {
color = "#${el.base0D}";
font_style = null;
font_weight = null;
};
constructor = {
color = "#${el.base0F}";
font_style = null;
font_weight = null;
};
operator = {
color = "#${el.base15}";
font_style = null;
font_weight = null;
};
keyword = {
color = "#${el.base0E}";
font_style = null;
font_weight = null;
};
keyword.modifier = {
color = "#${el.base0E}";
font_style = null;
font_weight = null;
};
keyword.type = {
color = "#${el.base0E}";
font_style = null;
font_weight = null;
};
keyword.coroutine = {
color = "#${el.base0E}";
font_style = null;
font_weight = null;
};
keyword.function = {
color = "#${el.base0E}";
font_style = null;
font_weight = null;
};
keyword.operator = {
color = "#${el.base0E}";
font_style = null;
font_weight = null;
};
keyword.import = {
color = "#${el.base0E}";
font_style = null;
font_weight = null;
};
keyword.repeat = {
color = "#${el.base0E}";
font_style = null;
font_weight = null;
};
keyword.return = {
color = "#${el.base0E}";
font_style = null;
font_weight = null;
};
keyword.debug = {
color = "#${el.base0E}";
font_style = null;
font_weight = null;
};
keyword.exception = {
color = "#${el.base0E}";
font_style = null;
font_weight = null;
};
keyword.conditional = {
color = "#${el.base0E}";
font_style = null;
font_weight = null;
};
keyword.conditional.ternary = {
color = "#${el.base0E}";
font_style = null;
font_weight = null;
};
keyword.directive = {
color = "#${el.base17}";
font_style = null;
font_weight = null;
};
keyword.directive.define = {
color = "#${el.base17}";
font_style = null;
font_weight = null;
};
keyword.export = {
color = "#${el.base15}";
font_style = null;
font_weight = null;
};
punctuation = {
color = "#${el.base05}";
font_style = null;
font_weight = null;
};
punctuation.delimiter = {
color = "#${el.base05}";
font_style = null;
font_weight = null;
};
punctuation.bracket = {
color = "#${el.base05}";
font_style = null;
font_weight = null;
};
punctuation.special = {
color = "#${el.base17}";
font_style = null;
font_weight = null;
};
punctuation.special.symbol = {
color = "#${el.base0F}";
font_style = null;
font_weight = null;
};
punctuation.list_marker = {
color = "#${el.base0C}";
font_style = null;
font_weight = null;
};
comment = {
color = "#${el.base05}";
font_style = "italic";
font_weight = null;
};
comment.doc = {
color = "#${el.base05}";
font_style = "italic";
font_weight = null;
};
comment.documentation = {
color = "#${el.base05}";
font_style = "italic";
font_weight = null;
};
comment.error = {
color = "#${el.base08}";
font_style = "italic";
font_weight = null;
};
comment.warning = {
color = "#${el.base0A}";
font_style = "italic";
font_weight = null;
};
comment.hint = {
color = "#${el.base0D}";
font_style = "italic";
font_weight = null;
};
comment.todo = {
color = "#${el.base0F}";
font_style = "italic";
font_weight = null;
};
comment.note = {
color = "#${el.base06}";
font_style = "italic";
font_weight = null;
};
diff.plus = {
color = "#${el.base0B}";
font_style = null;
font_weight = null;
};
diff.minus = {
color = "#${el.base08}";
font_style = null;
font_weight = null;
};
tag = {
color = "#${el.base0D}";
font_style = null;
font_weight = null;
};
tag.attribute = {
color = "#${el.base0A}";
font_style = "italic";
font_weight = null;
};
tag.delimiter = {
color = "#${el.base0C}";
font_style = null;
font_weight = null;
};
parameter = {
color = "#${el.base12}";
font_style = null;
font_weight = null;
};
field = {
color = "#${el.base07}";
font_style = null;
font_weight = null;
};
namespace = {
color = "#${el.base0A}";
font_style = "italic";
font_weight = null;
};
float = {
color = "#${el.base09}";
font_style = null;
font_weight = null;
};
symbol = {
color = "#${el.base17}";
font_style = null;
font_weight = null;
};
string.regex = {
color = "#${el.base09}";
font_style = null;
font_weight = null;
};
text = {
color = "#${el.base05}";
font_style = null;
font_weight = null;
};
emphasis.strong = {
color = "#${el.base12}";
font_style = null;
font_weight = 700;
};
emphasis = {
color = "#${el.base12}";
font_style = "italic";
font_weight = null;
};
embedded = {
color = "#${el.base12}";
font_style = null;
font_weight = null;
};
text.literal = {
color = "#${el.base0B}";
font_style = null;
font_weight = null;
};
concept = {
color = "#${el.base16}";
font_style = null;
font_weight = null;
};
enum = {
color = "#${el.base0C}";
font_style = null;
font_weight = 700;
};
function.decorator = {
color = "#${el.base09}";
font_style = null;
font_weight = null;
};
type.class.definition = {
color = "#${el.base0A}";
font_style = null;
font_weight = 700;
};
hint = {
color = "#${el.base04}";
font_style = "italic";
font_weight = null;
};
link_text = {
color = "#${el.base0D}";
font_style = null;
font_weight = null;
};
link_uri = {
color = "#${el.base06}";
font_style = "italic";
font_weight = null;
};
parent = {
color = "#${el.base09}";
font_style = null;
font_weight = null;
};
predictive = {
color = "#${el.base03}";
font_style = null;
font_weight = null;
};
predoc = {
color = "#${el.base08}";
font_style = null;
font_weight = null;
};
primary = {
color = "#${el.base12}";
font_style = null;
font_weight = null;
};
tag.doctype = {
color = "#${el.base0E}";
font_style = null;
font_weight = null;
};
string.doc = {
color = "#${el.base0C}";
font_style = "italic";
font_weight = null;
};
title = {
color = "#${el.base05}";
font_style = null;
font_weight = 800;
};
variant = {
color = "#${el.base08}";
font_style = null;
font_weight = null;
};
};
}

View file

@ -11,6 +11,7 @@ let
languagesPath = import (configPath + /languages); languagesPath = import (configPath + /languages);
lspPath = import (configPath + /lsp); lspPath = import (configPath + /lsp);
terminalPath = import (configPath + /terminal) { inherit flake; }; terminalPath = import (configPath + /terminal) { inherit flake; };
# experimentalPath = import (configPath + /theme) { inherit config flake; };
gitPath = import (configPath + /git); gitPath = import (configPath + /git);
miscPath = import (configPath + /misc) { inherit lib pkgs; }; miscPath = import (configPath + /misc) { inherit lib pkgs; };
in in
@ -19,6 +20,7 @@ in
languages = languagesPath; languages = languagesPath;
lsp = lspPath; lsp = lspPath;
terminal = terminalPath; terminal = terminalPath;
# experimental.theme_overrides = experimentalPath;
} }
// assistantPath // assistantPath

View file

@ -18,7 +18,7 @@ let
; ;
}; };
extraPackagesPath = import (configPath + /extraPackages) { inherit pkgs; }; extraPackagesPath = import (configPath + /extraPackages) { inherit pkgs; };
# packagePath = flake.inputs.zed-editor.packages.${pkgs.system}.default; packagePath = flake.inputs.zed-editor.packages.${pkgs.system}.default;
in in
{ {
programs.zed-editor = { programs.zed-editor = {

View file

@ -1,5 +1,6 @@
{ {
flake, flake,
osConfig,
pkgs, pkgs,
... ...
}: }:
@ -9,8 +10,8 @@ in
{ {
confirm-close-surface = false; confirm-close-surface = false;
window-decoration = true; window-decoration = true;
font-size = fonts.sizes.terminal; font-size = fonts.sizes.terminal.size0;
font-family = fonts.name; font-family = fonts.names.name0;
window-padding-x = 10; window-padding-x = 10;
window-padding-y = 10; window-padding-y = 10;
copy-on-select = true; copy-on-select = true;

View file

@ -6,11 +6,19 @@
let let
inherit (flake.config.aesthetics.themes) currentTheme palettes; inherit (flake.config.aesthetics.themes) currentTheme palettes;
inherit (flake.config.people) user0; inherit (flake.config.people) user0 user1 user2;
user = config.home.username; user = config.home.username;
themeLogic = if user == user0 then currentTheme else currentTheme; themeLogic =
if user == user0 then
currentTheme.theme0
else if user == user1 then
currentTheme.theme1
else if user == user2 then
currentTheme.theme2
else
currentTheme.theme0;
el = palettes.${themeLogic}.colours; el = palettes.${themeLogic}.colours;
in in

View file

@ -11,8 +11,8 @@ in
programs.kitty = { programs.kitty = {
enable = true; enable = true;
font = { font = {
name = fonts.name; name = fonts.names.name0;
size = fonts.sizes.terminal; size = fonts.sizes.terminal.size0;
}; };
themeFile = "Catppuccin-Macchiato"; themeFile = "Catppuccin-Macchiato";
}; };

View file

@ -7,8 +7,8 @@ in
'' ''
return { return {
color_scheme = "Catppuccin Macchiato", color_scheme = "Catppuccin Macchiato",
font_size = ${builtins.toString fonts.sizes.terminal}, font_size = ${builtins.toString fonts.sizes.terminal.size0},
font = wezterm.font('${fonts.name}'), font = wezterm.font('${fonts.names.name0}'),
enable_tab_bar = false, enable_tab_bar = false,
window_close_confirmation = 'NeverPrompt', window_close_confirmation = 'NeverPrompt',
term = 'wezterm', term = 'wezterm',

View file

@ -28,8 +28,8 @@ in
}; };
}; };
home.packages = builtins.attrValues { home.packages = builtins.attrValues {
# inherit (pkgs) inherit (pkgs)
# # flameshot # flameshot
# ; ;
}; };
} }

View file

@ -11,11 +11,19 @@ let
windowManager windowManager
; ;
inherit (flake.config.people) user0; inherit (flake.config.people) user0 user1 user2;
user = config.home.username; user = config.home.username;
themeLogic = if user == user0 then currentTheme else currentTheme; themeLogic =
if user == user0 then
currentTheme.theme0
else if user == user1 then
currentTheme.theme1
else if user == user2 then
currentTheme.theme2
else
currentTheme.theme0;
el = palettes.${themeLogic}.colours; el = palettes.${themeLogic}.colours;
in in

View file

@ -2,6 +2,7 @@
config, config,
flake, flake,
osConfig, osConfig,
workspaceStrings,
... ...
}: }:
let let

View file

@ -10,12 +10,20 @@ let
inherit (flake.config.aesthetics.themes) currentTheme palettes; inherit (flake.config.aesthetics.themes) currentTheme palettes;
inherit (flake.config.people) user0; inherit (flake.config.people) user0 user1 user2;
user = config.home.username; user = config.home.username;
colourHelpers = { colourHelpers = {
themeLogic = if user == user0 then currentTheme else currentTheme; themeLogic =
if user == user0 then
currentTheme.theme0
else if user == user1 then
currentTheme.theme1
else if user == user2 then
currentTheme.theme2
else
currentTheme.theme0;
el = palettes.${colourHelpers.themeLogic}.colours; el = palettes.${colourHelpers.themeLogic}.colours;

View file

@ -5,6 +5,7 @@
... ...
}: }:
let let
inherit (flake.config.aesthetics.themes) cursor;
configPath = ./config; configPath = ./config;
settingsPath = { settingsPath = {
spawn = import (configPath + /spawn.nix) { inherit config flake; }; spawn = import (configPath + /spawn.nix) { inherit config flake; };

View file

@ -11,11 +11,19 @@ let
fonts fonts
; ;
inherit (flake.config.people) user0; inherit (flake.config.people) user0 user1 user2;
user = config.home.username; user = config.home.username;
themeLogic = if user == user0 then currentTheme else currentTheme; themeLogic =
if user == user0 then
currentTheme.theme0
else if user == user1 then
currentTheme.theme1
else if user == user2 then
currentTheme.theme2
else
currentTheme.theme0;
el = palettes.${themeLogic}.colours; el = palettes.${themeLogic}.colours;
@ -23,7 +31,7 @@ let
in in
{ {
global = { global = {
font = "${fonts.name} ${builtins.toString fonts.sizes.popups}"; font = "${fonts.names.name0} ${builtins.toString fonts.sizes.popups.size0}";
background = makeColor el.base01; background = makeColor el.base01;
frame_color = makeColor el.base0E; frame_color = makeColor el.base0E;
foreground = makeColor el.base05; foreground = makeColor el.base05;

View file

@ -8,11 +8,19 @@ let
inherit (flake.config.aesthetics.themes) currentTheme palettes fonts; inherit (flake.config.aesthetics.themes) currentTheme palettes fonts;
inherit (flake.config.people) user0; inherit (flake.config.people) user0 user1 user2;
user = config.home.username; user = config.home.username;
themeLogic = if user == user0 then currentTheme else currentTheme; themeLogic =
if user == user0 then
currentTheme.theme0
else if user == user1 then
currentTheme.theme1
else if user == user2 then
currentTheme.theme2
else
currentTheme.theme0;
el = palettes.${themeLogic}.colours; el = palettes.${themeLogic}.colours;
@ -27,7 +35,7 @@ in
dpi-aware = "no"; dpi-aware = "no";
icon-theme = "Papirus-Dark"; icon-theme = "Papirus-Dark";
width = 25; width = 25;
font = "${fonts.name}:weight=bold:size=${toString fonts.sizes.popups}"; font = "${fonts.names.name0}:weight=bold:size=${toString fonts.sizes.desktop.size0}";
terminal = "${pkgs.ghostty}/bin/ghostty"; terminal = "${pkgs.ghostty}/bin/ghostty";
layer = "overlay"; layer = "overlay";
fields = "name"; fields = "name";

View file

@ -10,17 +10,25 @@ let
fonts fonts
; ;
inherit (flake.config.people) user0; inherit (flake.config.people) user0 user1 user2;
user = config.home.username; user = config.home.username;
themeLogic = if user == user0 then currentTheme else currentTheme; themeLogic =
if user == user0 then
currentTheme.theme0
else if user == user1 then
currentTheme.theme1
else if user == user2 then
currentTheme.theme2
else
currentTheme.theme0;
el = palettes.${themeLogic}.colours; el = palettes.${themeLogic}.colours;
in in
{ {
font = fonts.name; font = fonts.names.name0;
font-size = fonts.sizes.popups; font-size = fonts.sizes.desktop.size0;
indicator-idle-visible = true; indicator-idle-visible = true;
indicator-radius = 100; indicator-radius = 100;
indicator-thickness = 20; indicator-thickness = 20;

View file

@ -12,17 +12,25 @@ let
windowManager windowManager
; ;
inherit (flake.config.people) user0; inherit (flake.config.people) user0 user1 user2;
user = config.home.username; user = config.home.username;
themeLogic = if user == user0 then currentTheme else currentTheme; themeLogic =
if user == user0 then
currentTheme.theme0
else if user == user1 then
currentTheme.theme1
else if user == user2 then
currentTheme.theme2
else
currentTheme.theme0;
el = palettes.${themeLogic}.colours; el = palettes.${themeLogic}.colours;
custom = { custom = {
font = fonts.name; font = fonts.names.name0;
font_size = fonts.sizes.popups; font_size = fonts.sizes.desktop.size0;
font_weight = "bold"; font_weight = "bold";
opacityBg = "0.90"; opacityBg = "0.90";
opacityBt = "1"; opacityBt = "1";

View file

@ -1,9 +1,44 @@
{ flake, ... }: {
flake,
config,
...
}:
let let
inherit (flake.config.people) inherit (flake.config.people)
user0 user0
user1 user1
user2
user3
; ;
inherit (flake.config.machines)
devices
;
hostname = config.networking.hostName;
mars = devices.mars.name;
ceres = devices.ceres.name;
venus = devices.venus.name;
charon = devices.charon.name;
deimos = devices.deimos.name;
userLogic =
if
builtins.elem hostname [
mars
deimos
ceres
]
then
[
user0
user1
user3
]
else if hostname == charon then
[ user1 ]
else if hostname == venus then
[ user2 ]
else
[ ];
in in
{ {
security = { security = {
@ -13,10 +48,7 @@ in
{ {
keepEnv = true; keepEnv = true;
noPass = true; noPass = true;
users = [ users = userLogic;
user0
user1
];
} }
]; ];
}; };

View file

@ -1,4 +1,8 @@
{ pkgs, ... }: {
pkgs,
config,
...
}:
{ {
environment = { environment = {
enableAllTerminfo = true; enableAllTerminfo = true;

View file

@ -14,13 +14,13 @@ in
enable = true; enable = true;
defaultFonts = { defaultFonts = {
serif = [ serif = [
fonts.name fonts.names.name0
]; ];
monospace = [ monospace = [
fonts.name fonts.names.name0
]; ];
sansSerif = [ sansSerif = [
fonts.name fonts.names.name0
]; ];
emoji = [ emoji = [
"Noto Fonts Color Emoji" "Noto Fonts Color Emoji"

View file

@ -4,38 +4,55 @@
... ...
}: }:
let let
inherit (flake.config.people) user0 user1; inherit (flake.config.people)
inherit (flake.config.machines) devices; user0
user1
user2
user3
;
inherit (flake.config.machines)
devices
;
hostname = config.networking.hostName; hostname = config.networking.hostName;
mars = devices.mars.name; mars = devices.mars.name;
deimos = devices.deimos.name; deimos = devices.deimos.name;
ceres = devices.ceres.name; ceres = devices.ceres.name;
venus = devices.venus.name;
charon = devices.charon.name;
# Helper function to get SSH keys for a specific user
getUserKeys = user: flake.config.people.users.${user}.sshKeys; getUserKeys = user: flake.config.people.users.${user}.sshKeys;
user0Key = {
${user0} = {
openssh.authorizedKeys.keys = getUserKeys user0;
};
};
user1Key = {
${user1} = {
openssh.authorizedKeys.keys = getUserKeys user1;
};
};
in in
{ {
users.users = users.users =
if hostname == mars then if hostname == charon then
user0Key // user1Key { }
else if hostname == mars then
{
${user0} = {
openssh.authorizedKeys.keys = getUserKeys user0;
};
${user3} = {
openssh.authorizedKeys.keys = getUserKeys user3;
};
}
else if else if
builtins.elem hostname [ builtins.elem hostname [
deimos deimos
ceres ceres
] ]
then then
user0Key {
${user0} = {
openssh.authorizedKeys.keys = getUserKeys user0;
};
}
else if hostname == venus then
{
${user2} = {
openssh.authorizedKeys.keys = getUserKeys user2;
};
}
else else
{ }; { };
} }

View file

@ -17,12 +17,23 @@ in
niri niri
wayland wayland
searx searx
xserver
flatpak flatpak
wireGuard wireGuard
; ;
}; };
}; };
venus = {
imports = builtins.attrValues {
inherit (modules)
plasma
sddm
tablet
;
};
};
deimos = { deimos = {
imports = builtins.attrValues { imports = builtins.attrValues {
inherit (modules) inherit (modules)
@ -32,6 +43,7 @@ in
plasma plasma
sddm sddm
flatpak flatpak
xserver
espanso espanso
wireGuard wireGuard
glance glance
@ -44,11 +56,22 @@ in
inherit (modules) inherit (modules)
plasma plasma
sddm sddm
xserver
wireGuard wireGuard
; ;
}; };
}; };
charon = {
imports = builtins.attrValues {
inherit (modules)
gnome
flatpak
xserver
;
};
};
ceres = { ceres = {
imports = builtins.attrValues { imports = builtins.attrValues {
inherit (modules) inherit (modules)
@ -66,6 +89,9 @@ in
searx searx
vaultwarden vaultwarden
forgejo forgejo
xserver
# podgrab
# kanboard
; ;
}; };
}; };
@ -74,7 +100,6 @@ in
imports = builtins.attrValues { imports = builtins.attrValues {
inherit (modules) inherit (modules)
sops sops
xserver
; ;
}; };
}; };

View file

@ -1,3 +1,8 @@
{
flake,
pkgs,
...
}:
{ {
services.hypridle = { services.hypridle = {
enable = true; enable = true;

View file

@ -1,3 +1,8 @@
{
pkgs,
flake,
...
}:
{ {
programs.hyprland = { programs.hyprland = {
enable = true; enable = true;

View file

@ -16,8 +16,8 @@ in
systemPackages = [ systemPackages = [
(pkgs.catppuccin-sddm.override { (pkgs.catppuccin-sddm.override {
flavor = "macchiato"; flavor = "macchiato";
font = "${fonts.name}"; font = "${fonts.names.name0}";
fontSize = "${toString fonts.sizes.popups}"; fontSize = "${toString fonts.sizes.desktop.size0}";
loginBackground = true; loginBackground = true;
}) })
]; ];

View file

@ -1,14 +1,19 @@
{ {
config, config,
flake, flake,
lib,
pkgs, pkgs,
... ...
}: }:
let let
inherit (flake.config.people) inherit (flake.config.people)
user0 user0
user1
user2
; ;
inherit (flake.config.machines) devices; inherit (flake.config.machines) devices;
venus = devices.venus.name;
charon = devices.charon.name;
mars = devices.mars.name; mars = devices.mars.name;
host = config.networking.hostName; host = config.networking.hostName;
@ -21,7 +26,15 @@ in
settings = { settings = {
default_session = { default_session = {
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --time-format '%I:%M %p | %a %h | %F' --theme border=magenta;text=cyan;prompt=green;time=red;action=blue;button=yellow;container=black;input=red --cmd Hyprland"; command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --time-format '%I:%M %p | %a %h | %F' --theme border=magenta;text=cyan;prompt=green;time=red;action=blue;button=yellow;container=black;input=red --cmd Hyprland";
user = if host == mars then "greeter" else user0; user =
if host == mars then
"greeter"
else if host == charon then
user1
else if host == venus then
user2
else
user0;
}; };
}; };
}; };

View file

@ -1,4 +1,4 @@
{ pkgs, ... }: { pkgs, flake, ... }:
{ {
environment.sessionVariables.NIXOS_OZONE_WL = "1"; environment.sessionVariables.NIXOS_OZONE_WL = "1";

View file

@ -1,7 +1,50 @@
{ pkgs, ... }: {
pkgs,
flake,
lib,
...
}:
let
inherit (flake.config.aesthetics.themes)
fonts
;
in
{ {
programs.regreet = { programs.regreet = {
enable = false; enable = false;
package = pkgs.greetd.regreet; package = pkgs.greetd.regreet;
# settings = {
# appearance = {
# greeting_msg = "Back for more, I see.";
# };
# GTK = {
# application_prefer_dark_theme = true;
# cursor_theme_name = lib.mkForce "catppuccin-macchiato-dark-cursors";
# font_name = lib.mkForce "${fonts.names.name0} ${font.size.desktop}";
# icon_theme_name = lib.mkForce "Papirus-Dark";
# theme_name = lib.mkForce "catppuccin-macchiato-mauve-compact";
# };
# };
# theme = {
# name = "catppuccin-macchiato-mauve-compact";
# package = pkgs.catppuccin-gtk.override {
# size = "compact";
# variant = "macchiato";
# accents = [
# "mauve"
# ];
# };
# };
# cursorTheme = {
# name = "catppuccin-macchiato-dark-cursors";
# package = pkgs.catppuccin-cursors.macchiatoDark;
# };
# iconTheme = {
# name = "Papirus-Dark";
# package = pkgs.catppuccin-papirus-folders.override {
# flavor = "macchiato";
# accent = "mauve";
# };
# };
}; };
} }

View file

@ -1,4 +1,4 @@
{ flake, ... }: { flake, config, ... }:
let let
inherit (flake.config.services.instances) audiobookshelf web; inherit (flake.config.services.instances) audiobookshelf web;
inherit (flake.config.machines.devices) ceres; inherit (flake.config.machines.devices) ceres;

View file

@ -1,6 +1,8 @@
{ config, flake, ... }: { config, flake, ... }:
let let
inherit (flake.config.services.instances) glance jellyfin; inherit (flake.config.people) user0;
inherit (flake.config.services.instances) glance jellyfin web;
inherit (flake.config.machines.devices) ceres;
service = glance; service = glance;
configPath = ./config; configPath = ./config;
configImports = { configImports = {

View file

@ -1,6 +1,13 @@
{ flake, ... }: {
flake,
config,
...
}:
let let
inherit (flake.config.services.instances) kanboard web; inherit (flake.config.machines.devices)
ceres
;
inherit (flake.config.services.instances) smtp kanboard web;
service = kanboard; service = kanboard;
localhost = web.localhost.address0; localhost = web.localhost.address0;
host = service.domains.url0; host = service.domains.url0;

View file

@ -1,4 +1,9 @@
{ flake, config, ... }: {
flake,
config,
pkgs,
...
}:
let let
inherit (flake.config.machines.devices) inherit (flake.config.machines.devices)
mars mars

View file

@ -3,6 +3,7 @@ let
inherit (flake.config.machines.devices) inherit (flake.config.machines.devices)
synology synology
phone phone
tablet
; ;
inherit (flake.config.services.instances) inherit (flake.config.services.instances)
syncthing syncthing

View file

@ -1,6 +1,40 @@
{ flake, ... }: {
flake,
config,
...
}:
let let
inherit (flake.config.people) user0; inherit (flake.config.people)
user0
user1
user2
user3
;
inherit (flake.config.machines)
devices
;
hostname = config.networking.hostName;
mars = devices.mars.name;
ceres = devices.ceres.name;
venus = devices.venus.name;
charon = devices.charon.name;
deimos = devices.deimos.name;
userLogic =
if
builtins.elem hostname [
mars
deimos
ceres
]
then
user0
else if hostname == charon then
user1
else if hostname == venus then
user2
else
"";
in in
{ {
sops = { sops = {
@ -10,23 +44,27 @@ in
keyFile = "/var/lib/sops-nix/key.txt"; keyFile = "/var/lib/sops-nix/key.txt";
generateKey = false; generateKey = false;
}; };
secrets = { secrets =
"ssh/private" = { if hostname == charon then
path = "/home/${user0}/.ssh/id_ed25519"; { }
owner = user0; else
}; {
"ssh/public" = { "ssh/private" = {
path = "/home/${user0}/.ssh/id_ed25519.pub"; path = "/home/${userLogic}/.ssh/id_ed25519";
owner = user0; owner = userLogic;
}; };
"ssh/hosts" = { "ssh/public" = {
path = "/home/${user0}/.ssh/known_hosts"; path = "/home/${userLogic}/.ssh/id_ed25519.pub";
owner = user0; owner = userLogic;
}; };
"claude-api-key" = { "ssh/hosts" = {
path = "/home/${user0}/.config/zed/claude-api-key"; path = "/home/${userLogic}/.ssh/known_hosts";
owner = user0; owner = userLogic;
}; };
}; "claude-api-key" = {
path = "/home/${user0}/.config/zed/claude-api-key";
owner = user0;
};
};
}; };
} }

View file

@ -9,6 +9,7 @@ let
inherit (flake) self; inherit (flake) self;
inherit (flake.config.people) user0; inherit (flake.config.people) user0;
inherit (flake.config.machines) devices; inherit (flake.config.machines) devices;
inherit (flake.config.services) instances;
inherit (flake.config.people.users.${user0}) name paths; inherit (flake.config.people.users.${user0}) name paths;
hostname = config.networking.hostName; hostname = config.networking.hostName;
@ -48,17 +49,66 @@ in
username = user0; username = user0;
homeDirectory = "/home/${user0}"; homeDirectory = "/home/${user0}";
file = { file = {
"./justfile" = import ./files/misc/justfile.nix { inherit flake config lib; }; "./justfile" =
let
mars = devices.mars;
deimos = devices.deimos;
deviceLogic = if hostname == mars.name then deimos else mars;
vpnServers = [
"CA363"
"CA220"
"CA358"
"CA627"
];
vpnCommands = lib.concatStrings (
lib.imap0 (i: server: ''
vpn${toString i}:
sudo systemctl start wg-quick-Proton-${server}.service
'') vpnServers
);
in
{
text = ''
rebuildBoot:
nixos-rebuild boot --use-remote-sudo --flake ~/Files/Projects/dotfiles#${hostname} --show-trace
rebuild:
nixos-rebuild switch --use-remote-sudo --flake ~/Files/Projects/dotfiles#${hostname} --show-trace
update:
nix flake update --flake ~/Files/Projects/dotfiles
elm:
cd ~/Files/Projects/website/frontend ; elm-land server
server:
ssh ${devices.ceres.ip.address0}
serverRemote:
ssh ${instances.web.remotehost.address0}
${deviceLogic.name}:
ssh ${deviceLogic.ip.address0}
vpnoff:
sudo systemctl stop wg-quick-Proton-*.service
${vpnCommands}
'';
};
"./Files/Scripts/list.sh" = { "./Files/Scripts/list.sh" = {
source = ./files/scripts/list.sh; source = ./files/list.sh;
executable = true; executable = true;
}; };
"./Files/Scripts/loop.sh" = { "./Files/Scripts/loop.sh" = {
source = ./files/scripts/loop.sh; source = ./files/loop.sh;
executable = true; executable = true;
}; };
"./.config/scripts/get_weather.sh" = { "./.config/scripts/get_weather.sh" = {
source = ./files/scripts/get_weather.sh; source = ./files/get_weather.sh;
executable = true; executable = true;
}; };
".config/wallpaper" = { ".config/wallpaper" = {

View file

@ -1,60 +0,0 @@
{
flake,
config,
lib,
...
}:
let
inherit (flake.config.machines) devices;
inherit (flake.config.services) instances;
mars = devices.mars;
deimos = devices.deimos;
hostname = config.networking.hostName;
deviceLogic = if hostname == mars.name then deimos else mars;
vpnServers = [
"CA363"
"CA220"
"CA358"
"CA627"
];
vpnCommands = lib.concatStrings (
lib.imap0 (i: server: ''
vpn${toString i}:
sudo systemctl start wg-quick-Proton-${server}.service
'') vpnServers
);
in
{
text = ''
rebuildBoot:
nixos-rebuild boot --use-remote-sudo --flake ~/Files/Projects/dotfiles#${hostname} --show-trace
rebuild:
nixos-rebuild switch --use-remote-sudo --flake ~/Files/Projects/dotfiles#${hostname} --show-trace
update:
nix flake update --flake ~/Files/Projects/dotfiles
elm:
cd ~/Files/Projects/website/frontend ; elm-land server
server:
ssh ${devices.ceres.ip.address0}
serverRemote:
ssh ${instances.web.remotehost.address0}
${deviceLogic.name}:
ssh ${deviceLogic.ip.address0}
vpnoff:
sudo systemctl stop wg-quick-Proton-*.service
${vpnCommands}
'';
}

View file

@ -2,14 +2,13 @@
config, config,
flake, flake,
pkgs, pkgs,
lib,
... ...
}: }:
let let
inherit (flake) self; inherit (flake) self;
inherit (flake.config.people) user1; inherit (flake.config.people) user1;
inherit (flake.config.machines) devices; inherit (flake.config.machines) devices;
inherit (flake.config.people.users.${user1}) name paths; inherit (flake.config.people.users.${user1}) name;
hostname = config.networking.hostName; hostname = config.networking.hostName;
in in
{ {
@ -20,15 +19,13 @@ in
isNormalUser = true; isNormalUser = true;
shell = pkgs.nushell; shell = pkgs.nushell;
extraGroups = [ extraGroups = [
"adbusers"
"disk"
"libvirtd" "libvirtd"
"netdev" "disk"
"networkmanager" "networkmanager"
"plugdev"
"samba"
"vboxusers" "vboxusers"
"wheel" "wheel"
"adbusers"
"netdev"
]; ];
}; };
}; };
@ -38,22 +35,19 @@ in
username = user1; username = user1;
homeDirectory = "/home/${user1}"; homeDirectory = "/home/${user1}";
file = { file = {
"./justfile" = {
source = ./files/justfile;
};
"./.config/scripts/get_weather.sh" = { "./.config/scripts/get_weather.sh" = {
source = ./files/scripts/get_weather.sh; source = ./files/get_weather.sh;
executable = true; executable = true;
}; };
".config/wallpaper" = { ".config/wallpaper" = {
source = ./files/wallpaper; source = ./files/wallpaper;
recursive = true; recursive = true;
}; };
"./.config/vesktop/themes/macchiato-theme.css" = {
source = ./files/themes/vesktop/macchiato-theme.css;
};
};
sessionVariables = {
VISUAL = lib.getExe pkgs.zed-editor;
GTK_THEME = "catppuccin-macchiato-mauve-compact";
}; };
sessionVariables = { };
}; };
imports = [ imports = [
{ {
@ -67,25 +61,4 @@ in
]; ];
}; };
}; };
systemd.tmpfiles = {
rules =
[
"d ${paths.path0} 0755 ${user1} users -"
]
++ (map (path: "d /home/${user1}/${path} 0755 ${user1} users -") [
"Files"
"Files/Scripts"
"Files/Games"
"Files/Screenshots"
])
++ (map (path: "R /home/${user1}/${path} 0755 ${user1} users - -") [
"Desktop"
"Documents"
"Music"
"Pictures"
"Public"
"Templates"
"Videos"
]);
};
} }

14
profiles/user1/files/justfile Executable file
View file

@ -0,0 +1,14 @@
ewwEdit:
eww --config /home/nick/dotfiles/home-manager/modules/eww/config/ open centerPanel
ewwLaunch:
./home/nick/dotfiles/home-manager/modules/eww/config/scripts/master.sh
gobrrr:
home-manager switch --flake ~/dotfiles#desktop
gobrrrl:
nixos-rebuild switch --use-remote-sudo --flake /home/nick/dotfiles#desktop
fuckoff:
shutdown now

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

89
profiles/user2/default.nix Executable file
View file

@ -0,0 +1,89 @@
{
config,
flake,
pkgs,
...
}:
let
inherit (flake) self;
inherit (flake.config.people) user2;
inherit (flake.config.machines) devices;
inherit (flake.config.people.users.${user2}) name paths;
hostname = config.networking.hostName;
in
{
users = {
users.${user2} = {
description = name;
name = user2;
isNormalUser = true;
shell = pkgs.nushell;
extraGroups = [
"adbusers"
"disk"
"libvirtd"
"minecraft"
"netdev"
"networkmanager"
"ollama"
"syncthing"
"vboxusers"
"wheel"
];
};
};
home-manager.users = {
${user2} = {
home = {
username = user2;
homeDirectory = "/home/${user2}";
file = {
"./justfile" = {
source = ./files/justfile;
};
};
sessionVariables = {
WLR_NO_HARDWARE_CURSORS = "1";
WLR_DRM_NO_ATOMIC = "1";
VIDEO_PLAYER = "vlc";
EDITOR = "vscode";
NIXPKGS_ALLOW_INSECURE = "1";
};
};
imports = [
{
home.stateVersion = config.system.stateVersion;
}
{
imports = [
self.homeModules."${devices.${hostname}.name}-${user2}"
];
}
];
};
};
systemd.tmpfiles =
let
directoriesAddedToHome = [
"Projects"
];
directoriesRemovedFromHome = [
"Music"
"Public"
"Templates"
];
in
{
rules =
[
"d ${paths.path0}/Projects 0755 ${user2} users -"
"Z ${paths.path0}/.ssh 700 ${user2} users -"
]
++ (map (path: "d /home/${user2}/${path} 0755 ${user2} users -") directoriesAddedToHome)
++ (map (path: "R /home/${user2}/${path} 0755 ${user2} users - -") directoriesRemovedFromHome);
};
}

View file

@ -0,0 +1,266 @@
/**
* Decrease size of the sidebar header
*/
*, html, body, html body, :root, #sidebar, #sidebar-box, .sidebar-panel, #root.root, #PlacesToolbarItems .bookmark-item, #PlacesToolbarItems .tab-item, .sidebar-placesTreechildren::-moz-tree-cell-text, .sidebar-placesTreechildren, .form-control {
font: 7pt "Lucida Sans", Classica !important;
outline: 0px !important;
border: 0px !important;
}
html, body, :root, #sidebar, #sidebar-box, .sidebar-panel, #root.root, #PlacesToolbarItems.bookmark-item, #PlacesToolbarItems.tab-item, .titlebar, .toolbar, #PlacesToolbar, #personal-bookmarks, #bookmarks-toolbar-button, #navigator-toolbox, #nav-bar, #library {
background-color: #1a1920 !important;
outline: 0px !important;
border: 0px !important;
}
@-moz-document url-prefix("moz-extension://4bfeee63-c7b3-4bb9-a7df-a2c0fd73eec0") {
*, html, body, html body, #root, :root, .Tab .title, .main-items .nav-item .len {
font-size: 7pt !important;
font-family: "Lucida Sans", "Classica" !important;
--tabs-font: 7pt "Lucida Sans", "Classica" !important;
background-color: #1a1920 !important;
outline: 0px !important;
border: 0px !important;
}
}
/* extension icons opacity and fade */
#nav-bar toolbarbutton {
filter: grayscale(100%) !important;
opacity: 0.3 !important;
transition: transform 200ms ease 0.5s, opacity 200ms ease 0.5s !important;
}
#nav-bar toolbarbutton:hover {
filter: grayscale(0%) !important;
opacity: 1 !important;
transition-duration: 200ms !important;
transition-delay: 0s !important;
}
#sidebar-header toolbarbutton {
filter: grayscale(100%) !important;
opacity: 0 !important;
transition: transform 200ms ease 0.5s, opacity 200ms ease 0.5s !important;
min-width:150px !important;
align: center !important;
}
#sidebar-header toolbarbutton:hover {
filter: grayscale(0%) !important;
opacity: 1 !important;
transition-duration: 200ms !important;
transition-delay: 0s !important;
min-width:150px !important;
align: center !important;
}
.close-icon {width:0px !important;}
/* --- */
/* hide address bar bloat */
#tracking-protection-icon-container { display: none; }
#identity-box { display: none; }
#reader-mode-button { display: none; }
#pageActionButton { display: none; }
#pocket-button { display: none; }
#star-button { display: none; }
#urlbar-zoom-button { display: none; }
/* --- */
/* Go to arrow button at the end of the urlbar when searching */
#urlbar-go-button { display: none; }
/* Bottom left page loading status or url preview */
/* #statuspanel { display: none !important; } */
/* hide address bar*/
/* Source file https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/autohide_main_toolbar.css made available under Mozilla Public License v. 2.0
S ee the above repository for updates as well as full license text. */ *
/* This style hides the main toolbar and shows it when the cursor is over the tabs toolbar as well as whenever the focus is inside nav-bar, such as when urlbar is focused. */
:root{ --uc-navbar-transform: -40px }
:root[uidensity="compact"]{ --uc-navbar-transform: -4px }
#navigator-toolbox > div{ display: contents; }
:root[sessionrestored] :where(#nav-bar,#PersonalToolbar,#tab-notification-deck,.global-notificationbox){
transform: translateY(var(--uc-navbar-transform))
}
:root:is([customizing],[chromehidden*="toolbar"]) :where(#nav-bar,#PersonalToolbar,#tab-notification-deck,.global-notificationbox){
transform: none !important;
opacity: 1 !important;
}
#nav-bar, #nav-bar-customization-target {
height: 30px !important;
}
#nav-bar-content, #nav-bar-content {
height: 20px !important;
margin-top: 4px !important;
}
#urlbar {
width: 300px !important;
padding-left: 10px !important;
padding-right: -10px !important;
left: -50px !important;
}
#nav-bar:not([customizing]){
opacity: 0;
transition: transform 400ms ease 1.5s, opacity 400ms ease 1.5s !important;
position: relative;
z-index: 2;
}
#titlebar{ position: relative; z-index: 3 }
/* Show when toolbox is focused, like when urlbar has received focus */
#navigator-toolbox:focus-within > .browser-toolbar{
transform: translateY(0);
opacity: 1;
transition-duration: 500ms, 200ms !important;
transition-delay: 0s !important;
}
/* Show when toolbox is hovered */
#titlebar:hover ~ .browser-toolbar,
#nav-bar:hover,
#nav-bar:hover + #PersonalToolbar{
transform: translateY(0);
opacity: 1;
transition-duration: 500ms, 200ms !important;
transition-delay: 0s !important;
}
/* This ruleset is separate, because not having :has support breaks other selectors as well */
#mainPopupSet:has(> #appMenu-popup:hover) ~ #navigator-toolbox > .browser-toolbar{
transition-delay: 33ms !important;
transform: translateY(0);
opacity: 1;
background-color: #1a1920 !important;
}
/* Bookmarks toolbar needs so extra rules */
#PersonalToolbar{ transition: transform 400ms ease 1.5s !important; position: relative; z-index: 1; background-color: #1a1920 !important; }
/* Move up the content view */
:root[sessionrestored]:not([inFullscreen],[chromehidden~="toolbar"]) > body > #browser{ margin-top: var(--uc-navbar-transform); }
/* --- end hide --- */
#sidebar-header {color: #1a1920 !important;
font-size: 1.2em !important;
font-family: "Dumbledor 3", Times New Roman !important;
padding: 2px 6px 2px 3px !important;
}
#sidebar-header #sidebar-close {
padding: 3px !important;
}
#sidebar-header #sidebar-close .toolbarbutton-icon {
width: 0px !important;
height: 0px !important;
opacity: 0.6 !important;
}
#TabsToolbar {
font-size: 0.8em !important;
font-family: "Troglodyte" !important;
display: none;
}
/* Source file https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/autohide_sidebar.css made available under Mozilla Public License v. 2.0
*See the above repository for updates as well as full license text. */
/* Show sidebar only when the cursor is over it */
/* The border controlling sidebar width will be removed so you'll need to modify these values to change width */
#sidebar-box{
--uc-sidebar-width: 30px;
--uc-sidebar-hover-width: 180px;
--uc-autohide-sidebar-delay: 600ms; /* Wait 0.6s before hiding sidebar */
--uc-autohide-transition-duration: 115ms;
--uc-autohide-transition-type: linear;
position: relative;
min-width: var(--uc-sidebar-width) !important;
width: var(--uc-sidebar-width) !important;
max-width: var(--uc-sidebar-width) !important;
z-index:1;
}
#sidebar-box[positionend]{ direction: rtl }
#sidebar-box[positionend] > *{ direction: ltr }
#sidebar-box[positionend]:-moz-locale-dir(rtl){ direction: ltr }
#sidebar-box[positionend]:-moz-locale-dir(rtl) > *{ direction: rtl }
#main-window[sizemode="fullscreen"] #sidebar-box{ --uc-sidebar-width: 1px; }
#sidebar-splitter{ display: none }
#sidebar-header{
overflow: hidden;
color: var(--chrome-color, inherit) !important;
padding-inline: 0 !important;
}
#sidebar-header::before,
#sidebar-header::after{
content: "";
display: flex;
padding-left: 8px;
}
#sidebar-header,
#sidebar{
transition: min-width var(--uc-autohide-transition-duration) var(--uc-autohide-transition-type) var(--uc-autohide-sidebar-delay) !important;
min-width: var(--uc-sidebar-width) !important;
will-change: min-width;
}
#sidebar-box:hover > #sidebar-header,
#sidebar-box:hover > #sidebar{
min-width: var(--uc-sidebar-hover-width) !important;
transition-delay: 0ms !important;
}
.sidebar-panel{
background-color: transparent !important;
color: var(--newtab-text-primary-color) !important;
}
.sidebar-panel #search-box{
-moz-appearance: none !important;
background-color: rgba(249,249,250,0.1) !important;
color: inherit !important;
}
/* Add sidebar divider and give it background */
#sidebar,
#sidebar-header{
background-color: inherit !important;
border-inline: 1px solid rgb(80,80,80);
border-inline-width: 0px 1px;
}
#sidebar-box:not([positionend]) > :-moz-locale-dir(rtl),
#sidebar-box[positionend] > *{
border-inline-width: 1px 0px;
}
/* Move statuspanel to the other side when sidebar is hovered so it doesn't get covered by sidebar */
#sidebar-box:not([positionend]):hover ~ #appcontent #statuspanel{
inset-inline: auto 0px !important;
}
#sidebar-box:not([positionend]):hover ~ #appcontent #statuspanel-label{
margin-inline: 0px !important;
border-left-style: solid !important;
}

View file

@ -0,0 +1,126 @@
/* home page edits */
@-moz-document url("about:home"), url("about:newtab"){
html, body, #root, input {
background-color: #1a1920 !important;
}
* { /* this is where I enforce the font everywhere */
font-size: 8pt !important;
font-family: "Lucida Grande", "Classica" !important;
line-height: 9pt !important;
} /* so that my sidebar tabs aren't fucking HUGE */
.collapsible-section.ds-layout {
max-height: 400px !important;
background-color: #000 !important;
}
.search-wrapper {
filter: grayscale(80%) !important;
opacity: 0 !important;
vertical-align: middle !important;
}
.personalizeButtonWrapper {
opacity: 0.2 !important;
transition: transform 200ms ease 0.5s, opacity 200ms ease 0.5s !important;
}
.personalizeButtonWrapper:hover {
opacity: 0.7 !important;
transition-duration: 200ms !important;
transition-delay: 0s !important;
}
.search-inner-wrapper { /* begone THOT */
display:none !important;
width: 300px !important;
min-height: 30px !important;
--newtab-search-icon: 0 !important;
}
.body-wrapper {margin-top: -200px;}
.context-menu-button { /* the button that has the menu to edit your shortcuts */
margin-right: 10px !important; margin-top: 0px !important; opacity: 0 !important;
background-color: transparent !important;
}
.context-menu-button:hover {opacity: 0.7 !important;}
.top-site-outer, .top-site-inner {
margin-block-end: 0px !important;
background-color: transparent !important;
}
.top-site-outer:hover {
background-color: transparent !important;
}
.top-site-button {padding: 0px !important; background-color:transparent !important;}
.tile { /* here be buttons */
filter: grayscale(100%) !important;
background-color: transparent !important;
border: 0px !important;
opacity: 0.1 !important;
transition: 50ms ease 0.4s !important;
vertical-align: middle !important;
}
.tile:hover {
filter: grayscale(50%) !important;
opacity: 0.7 !important;
transition: 50ms ease 0.2s !important;
}
.icon-wrapper {
background-color: transparent !important;
border: 0px !important;
}
.top-site-button .top-site-icon{
background-color: transparent !important;
background-size: contain !important;
background-repeat: no-repeat !important;
background-position: center !important;
padding: 0px !important;
border-radius: 0px !important;
}
/* custom icons so I can have custom+transparency on Home and New Tab pages */
.top-site-button[href="http://deck.blue"] .top-site-icon{
background-image: url("https://i.imgur.com/Z8IrhAY.png") !important;
}
.top-site-button[href="http://new.reddit.com"] .top-site-icon{
background-image: url("https://i.imgur.com/3QIQIeD.png") !important;
}
.top-site-button[href="http://gaiaonline.com"] .top-site-icon{
background-image: url("https://i.imgur.com/Vp7urqM.png") !important;
}
.top-site-button[href="http://orcanetwork.org"] .top-site-icon{
background-image: url("https://i.imgur.com/hvKM68l.png") !important;
}
.top-site-button[href="http://whaleresearch.com"] .top-site-icon{
background-image: url("https://i.imgur.com/uuBDA57.png") !important;
}
.top-site-button[href="http://whale-of-a-porpoise.blogspot.ca"] .top-site-icon{
background-image: url("https://i.imgur.com/qm2BYfR.png") !important;
}
/* !!! icon alignment and size fix !!! */
.icon.icon-pin-small {
width: 0px !important;
}
.top-site-outer .title {
padding-top: 0px !important;
}
.top-site-outer {
margin-block-end: unset !important;
}
.top-site-outer .title span {
visibility: hidden !important;
}
.top-site-outer .title:not(.sponsored) .sponsored-label {
height: 0px !important;
}
.top-site-outer .context-menu-button:hover {
background-color: unset !important;
}
.top-site-outer .context-menu-button {
transition: none !important;
background-color: unset !important;
top: 0px !important;
}
.top-site-outer .default-icon {width:48px !important; height:48px !important;}
}
/* --- home page edits end --- */

6
profiles/user2/files/justfile Executable file
View file

@ -0,0 +1,6 @@
gobrr:
nixos-rebuild switch --use-remote-sudo --flake ~/Projects/dotfiles#desktop
fuckoff:
shutdown now

3
profiles/user2/files/loop.sh Executable file
View file

@ -0,0 +1,3 @@
#!/usr/bin/env bash
while true ; do date ; natpmpc -a 1 0 udp 60 -g 10.2.0.1 && natpmpc -a 1 0 tcp 60 -g 10.2.0.1 || { echo -e "ERROR with natpmpc command \a" ; break ; } ; sleep 45 ; done

8
profiles/user2/files/modnix.sh Executable file
View file

@ -0,0 +1,8 @@
#!/usr/bin/env bash
cp /etc/nixos/configuration.nix /etc/nixos/configuration.nix.backup
sed -i '/services\.printing\.enable = true;/a\ nix.settings.experimental-features = ["nix-command" "flakes"];\n services.openssh.enable = true;' /etc/nixos/configuration.nix
sed -i '/thunderbird/a\ git\n vscode\n tomb' /etc/nixos/configuration.nix
echo "/etc/nixos/configuration.nix updated successfully."

91
profiles/user3/default.nix Executable file
View file

@ -0,0 +1,91 @@
{
config,
flake,
pkgs,
lib,
...
}:
let
inherit (flake) self;
inherit (flake.config.people) user3;
inherit (flake.config.machines) devices;
inherit (flake.config.people.users.${user3}) name paths;
hostname = config.networking.hostName;
in
{
users = {
users.${user3} = {
description = name;
name = user3;
isNormalUser = true;
shell = pkgs.nushell;
extraGroups = [
"adbusers"
"disk"
"libvirtd"
"netdev"
"networkmanager"
"plugdev"
"samba"
"vboxusers"
"wheel"
];
};
};
home-manager.users = {
${user3} = {
home = {
username = user3;
homeDirectory = "/home/${user3}";
file = {
"./.config/scripts/get_weather.sh" = {
source = ./files/get_weather.sh;
executable = true;
};
".config/wallpaper" = {
source = ./files/wallpaper;
recursive = true;
};
"./.config/vesktop/themes/macchiato-theme.css" = {
source = ./files/themes/vesktop/macchiato-theme.css;
};
};
sessionVariables = {
VISUAL = lib.getExe pkgs.zed-editor;
GTK_THEME = "catppuccin-macchiato-mauve-compact";
};
};
imports = [
{
home.stateVersion = config.system.stateVersion;
}
{
imports = [
self.homeModules."${devices.${hostname}.name}-${user3}"
];
}
];
};
};
systemd.tmpfiles = {
rules =
[
"d ${paths.path0} 0755 ${user3} users -"
]
++ (map (path: "d /home/${user3}/${path} 0755 ${user3} users -") [
"Files"
"Files/Scripts"
"Files/Games"
"Files/Screenshots"
])
++ (map (path: "R /home/${user3}/${path} 0755 ${user3} users - -") [
"Desktop"
"Documents"
"Music"
"Pictures"
"Public"
"Templates"
"Videos"
]);
};
}

View file

@ -0,0 +1,19 @@
#!/usr/bin/env bash
for i in {1..5}
do
text=$(curl -s "https://wttr.in/$1?format=1")
if [[ $? == 0 ]]
then
text=$(echo "$text" | sed -E "s/\s+/ /g")
tooltip=$(curl -s "https://wttr.in/$1?format=4")
if [[ $? == 0 ]]
then
tooltip=$(echo "$tooltip" | sed -E "s/\s+/ /g")
echo "{\"text\":\"$text\", \"tooltip\":\"$tooltip\"}"
exit
fi
fi
sleep 2
done
echo "{\"text\":\"error\", \"tooltip\":\"error\"}"

View file

Before

Width:  |  Height:  |  Size: 772 KiB

After

Width:  |  Height:  |  Size: 772 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 578 KiB

After

Width:  |  Height:  |  Size: 578 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 886 KiB

After

Width:  |  Height:  |  Size: 886 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 201 KiB

After

Width:  |  Height:  |  Size: 201 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 808 KiB

After

Width:  |  Height:  |  Size: 808 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 578 KiB

After

Width:  |  Height:  |  Size: 578 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 1.7 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.3 MiB

After

Width:  |  Height:  |  Size: 3.3 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 5.1 MiB

After

Width:  |  Height:  |  Size: 5.1 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.5 MiB

After

Width:  |  Height:  |  Size: 3.5 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 632 KiB

After

Width:  |  Height:  |  Size: 632 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 460 KiB

After

Width:  |  Height:  |  Size: 460 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 8.2 MiB

After

Width:  |  Height:  |  Size: 8.2 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.3 MiB

After

Width:  |  Height:  |  Size: 3.3 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 833 KiB

After

Width:  |  Height:  |  Size: 833 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 467 KiB

After

Width:  |  Height:  |  Size: 467 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2 MiB

After

Width:  |  Height:  |  Size: 2 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.8 MiB

After

Width:  |  Height:  |  Size: 1.8 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.6 MiB

After

Width:  |  Height:  |  Size: 1.6 MiB

Before After
Before After

Some files were not shown because too many files have changed in this diff Show more