Compare commits

...

21 Commits

Author SHA1 Message Date
Nathan Braswell
4f578fe894 updated 2025-11-21 23:05:36 -05:00
Nathan Braswell
a4827fa128 last server 2025-11-19 22:58:33 -05:00
Nathan Braswell
cf705ec2ec Merge branch 'main' of https://forge.room409.xyz/miloignis/nix_config 2025-11-11 20:18:19 -05:00
Nathan Braswell
377e48aa0d update 32bit flag, change background 2025-11-11 20:18:06 -05:00
Nathan Braswell
6c30aaf6c8 disable pantimilion 2025-10-30 10:41:28 -04:00
Nathan Braswell
b828a306fd Fixup personal side post jj 2025-10-27 22:18:30 -04:00
0aec0f831e Merge branch 'main' of https://forge.room409.xyz/miloignis/nix_config 2025-10-27 22:15:58 -04:00
778681f603 Wayland Emacs, Pantimilon attempt 2025-10-27 22:15:56 -04:00
Nathan Braswell
a57a9a46a2 Merge branch 'main' of https://forge.room409.xyz/miloignis/nix_config 2025-10-27 22:14:21 -04:00
Nathan Braswell
ec3c43a20a JJ config 2025-10-27 22:14:11 -04:00
f7d94aa6a8 Updates, iamb, narrower borders 2025-10-22 20:37:37 -04:00
f6040886f1 Merge branch 'main' of https://forge.room409.xyz/miloignis/nix_config 2025-10-14 15:19:35 -04:00
278d4d187c fixup 2025-10-14 15:19:25 -04:00
2c77f45b7e lfs on 2025-10-02 17:46:19 -04:00
af871ac2dd allow git pushes of larger files 2025-09-27 23:47:21 -04:00
b054c78122 Transparency off for main window 2025-09-27 23:43:37 -04:00
abb8bebbd1 GitS setup, will eventually turn the transparency off 2025-09-27 16:12:21 -04:00
90f182b49f update laptop, fix integration of home.nix 2025-09-23 17:57:08 -04:00
33a93dfea6 Ok, resigned that we need home-manager and system-manager seperate. Working niri 2025-08-28 15:26:40 -04:00
b179698e71 Merge branch 'move-home-manager' 2025-08-27 13:04:59 -04:00
5d39b69d44 Move home-manager configuration to seperate file 2025-08-27 13:04:38 -04:00
12 changed files with 1147 additions and 612 deletions

BIN
GitS_alley_to_water.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 MiB

BIN
GitS_other_alley_zoom.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB

127
flake.lock generated
View File

@@ -5,11 +5,11 @@
"fromYaml": "fromYaml" "fromYaml": "fromYaml"
}, },
"locked": { "locked": {
"lastModified": 1746562888, "lastModified": 1755819240,
"narHash": "sha256-YgNJQyB5dQiwavdDFBMNKk1wyS77AtdgDk/VtU6wEaI=", "narHash": "sha256-qcMhnL7aGAuFuutH4rq9fvAhCpJWVHLcHVZLtPctPlo=",
"owner": "SenchoPens", "owner": "SenchoPens",
"repo": "base16.nix", "repo": "base16.nix",
"rev": "806a1777a5db2a1ef9d5d6f493ef2381047f2b89", "rev": "75ed5e5e3fce37df22e49125181fa37899c3ccd6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -21,16 +21,17 @@
"base16-fish": { "base16-fish": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1622559957, "lastModified": 1754405784,
"narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=", "narHash": "sha256-l9xHIy+85FN+bEo6yquq2IjD1rSg9fjfjpyGP1W8YXo=",
"owner": "tomyun", "owner": "tomyun",
"repo": "base16-fish", "repo": "base16-fish",
"rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe", "rev": "23ae20a0093dca0d7b39d76ba2401af0ccf9c561",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "tomyun", "owner": "tomyun",
"repo": "base16-fish", "repo": "base16-fish",
"rev": "23ae20a0093dca0d7b39d76ba2401af0ccf9c561",
"type": "github" "type": "github"
} }
}, },
@@ -70,11 +71,11 @@
"firefox-gnome-theme": { "firefox-gnome-theme": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1748383148, "lastModified": 1758112371,
"narHash": "sha256-pGvD/RGuuPf/4oogsfeRaeMm6ipUIznI2QSILKjKzeA=", "narHash": "sha256-lizRM2pj6PHrR25yimjyFn04OS4wcdbc38DCdBVa2rk=",
"owner": "rafaelmardojai", "owner": "rafaelmardojai",
"repo": "firefox-gnome-theme", "repo": "firefox-gnome-theme",
"rev": "4eb2714fbed2b80e234312611a947d6cb7d70caf", "rev": "0909cfe4a2af8d358ad13b20246a350e14c2473d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -91,11 +92,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1751413152, "lastModified": 1756770412,
"narHash": "sha256-Tyw1RjYEsp5scoigs1384gIg6e0GoBVjms4aXFfRssQ=", "narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "77826244401ea9de6e3bac47c2db46005e1f30b5", "rev": "4524271976b625a4a605beefd893f270620fd751",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -123,18 +124,20 @@
"gnome-shell": { "gnome-shell": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1748186689, "host": "gitlab.gnome.org",
"narHash": "sha256-UaD7Y9f8iuLBMGHXeJlRu6U1Ggw5B9JnkFs3enZlap0=", "lastModified": 1762869044,
"narHash": "sha256-nwm/GJ2Syigf7VccLAZ66mFC8mZJFqpJmIxSGKl7+Ds=",
"owner": "GNOME", "owner": "GNOME",
"repo": "gnome-shell", "repo": "gnome-shell",
"rev": "8c88f917db0f1f0d80fa55206c863d3746fa18d0", "rev": "680e3d195a92203f28d4bf8c6e8bb537cc3ed4ad",
"type": "github" "type": "gitlab"
}, },
"original": { "original": {
"host": "gitlab.gnome.org",
"owner": "GNOME", "owner": "GNOME",
"ref": "48.2", "ref": "gnome-49",
"repo": "gnome-shell", "repo": "gnome-shell",
"type": "github" "type": "gitlab"
} }
}, },
"home-manager": { "home-manager": {
@@ -144,11 +147,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1755625756, "lastModified": 1763416652,
"narHash": "sha256-t57ayMEdV9g1aCfHzoQjHj1Fh3LDeyblceADm2hsLHM=", "narHash": "sha256-8EBEEvtzQ11LCxpQHMNEBQAGtQiCu/pqP9zSovDSbNM=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "dd026d86420781e84d0732f2fa28e1c051117b59", "rev": "ea164b7c9ccdc2321379c2ff78fd4317b4c41312",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -169,11 +172,11 @@
"xwayland-satellite-unstable": "xwayland-satellite-unstable" "xwayland-satellite-unstable": "xwayland-satellite-unstable"
}, },
"locked": { "locked": {
"lastModified": 1755424351, "lastModified": 1763581369,
"narHash": "sha256-xcorYLNdtLpb0wH5CPlUcpmYQUxeK95j1X855xQw+DY=", "narHash": "sha256-HTLoe4UvnG5fWruO+zjnZJNCnKcbVM8eeSPpIlKHOyI=",
"owner": "sodiboo", "owner": "sodiboo",
"repo": "niri-flake", "repo": "niri-flake",
"rev": "9aa137af01f05386e5bb5050e983750017007a66", "rev": "ca75677ad47613f6afbbc2c6142601fef0ac7631",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -185,16 +188,16 @@
"niri-stable": { "niri-stable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1748151941, "lastModified": 1756556321,
"narHash": "sha256-z4viQZLgC2bIJ3VrzQnR+q2F3gAOEQpU1H5xHtX/2fs=", "narHash": "sha256-RLD89dfjN0RVO86C/Mot0T7aduCygPGaYbog566F0Qo=",
"owner": "YaLTeR", "owner": "YaLTeR",
"repo": "niri", "repo": "niri",
"rev": "8ba57fcf25d2fc9565131684a839d58703f1dae7", "rev": "01be0e65f4eb91a9cd624ac0b76aaeab765c7294",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "YaLTeR", "owner": "YaLTeR",
"ref": "v25.05.1", "ref": "v25.08",
"repo": "niri", "repo": "niri",
"type": "github" "type": "github"
} }
@@ -202,11 +205,11 @@
"niri-unstable": { "niri-unstable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1755419373, "lastModified": 1763574558,
"narHash": "sha256-EFH3zbpyLYjEboNV2Lmkxf9joEuFCmeYX+MMLRPStpg=", "narHash": "sha256-PdXkgqtbVFdZNhmTrZLTDMGb4zzaSK2RnKUXM8bIDo4=",
"owner": "YaLTeR", "owner": "YaLTeR",
"repo": "niri", "repo": "niri",
"rev": "a6febb86aa5af0df7bf2792ca027ef95a503d599", "rev": "6fcdb9242e65ed5825e7fda2a7935b412588b63a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -217,11 +220,11 @@
}, },
"nixos-hardware": { "nixos-hardware": {
"locked": { "locked": {
"lastModified": 1755330281, "lastModified": 1762847253,
"narHash": "sha256-aJHFJWP9AuI8jUGzI77LYcSlkA9wJnOIg4ZqftwNGXA=", "narHash": "sha256-BWWnUUT01lPwCWUvS0p6Px5UOBFeXJ8jR+ZdLX8IbrU=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "3dac8a872557e0ca8c083cdcfc2f218d18e113b0", "rev": "899dc449bc6428b9ee6b3b8f771ca2b0ef945ab9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -233,11 +236,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1755186698, "lastModified": 1763421233,
"narHash": "sha256-wNO3+Ks2jZJ4nTHMuks+cxAiVBGNuEBXsT29Bz6HASo=", "narHash": "sha256-Stk9ZYRkGrnnpyJ4eqt9eQtdFWRRIvMxpNRf4sIegnw=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "fbcf476f790d8a217c3eab4e12033dc4a0f6d23c", "rev": "89c2b2330e733d6cdb5eae7b899326930c2c0648",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -248,11 +251,11 @@
}, },
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": { "locked": {
"lastModified": 1755274400, "lastModified": 1763334038,
"narHash": "sha256-rTInmnp/xYrfcMZyFMH3kc8oko5zYfxsowaLv1LVobY=", "narHash": "sha256-LBVOyaH6NFzQ3X/c6vfMZ9k4SV2ofhpxeL9YnhHNJQQ=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "ad7196ae55c295f53a7d1ec39e4a06d922f3b899", "rev": "4c8cdd5b1a630e8f72c9dd9bf582b1afb3127d2c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -274,11 +277,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1751906969, "lastModified": 1758998580,
"narHash": "sha256-BSQAOdPnzdpOuCdAGSJmefSDlqmStFNScEnrWzSqKPw=", "narHash": "sha256-VLx0z396gDCGSiowLMFz5XRO/XuNV+4EnDYjdJhHvUk=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NUR", "repo": "NUR",
"rev": "ddb679f4131e819efe3bbc6457ba19d7ad116f25", "rev": "ba8d9c98f5f4630bcb0e815ab456afd90c930728",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -317,11 +320,11 @@
"tinted-zed": "tinted-zed" "tinted-zed": "tinted-zed"
}, },
"locked": { "locked": {
"lastModified": 1755636375, "lastModified": 1763590746,
"narHash": "sha256-HQQ7LdyHWCUcRBeGLTwJm+tJ8hmuglSzP/ZLeNBjFkk=", "narHash": "sha256-bsEu7Ohdo2OEudXdQzk+jc9fiO0rNMGaH+Wee7FXxNc=",
"owner": "danth", "owner": "danth",
"repo": "stylix", "repo": "stylix",
"rev": "2567b924669c566d132ce4cafd4bc0a119846b52", "rev": "3013f98e28e52b3bd3859b0c454554aae54d5060",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -381,11 +384,11 @@
"tinted-schemes": { "tinted-schemes": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1750770351, "lastModified": 1757716333,
"narHash": "sha256-LI+BnRoFNRa2ffbe3dcuIRYAUcGklBx0+EcFxlHj0SY=", "narHash": "sha256-d4km8W7w2zCUEmPAPUoLk1NlYrGODuVa3P7St+UrqkM=",
"owner": "tinted-theming", "owner": "tinted-theming",
"repo": "schemes", "repo": "schemes",
"rev": "5a775c6ffd6e6125947b393872cde95867d85a2a", "rev": "317a5e10c35825a6c905d912e480dfe8e71c7559",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -397,11 +400,11 @@
"tinted-tmux": { "tinted-tmux": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1751159871, "lastModified": 1757811970,
"narHash": "sha256-UOHBN1fgHIEzvPmdNMHaDvdRMgLmEJh2hNmDrp3d3LE=", "narHash": "sha256-n5ZJgmzGZXOD9pZdAl1OnBu3PIqD+X3vEBUGbTi4JiI=",
"owner": "tinted-theming", "owner": "tinted-theming",
"repo": "tinted-tmux", "repo": "tinted-tmux",
"rev": "bded5e24407cec9d01bd47a317d15b9223a1546c", "rev": "d217ba31c846006e9e0ae70775b0ee0f00aa6b1e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -413,11 +416,11 @@
"tinted-zed": { "tinted-zed": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1751158968, "lastModified": 1757811247,
"narHash": "sha256-ksOyv7D3SRRtebpXxgpG4TK8gZSKFc4TIZpR+C98jX8=", "narHash": "sha256-4EFOUyLj85NRL3OacHoLGEo0wjiRJzfsXtR4CZWAn6w=",
"owner": "tinted-theming", "owner": "tinted-theming",
"repo": "base16-zed", "repo": "base16-zed",
"rev": "86a470d94204f7652b906ab0d378e4231a5b3384", "rev": "824fe0aacf82b3c26690d14e8d2cedd56e18404e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -429,16 +432,16 @@
"xwayland-satellite-stable": { "xwayland-satellite-stable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1748488455, "lastModified": 1755491097,
"narHash": "sha256-IiLr1alzKFIy5tGGpDlabQbe6LV1c9ABvkH6T5WmyRI=", "narHash": "sha256-m+9tUfsmBeF2Gn4HWa6vSITZ4Gz1eA1F5Kh62B0N4oE=",
"owner": "Supreeeme", "owner": "Supreeeme",
"repo": "xwayland-satellite", "repo": "xwayland-satellite",
"rev": "3ba30b149f9eb2bbf42cf4758d2158ca8cceef73", "rev": "388d291e82ffbc73be18169d39470f340707edaa",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "Supreeeme", "owner": "Supreeeme",
"ref": "v0.6", "ref": "v0.7",
"repo": "xwayland-satellite", "repo": "xwayland-satellite",
"type": "github" "type": "github"
} }
@@ -446,11 +449,11 @@
"xwayland-satellite-unstable": { "xwayland-satellite-unstable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1755219541, "lastModified": 1762747449,
"narHash": "sha256-yKV6xHaPbEbh5RPxAJnb9yTs1wypr7do86hFFGQm1w8=", "narHash": "sha256-Z1TKiux8K09a93w4PFDFsj8HFugXNy3iCC3Z8MpR5Rk=",
"owner": "Supreeeme", "owner": "Supreeeme",
"repo": "xwayland-satellite", "repo": "xwayland-satellite",
"rev": "5a184d435927c3423f0ad189ea2b490578450fb7", "rev": "6338574bc5c036487486acde264f38f39ea15fad",
"type": "github" "type": "github"
}, },
"original": { "original": {

692
flake.nix
View File

@@ -43,551 +43,17 @@
platforms = platforms.all; platforms = platforms.all;
}; };
})); }));
#background = ./GitS_other_alley_zoom.png;
background = ./GitS_alley_to_water_zoom.png;
homeManagerSharedModule = { homeManagerSharedModule = {
home-manager.useGlobalPkgs = true; home-manager.useGlobalPkgs = true;
home-manager.users.nathan = { config, pkgs, lib, ... }:{ home-manager.users.nathan = ((import ./home-manager/home.nix) { username = "nathan"; homeDirectory = "/home/nathan"; backgroundImg = background; email = "miloignis@gmail.com"; });
# This value determines the Home Manager release that your
# configuration is compatible with. This helps avoid breakage
# when a new Home Manager release introduces backwards
# incompatible changes.
#
# You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version
# changes in each release.
home.stateVersion = "22.11";
fonts.fontconfig.enable = true;
home.packages = with pkgs; [
fira-code jetbrains-mono iosevka monoid recursive inter (make_besley pkgs lib)
xwayland-satellite swww
];
systemd.user.services.mpris-proxy = {
Unit.Description = "Mpris proxy";
Unit.After = [ "network.target" "sound.target" ];
Service.ExecStart = "${pkgs.bluez}/bin/mpris-proxy";
Install.WantedBy = [ "default.target" ];
};
programs.fuzzel.enable = true;
programs.waybar = {
enable = true;
settings = {
mainBar = {
layer = "top";
position = "top";
height = 18;
modules-left = [ "memory" "disk" "network" ];
modules-center = [ "clock" ];
modules-right = [ "battery" "power-profiles-daemon" "backlight" "pulseaudio" ];
reload_style_on_change = true;
};
};
style = ''
/*
* {
border: none;
border-radius: 0;
font-family: Recursive;
}
*/
window#waybar {
background: transparent;
color: #ffffff;
}
button {
box-shadow: none;
border: none;
border-radius: 0;
transition-property: none;
}
#workspaces button {
padding: 0 5px;
background-color: transparent;
color: #ffffff;
}
#mode {
background-color: #64829D;
border-bottom: 3px solid #ffffff;
}
#memory, #disk, #network, #pulseaudio, #battery, #power-profiles-daemon, #backlight, #clock {
padding: 0 10px;
color: #f0f0ff;
background-color: rgba(30,30,46,0.6);
border-radius: 99px;
margin-left: 4px;
}
#window, #workspaces {
margin: 0 4px;
}
#clock {
font-weight: bold;
}
#battery {
margin-left: 4px;
}
/*
#pulseaudio {
color: #000000;
background-color: #f1c40f;
}
*/
'';
};
programs.niri.settings = {
prefer-no-csd = true;
input.keyboard.xkb = {
options = "ctrl:nocaps";
};
environment = {
DISPLAY = ":0"; # xwayland-satellite
};
spawn-at-startup = [
{ command = [ "swww-daemon" ]; }
{ command = [ "swww" "img" "${config.stylix.image}" ]; }
{ command = [ "waybar" ]; }
{ command = [ "xwayland-satellite" ]; }
];
window-rules = [
{
draw-border-with-background = false;
geometry-corner-radius = let r = 4.0; in {
top-left = r;
top-right = r;
bottom-left = r;
bottom-right = r;
};
clip-to-geometry = true;
#opacity = 0.95;
}
{
matches = [{is-focused = false;}];
#opacity = 0.85;
opacity = 0.95;
}
];
layout = {
#gaps = 8;
gaps = 16;
center-focused-column = "never";
preset-column-widths = [
{ proportion = 1.0 / 3.0; }
{ proportion = 1.0 / 2.0; }
{ proportion = 2.0 / 3.0; }
];
#If you leave the brackets empty, the windows themselves will decide their initial width.
#preset-window-heights = {};
default-column-width = { proportion = 1.0 / 2.0; };
#focus-ring = {
# enable = false;
# width = 8;
# # Color of the ring on the active monitor.
# active.color = "#7fc8ff";
# # Color of the ring on inactive monitors.
# inactive.color = "#505050";
#};
#border = {
# enable = true;
# width = 4;
# active = {
# gradient = {
# angle = 130;
# relative-to = "workspace-view";
# from = "#90F090";
# to = "#909090";
# };
# };
# inactive = {
# gradient = {
# angle = 130;
# relative-to = "workspace-view";
# from = "#409040";
# to = "#404040";
# };
# };
#};
#struts = {
#left = 64;
#right = 64;
#top = 64;
#bottom = 64;
#};
};
binds = with config.lib.niri.actions; {
#"Alt+P".action = spawn "bemenu-run";
"Alt+P".action = spawn "fuzzel";
"Alt+Return".action = spawn "ghostty";
"Alt+Shift+Return".action = spawn "foot";
"Alt+Shift+Slash".action = show-hotkey-overlay;
"Alt+Shift+C".action = close-window;
"Alt+Left" .action = focus-column-left;
"Alt+Down" .action = focus-window-down;
"Alt+Up" .action = focus-window-up;
"Alt+Right" .action = focus-column-right;
"Alt+H" .action = focus-column-left;
#"Alt+J" .action = focus-window-down;
#"Alt+K" .action = focus-window-up;
"Alt+L" .action = focus-column-right;
"Alt+Shift+Left" .action = move-column-left;
"Alt+Shift+Down" .action = move-window-down;
"Alt+Shift+Up" .action = move-window-up;
"Alt+Shift+Right" .action = move-column-right;
"Alt+Shift+H" .action = move-column-left;
#"Alt+Shift+J" .action = move-window-down;
#"Alt+Shift+K" .action = move-window-up;
"Alt+Shift+L" .action = move-column-right;
# Nice alts
"Alt+J" .action = focus-window-or-workspace-down;
"Alt+K" .action = focus-window-or-workspace-up;
"Alt+Shift+J".action = move-window-down-or-to-workspace-down;
"Alt+Shift+K".action = move-window-up-or-to-workspace-up;
"Alt+Ctrl+Left" .action = focus-monitor-left;
"Alt+Ctrl+Down" .action = focus-monitor-down;
"Alt+Ctrl+Up" .action = focus-monitor-up;
"Alt+Ctrl+Right".action = focus-monitor-right;
"Alt+Ctrl+H" .action = focus-monitor-left;
"Alt+Ctrl+J" .action = focus-monitor-down;
"Alt+Ctrl+K" .action = focus-monitor-up;
"Alt+Ctrl+L" .action = focus-monitor-right;
"Alt+Shift+Ctrl+Left" .action = move-column-to-monitor-left;
"Alt+Shift+Ctrl+Down" .action = move-column-to-monitor-down;
"Alt+Shift+Ctrl+Up" .action = move-column-to-monitor-up;
"Alt+Shift+Ctrl+Right" .action = move-column-to-monitor-right;
"Alt+Shift+Ctrl+H" .action = move-column-to-monitor-left;
"Alt+Shift+Ctrl+J" .action = move-column-to-monitor-down;
"Alt+Shift+Ctrl+K" .action = move-column-to-monitor-up;
"Alt+Shift+Ctrl+L" .action = move-column-to-monitor-right;
#...
"Alt+1".action = focus-workspace 1;
"Alt+2".action = focus-workspace 2;
"Alt+3".action = focus-workspace 3;
"Alt+4".action = focus-workspace 4;
"Alt+5".action = focus-workspace 5;
"Alt+6".action = focus-workspace 6;
"Alt+7".action = focus-workspace 7;
"Alt+8".action = focus-workspace 8;
"Alt+9".action = focus-workspace 9;
#"Alt+Shift+1".action = move-column-to-workspace 1;
#"Alt+Shift+2".action = move-column-to-workspace 2;
#"Alt+Shift+3".action = move-column-to-workspace 3;
#"Alt+Shift+4".action = move-column-to-workspace 4;
#"Alt+Shift+5".action = move-column-to-workspace 5;
#"Alt+Shift+6".action = move-column-to-workspace 6;
#"Alt+Shift+7".action = move-column-to-workspace 7;
#"Alt+Shift+8".action = move-column-to-workspace 8;
#"Alt+Shift+9".action = move-column-to-workspace 9;
#Consume one window from the right into the focused column.
"Alt+Comma" .action = consume-window-into-column;
#Expel one window from the focused column to the right.
"Alt+Period" .action = expel-window-from-column;
#There are also commands that consume or expel a single window to the side.
"Alt+BracketLeft" .action = consume-or-expel-window-left;
"Alt+BracketRight" .action = consume-or-expel-window-right;
"Alt+R".action = switch-preset-column-width;
"Alt+Shift+R".action = switch-preset-window-height;
"Alt+Ctrl+R".action = reset-window-height;
"Alt+F".action = maximize-column;
"Alt+Shift+F".action = fullscreen-window;
"Alt+C".action = center-column;
"Alt+Minus".action = set-column-width "-10%";
"Alt+Equal".action = set-column-width "+10%";
"Alt+Shift+Minus".action = set-window-height "-10%";
"Alt+Shift+Equal".action = set-window-height "+10%";
#"Print".action = screenshot;
#"Ctrl+Print".aciton = screenshot-screen;
#"Alt+Print".action = screenshot-window;
"Alt+Shift+E".action = quit;
"Ctrl+Alt+Delete".action = quit;
"Alt+Shift+P".action = power-off-monitors;
};
};
programs.ghostty = {
enable = true;
settings = {
window-decoration = false;
minimum-contrast = 1.5;
#font-family = "Recursive Mono Linear Static";
#font-size = 11;
#theme = "GruvboxDarkHard";
#theme = "Horizon";
#theme = "IC_Green_PPL";
#theme = "IC_Orange_PPL";
#theme = "iceberg-dark";
#theme = "Kanagawa Dragon";
#theme = "Kanagawa Wave";
#theme = "kanagawabones";
#theme = "kurokula";
#theme = "Later This Evening";
#theme = "MaterialDarker";
#theme = "MaterialOcean";
#theme = "matrix";
#theme = "Medallion";
#theme = "Mellifluous";
#theme = "Molokai";
#theme = "MonaLisa";
#theme = "Monokai Remastered";
#theme = "Monokai Soda";
#theme = "NightLion v2";
#theme = "niji";
#theme = "Nocturnal Winter";
#theme = "nord";
#theme = "NvimDark";
#theme = "Oceanic-Next";
#theme = "OneHalfDark";
#theme = "Paraiso Dark";
#theme = "PaulMillr";
#theme = "PencilDark";
#theme = "Peppermint";
#theme = "Pnevma";
#theme = "Popping and Locking";
#theme = "Red Planet";
#theme = "rose-pine";
#theme = "Ryuuko";
#theme = "SeaShells";
#theme = "Seti";
#theme = "Shaman";
#theme = "Slate";
#theme = "Smyck";
#theme = "Snazzy";
#theme = "SoftServer";
#theme = "Solarized Dark - Patched";
#theme = "Solarized Dark Higher Contrast";
#theme = "SpaceGray Bright";
#theme = "SpaceGray Eighties";
#theme = "SpaceGray Eighties Dull";
#theme = "terafox";
#theme = "Thayer Bright";
#theme = "Tinacious Design (Dark)";
#theme = "tokyonight";
#theme = "tokyonight-storm";
#theme = "Tomorrow Night Burns";
#theme = "UltraViolent";
#theme = "Violet Dark";
#theme = "Whimsy";
#theme = "WildCherry";
#theme = "wilmersdorf";
#theme = "Wombat";
#theme = "xcodewwdc";
#theme = "zenbones_dark";
#theme = "zenwritten_dark";
};
};
programs.foot = {
enable = true;
settings = {
main = {
#font = "Fira Code:size=8";
#font = "JetBrainsMono:size=8";
#font = "Iosevka:size=18";
#font = "Monoid:size=6";
#font = "Recursive:size=16"; # seems to be Recursive Mono Linear Static in Ghostty
#dpi-aware = "yes";
};
mouse = {
hide-when-typing = "yes";
};
};
};
programs.starship = {
enable = true;
enableBashIntegration = true;
settings = {
add_newline = false;
format = lib.concatStrings [
"$username"
"$hostname"
"$directory"
"$jobs"
"$cmd_duration"
"$character"
];
directory = {
truncation_length = 10;
truncate_to_repo = false;
};
scan_timeout = 10;
character = {
success_symbol = "";
error_symbol = "";
};
};
};
programs.bash = {
enable = true;
sessionVariables = {
};
profileExtra = ''
if [ -e /home/nathan/.nix-profile/etc/profile.d/nix.sh ]; then . /home/nathan/.nix-profile/etc/profile.d/nix.sh; fi # added by Nix installer
'';
shellAliases = {
ng ="nmcli c up NETGEAR97";
ng24="nmcli c up NETGEAR97_24_2Ghz";
ng58="nmcli c up NETGEAR97_28_5Ghz";
ng5c="nmcli c up NETGEAR97_2C_5Ghz";
};
};
programs.git = {
enable = true;
userName = "Nathan Braswell";
userEmail = "nathan@braswell.email";
};
programs.vim = {
enable = true;
plugins = with pkgs.vimPlugins; [
nerdcommenter vim-polyglot #parinfer-rust
];
settings = {
# Is the need for these obliviated by vim-polyglot using sleuth?
#expandtab = false;
tabstop = 4;
shiftwidth = 4;
};
extraConfig = ''
set number
set hlsearch
nnoremap <leader>m :bn<CR>
nnoremap <leader>t :tabnew<CR>
nnoremap <leader>. :tabn<CR>
nnoremap <leader>, :tabp<CR>
nnoremap <leader>v :vsplit<CR>
nnoremap <leader>h :split<CR>
nnoremap <leader>q :q<CR>
inoremap jk <Esc>
inoremap kj <Esc>
" Thanks to https://unix.stackexchange.com/questions/140898/vim-hide-status-line-in-the-bottom
let s:hidden_all = 0
function! ToggleHiddenAll()
if s:hidden_all == 0
let s:hidden_all = 1
set noshowmode
set noruler
set laststatus=0
set noshowcmd
else
let s:hidden_all = 0
set showmode
set ruler
set laststatus=2
set showcmd
endif
endfunction
nnoremap <S-h> :call ToggleHiddenAll()<CR>
'';
};
programs.tmux = {
enable = true;
extraConfig = ''
#$Id: vim-keys.conf,v 1.2 2010-09-18 09:36:15 nicm Exp $
#
# vim-keys.conf, v1.2 2010/09/12
#
# By Daniel Thau. Public domain.
#
# This configuration file binds many vi- and vim-like bindings to the
# appropriate tmux key bindings. Note that for many key bindings there is no
# tmux analogue. This is intended for tmux 1.3, which handles pane selection
# differently from the previous versions
# split windows like vim
# vim's definition of a horizontal/vertical split is reversed from tmux's
bind s split-window -v
bind v split-window -h
# move around panes with hjkl, as one would in vim after pressing ctrl-w
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# resize panes like vim
# feel free to change the "1" to however many lines you want to resize by, only
# one at a time can be slow
bind < resize-pane -L 1
bind > resize-pane -R 1
bind - resize-pane -D 1
bind + resize-pane -U 1
# bind : to command-prompt like vim
# this is the default in tmux already
bind : command-prompt
# vi-style controls for copy mode
setw -g mode-keys vi
'';
};
programs.emacs = {
enable = true;
extraConfig = ''
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
;; Use spaces, not tabs, for indentation.
(setq-default indent-tabs-mode nil)
;; Highlight matching pairs of parentheses.
(setq show-paren-delay 0)
(show-paren-mode)
;(require 'smartparens-config)
(setq evil-want-C-u-scroll t)
(evil-mode 1)
(evil-set-undo-system 'undo-redo)
(setq key-chord-two-keys-delay 0.5)
(key-chord-define evil-insert-state-map "jk" 'evil-normal-state)
(key-chord-mode 1)
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(custom-safe-themes
'("3ff4a0ad1a2da59a72536e6030291cf663314c14c8a5a9eb475f3c28436d071d" default)))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
(load-theme 'dracula t)
'';
extraPackages = epkgs: with epkgs; [
evil key-chord magit proof-general
#paredit
#smartparens
#parinfer-rust-mode
rainbow-delimiters dracula-theme
];
};
};
}; };
commonConfigFunc = ({ config, lib, pkgs, modulesPath, ... }: (specificPkgs: { commonConfigFunc = ({ config, lib, pkgs, modulesPath, ... }: (specificPkgs: {
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;
nixpkgs.config.permittedInsecurePackages = [
"olm-3.2.16"
];
nix.settings.experimental-features = [ "nix-command" "flakes" ]; nix.settings.experimental-features = [ "nix-command" "flakes" ];
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
time.timeZone = "America/New_York"; time.timeZone = "America/New_York";
@@ -631,7 +97,9 @@
#image = ./stones-water.jpg; #image = ./stones-water.jpg;
#image = ./moss.jpeg; #image = ./moss.jpeg;
#image = ./ruinedmansion.jpg; #image = ./ruinedmansion.jpg;
image = ./130_1zhJtUA.jpeg; #the city street #image = ./130_1zhJtUA.jpeg; #the city street
#image = ./GitS_alley_to_water_zoom.png;
image = background;
#image = pkgs.fetchurl { #image = pkgs.fetchurl {
# url = "https://raw.githubusercontent.com/kiedtl/walls/refs/heads/master/green-tea.jpg"; # url = "https://raw.githubusercontent.com/kiedtl/walls/refs/heads/master/green-tea.jpg";
# sha256 = "sha256-+NcZMBnbEWurmkOkzdrxGwBlxzUO3Sitt6Uoq9plc7o="; # sha256 = "sha256-+NcZMBnbEWurmkOkzdrxGwBlxzUO3Sitt6Uoq9plc7o=";
@@ -639,13 +107,12 @@
polarity = "dark"; polarity = "dark";
#polarity = "light"; #polarity = "light";
fonts = { fonts = {
# hehe casual as serif
serif = { package = (make_besley pkgs lib); name = "Besley"; }; serif = { package = (make_besley pkgs lib); name = "Besley"; };
#serif = { package = pkgs.recursive; name = "Recursive Sans Linear Static"; };
#sansSerif = { package = pkgs.recursive; name = "Recursive Sans Linear Static"; }; #sansSerif = { package = pkgs.recursive; name = "Recursive Sans Linear Static"; };
sansSerif = { package = pkgs.inter; name = "Inter"; }; sansSerif = { package = pkgs.inter; name = "Inter"; };
monospace = { package = pkgs.recursive; name = "Recursive Mono Linear Static"; }; monospace = { package = pkgs.recursive; name = "Recursive Mono Linear Static"; };
emoji = { package = pkgs.noto-fonts-emoji; name = "Noto Color Emoji"; }; #monospace = { package = pkgs.maple-mono.truetype; name = "Maple Mono"; };
emoji = { package = pkgs.noto-fonts-color-emoji; name = "Noto Color Emoji"; };
}; };
}; };
programs.niri = { programs.niri = {
@@ -658,7 +125,7 @@
extraPackages = with pkgs; [ extraPackages = with pkgs; [
swaylock # lockscreen swaylock # lockscreen
swayidle swayidle
xwayland # for legacy apps #xwayland # for legacy apps
#waybar # status bar #waybar # status bar
mako # notification daemon mako # notification daemon
kanshi # autorandr kanshi # autorandr
@@ -673,16 +140,15 @@
}; };
}; };
# For steam, and Vulkan in general # For steam, and Vulkan in general
#hardware.opengl.driSupport = true; hardware.graphics.enable32Bit = true;
hardware.opengl.driSupport32Bit = true;
hardware.steam-hardware.enable = true; hardware.steam-hardware.enable = true;
programs.steam.enable = true; programs.steam.enable = true;
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
tmux vim wget curl git w3m iftop iotop killall file unzip zip p7zip ripgrep imv killall tmux vim wget curl git w3m iftop iotop killall file unzip zip p7zip ripgrep imv killall
btop htop python3 btop htop python3
waypipe firefox-wayland chromium chawan nautilus waypipe firefox chromium chawan cmatrix nautilus
vlc mpv wayfarer libreoffice calibre foliate #transmission-gtk mupdf vlc mpv wayfarer libreoffice calibre foliate epr #transmission-gtk mupdf
gimp gimp
pavucontrol pywal pavucontrol pywal
sway wayland glib dracula-theme adwaita-icon-theme swaylock swayidle wl-clipboard sway wayland glib dracula-theme adwaita-icon-theme swaylock swayidle wl-clipboard
@@ -756,7 +222,7 @@
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" ]; boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ "amdgpu" ]; boot.initrd.kernelModules = [ "amdgpu" ];
hardware.opengl.extraPackages = with pkgs; [ amdvlk ]; #hardware.opengl.extraPackages = with pkgs; [ amdvlk ];
boot.kernelModules = [ "kvm-amd" ]; boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
@@ -799,6 +265,10 @@
# displayManager.gdm.enable = true; # displayManager.gdm.enable = true;
# desktopManager.gnome.enable = true; # desktopManager.gnome.enable = true;
#}; #};
networking.firewall = {
allowedTCPPorts = [ 8080 8081 ]; #30000 is minetest
allowedUDPPorts = [ 8080 8081 ];
};
})) }))
]; ];
}; };
@@ -1214,6 +684,9 @@
forceSSL = true; forceSSL = true;
enableACME = true; enableACME = true;
locations."/".proxyPass = "http://localhost:3001"; locations."/".proxyPass = "http://localhost:3001";
locations."/".extraConfig = ''
client_max_body_size 100M;
'';
}; };
virtualHosts."synapse.room409.xyz" = { virtualHosts."synapse.room409.xyz" = {
@@ -1431,6 +904,125 @@
</ol> </ol>
</body> </body>
</html> </html>
'';
};
};
virtualHosts."survey-test1.room409.xyz" = {
forceSSL = true;
enableACME = true;
locations."/" = {
root = pkgs.writeTextDir "index.html" ''<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Guest Survey</title>
</head>
<body>
<iframe src="https://gatech.co1.qualtrics.com/jfe/form/SV_9txRmN3ky239cdo" height="800px" width="600px"></iframe>
</body>
</html>
'';
};
};
virtualHosts."survey-test2.room409.xyz" = {
forceSSL = true;
enableACME = true;
locations."/" = {
root = pkgs.writeTextDir "index.html" ''<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Guest Survey</title>
</head>
<body>
<style>
.survey-wrapper { width:100%; max-width:1000px; margin:0 auto; }
.survey-iframe { width:100%; height:80vh; border:0; min-height:600px; }
</style>
<div class="survey-wrapper" role="region" aria-label="Survey">
<div id="survey-container"></div>
</div>
<script>
// 1) Read host-page query params
const params = new URLSearchParams(location.search);
// 2) Get utm_campaign (example: RF777101202)
const utmCampaign = params.get('utm_campaign');
// 3) Decide which Embedded Data field name Qualtrics should receive
// (use 'Referral' if that's your embedded-data field in Qualtrics)
if (utmCampaign) {
params.set('Referral', utmCampaign);
}
// 4) Optionally keep the original UTM values as well
// (uncomment if you want them passed through)
// params.set('utm_source', params.get('utm_source') || 'unknown');
// params.set('utm_medium', params.get('utm_medium') || 'unknown');
// params.set('utm_campaign', utmCampaign || "");
// 5) Build and insert the iframe with the serialized params
const iframe = document.createElement('iframe');
iframe.className = 'survey-iframe';
iframe.title = 'Guest survey';
iframe.allowFullscreen = true;
// Replace the base URL below with your Qualtrics anonymous survey URL
const baseSurveyUrl = 'https://gatech.co1.qualtrics.com/jfe/form/SV_9txRmN3ky239cdo';
iframe.src = baseSurveyUrl + '?' + params.toString();
document.getElementById('survey-container').appendChild(iframe);
</script>
</body>
</html>
'';
};
};
virtualHosts."survey-test3.room409.xyz" = {
forceSSL = true;
enableACME = true;
locations."/" = {
root = pkgs.writeTextDir "index.html" ''<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Guest Survey</title>
<style>
.survey-wrapper { width:100%; max-width:1000px; margin:0 auto; padding:1rem; }
.survey-iframe { width:100%; height:80vh; border:0; min-height:600px; }
</style>
</head>
<body>
<main class="survey-wrapper" role="region" aria-label="Survey">
<div id="survey-container"></div>
</main>
<script>
const params = new URLSearchParams(location.search);
const utmCampaign = params.get('utm_campaign');
if (utmCampaign) {
params.set('Referral', utmCampaign);
}
const iframe = document.createElement('iframe');
iframe.className = 'survey-iframe';
iframe.title = 'Guest survey';
iframe.allowFullscreen = true;
const baseSurveyUrl = 'https://gatech.co1.qualtrics.com/jfe/form/SV_9txRmN3ky239cdo';
iframe.src = baseSurveyUrl + (params.toString() ? '?' + params.toString() : "");
document.getElementById('survey-container').appendChild(iframe);
</script>
</body>
</html>
''; '';
}; };
}; };

156
home-manager/flake.lock generated Normal file
View File

@@ -0,0 +1,156 @@
{
"nodes": {
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1756261190,
"narHash": "sha256-eiy0klFK5EVJLNilutR7grsZN/7Itj9DyD75eyOf83k=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "77f348da3176dc68b20a73dab94852a417daf361",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"niri": {
"inputs": {
"niri-stable": "niri-stable",
"niri-unstable": "niri-unstable",
"nixpkgs": [
"nixpkgs"
],
"nixpkgs-stable": "nixpkgs-stable",
"xwayland-satellite-stable": "xwayland-satellite-stable",
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
},
"locked": {
"lastModified": 1756284022,
"narHash": "sha256-5q5rKE9Cbt1qDXtqgRr9FSeJrhS6apGatP3s9Oyejh8=",
"owner": "sodiboo",
"repo": "niri-flake",
"rev": "a98afc5eb87093eec2f70c2e53e5faf919875025",
"type": "github"
},
"original": {
"owner": "sodiboo",
"repo": "niri-flake",
"type": "github"
}
},
"niri-stable": {
"flake": false,
"locked": {
"lastModified": 1748151941,
"narHash": "sha256-z4viQZLgC2bIJ3VrzQnR+q2F3gAOEQpU1H5xHtX/2fs=",
"owner": "YaLTeR",
"repo": "niri",
"rev": "8ba57fcf25d2fc9565131684a839d58703f1dae7",
"type": "github"
},
"original": {
"owner": "YaLTeR",
"ref": "v25.05.1",
"repo": "niri",
"type": "github"
}
},
"niri-unstable": {
"flake": false,
"locked": {
"lastModified": 1756275478,
"narHash": "sha256-BvPxbh+37rb5SHS5zFF6lis63B8BTuKDGRqMjbb9qBU=",
"owner": "YaLTeR",
"repo": "niri",
"rev": "e038b8770a17b67cbf9c9d007a1f3a9ac0b53c60",
"type": "github"
},
"original": {
"owner": "YaLTeR",
"repo": "niri",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1756125398,
"narHash": "sha256-XexyKZpf46cMiO5Vbj+dWSAXOnr285GHsMch8FBoHbc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "3b9f00d7a7bf68acd4c4abb9d43695afb04e03a5",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1756217674,
"narHash": "sha256-TH1SfSP523QI7kcPiNtMAEuwZR3Jdz0MCDXPs7TS8uo=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "4e7667a90c167f7a81d906e5a75cba4ad8bee620",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"home-manager": "home-manager",
"niri": "niri",
"nixpkgs": "nixpkgs"
}
},
"xwayland-satellite-stable": {
"flake": false,
"locked": {
"lastModified": 1755491097,
"narHash": "sha256-m+9tUfsmBeF2Gn4HWa6vSITZ4Gz1eA1F5Kh62B0N4oE=",
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"rev": "388d291e82ffbc73be18169d39470f340707edaa",
"type": "github"
},
"original": {
"owner": "Supreeeme",
"ref": "v0.7",
"repo": "xwayland-satellite",
"type": "github"
}
},
"xwayland-satellite-unstable": {
"flake": false,
"locked": {
"lastModified": 1756260173,
"narHash": "sha256-wcf04fl5ncbOqAK7OCWIgILERIbMfL/eeM3UThqgErI=",
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"rev": "af33f7eb124b51ff6d9cdf9b428643e2246c8cbb",
"type": "github"
},
"original": {
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

39
home-manager/flake.nix Normal file
View File

@@ -0,0 +1,39 @@
{
description = "Home Manager configuration of nbraswell6";
inputs = {
# Specify the source of Home Manager and Nixpkgs.
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
niri = {
url = "github:sodiboo/niri-flake";
inputs.nixpkgs.follows = "nixpkgs";
};
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{ nixpkgs, niri, home-manager, ... }:
let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
in
{
homeConfigurations."nbraswell6" = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
# Specify your home configuration modules here, for example,
# the path to your home.nix.
modules = [
((import ./home.nix) { username = "nbraswell6"; homeDirectory = "/home/nbraswell6"; backgroundImg = "/home/nbraswell6"; email = "nathan.braswell@gtri.gatech.edu"; })
#niri.nixosModules.niri
niri.homeModules.niri
];
# Optionally use extraSpecialArgs
# to pass through arguments to home.nix
};
};
}

583
home-manager/home.nix Normal file
View File

@@ -0,0 +1,583 @@
{ username, homeDirectory, backgroundImg, email }: ({ config, pkgs, lib, ... }:{
# This value determines the Home Manager release that your
# configuration is compatible with. This helps avoid breakage
# when a new Home Manager release introduces backwards
# incompatible changes.
#
# You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version
# changes in each release.
home.stateVersion = "22.11";
home.username = username;
home.homeDirectory = homeDirectory;
fonts.fontconfig.enable = true;
home.packages = with pkgs; [
fira-code jetbrains-mono iosevka monoid recursive inter
xwayland-satellite
swww
niri
];
systemd.user.services.mpris-proxy = {
Unit.Description = "Mpris proxy";
Unit.After = [ "network.target" "sound.target" ];
Service.ExecStart = "${pkgs.bluez}/bin/mpris-proxy";
Install.WantedBy = [ "default.target" ];
};
programs.fuzzel.enable = true;
programs.waybar = {
enable = true;
settings = {
mainBar = {
layer = "top";
position = "top";
height = 18;
modules-left = [ "memory" "disk" "network" ];
modules-center = [ "clock" ];
modules-right = [ "battery" "power-profiles-daemon" "backlight" "pulseaudio" ];
reload_style_on_change = true;
};
};
style = ''
/*
* {
border: none;
border-radius: 0;
font-family: Recursive;
}
*/
window#waybar {
background: transparent;
color: #ffffff;
}
button {
box-shadow: none;
border: none;
border-radius: 0;
transition-property: none;
}
#workspaces button {
padding: 0 5px;
background-color: transparent;
color: #ffffff;
}
#mode {
background-color: #64829D;
border-bottom: 3px solid #ffffff;
}
#memory, #disk, #network, #pulseaudio, #battery, #power-profiles-daemon, #backlight, #clock {
padding: 0 10px;
color: #f0f0ff;
background-color: rgba(30,30,46,0.6);
border-radius: 99px;
margin-left: 4px;
}
#window, #workspaces {
margin: 0 4px;
}
#clock {
font-weight: bold;
}
#battery {
margin-left: 4px;
}
/*
#pulseaudio {
color: #000000;
background-color: #f1c40f;
}
*/
'';
};
programs.niri.settings = {
prefer-no-csd = true;
# TV at 1080 instead of 4k
outputs."DP-4".mode = {
width = 1920;
height = 1080;
refresh = 60.000;
};
input.keyboard.xkb = {
options = "ctrl:nocaps";
};
environment = {
DISPLAY = ":0"; # xwayland-satellite
};
spawn-at-startup = [
{ command = [ "swww-daemon" ]; }
{ command = [ "swww" "img" "${backgroundImg}" ]; }
{ command = [ "waybar" ]; }
{ command = [ "xwayland-satellite" ]; }
];
window-rules = [
{
draw-border-with-background = false;
geometry-corner-radius = let r = 2.0; in {
top-left = r;
top-right = r;
bottom-left = r;
bottom-right = r;
};
clip-to-geometry = true;
#opacity = 0.95;
}
{
matches = [{is-focused = false;}];
opacity = 0.85;
#opacity = 0.95;
}
];
layout = {
gaps = 4;
#gaps = 4;
#gaps = 8;
#gaps = 16;
center-focused-column = "never";
preset-column-widths = [
{ proportion = 1.0 / 3.0; }
{ proportion = 1.0 / 2.0; }
{ proportion = 2.0 / 3.0; }
];
#If you leave the brackets empty, the windows themselves will decide their initial width.
#preset-window-heights = {};
default-column-width = { proportion = 1.0 / 2.0; };
#focus-ring = {
# enable = false;
# width = 8;
# # Color of the ring on the active monitor.
# active.color = "#7fc8ff";
# # Color of the ring on inactive monitors.
# inactive.color = "#505050";
#};
border.width = 2;
#border = {
# enable = true;
# width = 4;
# active = {
# gradient = {
# angle = 130;
# relative-to = "workspace-view";
# from = "#90F090";
# to = "#909090";
# };
# };
# inactive = {
# gradient = {
# angle = 130;
# relative-to = "workspace-view";
# from = "#409040";
# to = "#404040";
# };
# };
#};
#struts = {
#left = 64;
#right = 64;
#top = 64;
#bottom = 64;
#};
};
binds = with config.lib.niri.actions; {
#"Alt+P".action = spawn "bemenu-run";
"Alt+P".action = spawn "fuzzel";
"Alt+Return".action = spawn "ghostty";
"Alt+Shift+Return".action = spawn "foot";
"Alt+Shift+Slash".action = show-hotkey-overlay;
"Alt+Shift+C".action = close-window;
"Alt+Left" .action = focus-column-left;
"Alt+Down" .action = focus-window-down;
"Alt+Up" .action = focus-window-up;
"Alt+Right" .action = focus-column-right;
"Alt+H" .action = focus-column-left;
#"Alt+J" .action = focus-window-down;
#"Alt+K" .action = focus-window-up;
"Alt+L" .action = focus-column-right;
"Alt+Shift+Left" .action = move-column-left;
"Alt+Shift+Down" .action = move-window-down;
"Alt+Shift+Up" .action = move-window-up;
"Alt+Shift+Right" .action = move-column-right;
"Alt+Shift+H" .action = move-column-left;
#"Alt+Shift+J" .action = move-window-down;
#"Alt+Shift+K" .action = move-window-up;
"Alt+Shift+L" .action = move-column-right;
# Nice alts
"Alt+J" .action = focus-window-or-workspace-down;
"Alt+K" .action = focus-window-or-workspace-up;
"Alt+Shift+J".action = move-window-down-or-to-workspace-down;
"Alt+Shift+K".action = move-window-up-or-to-workspace-up;
"Alt+Ctrl+Left" .action = focus-monitor-left;
"Alt+Ctrl+Down" .action = focus-monitor-down;
"Alt+Ctrl+Up" .action = focus-monitor-up;
"Alt+Ctrl+Right".action = focus-monitor-right;
"Alt+Ctrl+H" .action = focus-monitor-left;
"Alt+Ctrl+J" .action = focus-monitor-down;
"Alt+Ctrl+K" .action = focus-monitor-up;
"Alt+Ctrl+L" .action = focus-monitor-right;
"Alt+Shift+Ctrl+Left" .action = move-column-to-monitor-left;
"Alt+Shift+Ctrl+Down" .action = move-column-to-monitor-down;
"Alt+Shift+Ctrl+Up" .action = move-column-to-monitor-up;
"Alt+Shift+Ctrl+Right" .action = move-column-to-monitor-right;
"Alt+Shift+Ctrl+H" .action = move-column-to-monitor-left;
"Alt+Shift+Ctrl+J" .action = move-column-to-monitor-down;
"Alt+Shift+Ctrl+K" .action = move-column-to-monitor-up;
"Alt+Shift+Ctrl+L" .action = move-column-to-monitor-right;
#...
"Alt+1".action = focus-workspace 1;
"Alt+2".action = focus-workspace 2;
"Alt+3".action = focus-workspace 3;
"Alt+4".action = focus-workspace 4;
"Alt+5".action = focus-workspace 5;
"Alt+6".action = focus-workspace 6;
"Alt+7".action = focus-workspace 7;
"Alt+8".action = focus-workspace 8;
"Alt+9".action = focus-workspace 9;
#"Alt+Shift+1".action = move-column-to-workspace 1;
#"Alt+Shift+2".action = move-column-to-workspace 2;
#"Alt+Shift+3".action = move-column-to-workspace 3;
#"Alt+Shift+4".action = move-column-to-workspace 4;
#"Alt+Shift+5".action = move-column-to-workspace 5;
#"Alt+Shift+6".action = move-column-to-workspace 6;
#"Alt+Shift+7".action = move-column-to-workspace 7;
#"Alt+Shift+8".action = move-column-to-workspace 8;
#"Alt+Shift+9".action = move-column-to-workspace 9;
#Consume one window from the right into the focused column.
"Alt+Comma" .action = consume-window-into-column;
#Expel one window from the focused column to the right.
"Alt+Period" .action = expel-window-from-column;
#There are also commands that consume or expel a single window to the side.
"Alt+BracketLeft" .action = consume-or-expel-window-left;
"Alt+BracketRight" .action = consume-or-expel-window-right;
"Alt+R".action = switch-preset-column-width;
"Alt+Shift+R".action = switch-preset-window-height;
"Alt+Ctrl+R".action = reset-window-height;
"Alt+F".action = maximize-column;
"Alt+Shift+F".action = fullscreen-window;
"Alt+C".action = center-column;
"Alt+Minus".action = set-column-width "-10%";
"Alt+Equal".action = set-column-width "+10%";
"Alt+Shift+Minus".action = set-window-height "-10%";
"Alt+Shift+Equal".action = set-window-height "+10%";
"Alt+S".action.screenshot.show-pointer = false;
#"Print".action = screenshot;
#"Ctrl+Print".aciton = screenshot-screen;
#"Alt+Print".action = screenshot-window;
"Alt+Shift+E".action = quit;
"Ctrl+Alt+Delete".action = quit;
"Alt+Shift+P".action = power-off-monitors;
};
};
programs.ghostty = {
enable = true;
settings = {
window-decoration = false;
minimum-contrast = 1.5;
#font-family = "Recursive Mono Linear Static";
#font-size = 11;
#theme = "GruvboxDarkHard";
#theme = "Horizon";
#theme = "IC_Green_PPL";
#theme = "IC_Orange_PPL";
#theme = "iceberg-dark";
#theme = "Kanagawa Dragon";
#theme = "Kanagawa Wave";
#theme = "kanagawabones";
#theme = "kurokula";
#theme = "Later This Evening";
#theme = "MaterialDarker";
#theme = "MaterialOcean";
#theme = "matrix";
#theme = "Medallion";
#theme = "Mellifluous";
#theme = "Molokai";
#theme = "MonaLisa";
#theme = "Monokai Remastered";
#theme = "Monokai Soda";
#theme = "NightLion v2";
#theme = "niji";
#theme = "Nocturnal Winter";
#theme = "nord";
#theme = "NvimDark";
#theme = "Oceanic-Next";
#theme = "OneHalfDark";
#theme = "Paraiso Dark";
#theme = "PaulMillr";
#theme = "PencilDark";
#theme = "Peppermint";
#theme = "Pnevma";
#theme = "Popping and Locking";
#theme = "Red Planet";
#theme = "rose-pine";
#theme = "Ryuuko";
#theme = "SeaShells";
#theme = "Seti";
#theme = "Shaman";
#theme = "Slate";
#theme = "Smyck";
#theme = "Snazzy";
#theme = "SoftServer";
#theme = "Solarized Dark - Patched";
#theme = "Solarized Dark Higher Contrast";
#theme = "SpaceGray Bright";
#theme = "SpaceGray Eighties";
#theme = "SpaceGray Eighties Dull";
#theme = "terafox";
#theme = "Thayer Bright";
#theme = "Tinacious Design (Dark)";
#theme = "tokyonight";
#theme = "tokyonight-storm";
#theme = "Tomorrow Night Burns";
#theme = "UltraViolent";
#theme = "Violet Dark";
#theme = "Whimsy";
#theme = "WildCherry";
#theme = "wilmersdorf";
#theme = "Wombat";
#theme = "xcodewwdc";
#theme = "zenbones_dark";
#theme = "zenwritten_dark";
};
};
programs.foot = {
enable = true;
settings = {
main = {
#font = "Fira Code:size=8";
#font = "JetBrainsMono:size=8";
#font = "Iosevka:size=18";
#font = "Monoid:size=6";
#font = "Recursive:size=16"; # seems to be Recursive Mono Linear Static in Ghostty
#dpi-aware = "yes";
};
mouse = {
hide-when-typing = "yes";
};
};
};
programs.starship = {
enable = true;
enableBashIntegration = true;
settings = {
add_newline = false;
format = lib.concatStrings [
"$username"
"$hostname"
"$directory"
"$jobs"
"$cmd_duration"
"$character"
];
directory = {
truncation_length = 10;
truncate_to_repo = false;
};
scan_timeout = 10;
character = {
success_symbol = "";
error_symbol = "";
};
};
};
programs.bash = {
enable = true;
sessionVariables = {
};
profileExtra = ''
if [ -e /home/nathan/.nix-profile/etc/profile.d/nix.sh ]; then . /home/nathan/.nix-profile/etc/profile.d/nix.sh; fi # added by Nix installer
. "$HOME/.cargo/env"
export PATH="/run/system-manager/sw/bin/:/home/nbraswell6/.nix-profile/bin:/nix/var/nix/profiles/default/bin:$PATH"
'';
shellAliases = {
ng ="nmcli c up NETGEAR97";
ng24="nmcli c up NETGEAR97_24_2Ghz";
ng58="nmcli c up NETGEAR97_28_5Ghz";
ng5c="nmcli c up NETGEAR97_2C_5Ghz";
};
};
programs.git = {
enable = true;
lfs.enable = true;
userName = "Nathan Braswell";
userEmail = email;
};
programs.jujutsu = {
enable = true;
settings.user = {
name = "Nathan Braswell";
email = email;
};
};
programs.vim = {
enable = true;
plugins = with pkgs.vimPlugins; [
nerdcommenter vim-polyglot #parinfer-rust
];
settings = {
# Is the need for these obliviated by vim-polyglot using sleuth?
#expandtab = false;
tabstop = 4;
shiftwidth = 4;
};
extraConfig = ''
set number
set hlsearch
nnoremap <leader>m :bn<CR>
nnoremap <leader>t :tabnew<CR>
nnoremap <leader>. :tabn<CR>
nnoremap <leader>, :tabp<CR>
nnoremap <leader>v :vsplit<CR>
nnoremap <leader>h :split<CR>
nnoremap <leader>q :q<CR>
inoremap jk <Esc>
inoremap kj <Esc>
" Thanks to https://unix.stackexchange.com/questions/140898/vim-hide-status-line-in-the-bottom
let s:hidden_all = 0
function! ToggleHiddenAll()
if s:hidden_all == 0
let s:hidden_all = 1
set noshowmode
set noruler
set laststatus=0
set noshowcmd
else
let s:hidden_all = 0
set showmode
set ruler
set laststatus=2
set showcmd
endif
endfunction
nnoremap <S-h> :call ToggleHiddenAll()<CR>
'';
};
programs.tmux = {
enable = true;
extraConfig = ''
#$Id: vim-keys.conf,v 1.2 2010-09-18 09:36:15 nicm Exp $
#
# vim-keys.conf, v1.2 2010/09/12
#
# By Daniel Thau. Public domain.
#
# This configuration file binds many vi- and vim-like bindings to the
# appropriate tmux key bindings. Note that for many key bindings there is no
# tmux analogue. This is intended for tmux 1.3, which handles pane selection
# differently from the previous versions
# split windows like vim
# vim's definition of a horizontal/vertical split is reversed from tmux's
bind s split-window -v
bind v split-window -h
# move around panes with hjkl, as one would in vim after pressing ctrl-w
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# resize panes like vim
# feel free to change the "1" to however many lines you want to resize by, only
# one at a time can be slow
bind < resize-pane -L 1
bind > resize-pane -R 1
bind - resize-pane -D 1
bind + resize-pane -U 1
# bind : to command-prompt like vim
# this is the default in tmux already
bind : command-prompt
# vi-style controls for copy mode
setw -g mode-keys vi
'';
};
programs.emacs = {
package = pkgs.emacs-pgtk;
enable = true;
extraConfig = ''
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
;; Use spaces, not tabs, for indentation.
(setq-default indent-tabs-mode nil)
;; Highlight matching pairs of parentheses.
(setq show-paren-delay 0)
(show-paren-mode)
(setq evil-want-C-u-scroll t)
(setq evil-want-keybinding nil)
(evil-mode 1)
(evil-set-undo-system 'undo-redo)
(setq key-chord-two-keys-delay 0.5)
(key-chord-define evil-insert-state-map "jk" 'evil-normal-state)
(evil-collection-init)
(key-chord-mode 1)
(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))
(add-hook 'prog-mode-hook 'display-line-numbers-mode)
;(load-theme 'dracula t)
'';
extraPackages = epkgs: with epkgs; [
evil key-chord magit proof-general
ement nov evil-collection
rainbow-delimiters
dracula-theme
];
};
#services.pantalaimon = {
#package = pkgs.pantalaimon.overridePythonAttrs { doCheck = false; };
#enable = true;
#settings = {
#Default = {
#LogLevel = "Debug";
#SSL = true;
#};
#local-matrix = {
#Homeserver = "https://synapse.room409.xyz";
#ListenAddress = "127.0.0.1";
#ListenPort = "8009";
#};
#};
#};
programs.iamb = {
enable = true;
settings = {
settings = {
image_preview = {};
username_display = "displayname";
sort = {
rooms = ["recent"];
};
};
profiles.miloignis = {
user_id = "@miloignis:synapse.room409.xyz";
};
};
};
})

123
system-manager/flake.lock generated Normal file
View File

@@ -0,0 +1,123 @@
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"id": "flake-utils",
"type": "indirect"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1756261190,
"narHash": "sha256-eiy0klFK5EVJLNilutR7grsZN/7Itj9DyD75eyOf83k=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "77f348da3176dc68b20a73dab94852a417daf361",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"nix-system-graphics": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1737457219,
"narHash": "sha256-nX9dxoATDCSQgWw/iv6BngXDJEyHVYYEvHEVQ7Ig3fI=",
"owner": "soupglasses",
"repo": "nix-system-graphics",
"rev": "9c875e0c56cf2eb272b9102a4f3e24e4e31629fd",
"type": "github"
},
"original": {
"owner": "soupglasses",
"repo": "nix-system-graphics",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1756125398,
"narHash": "sha256-XexyKZpf46cMiO5Vbj+dWSAXOnr285GHsMch8FBoHbc=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "3b9f00d7a7bf68acd4c4abb9d43695afb04e03a5",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"home-manager": "home-manager",
"nix-system-graphics": "nix-system-graphics",
"nixpkgs": "nixpkgs",
"system-manager": "system-manager"
}
},
"system-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1756281415,
"narHash": "sha256-CjpoVwpJJ+DOZilPrDpZ5S3V+B1Y0calaHxTp2xMvGs=",
"owner": "numtide",
"repo": "system-manager",
"rev": "e271eedac9a24678ca6cfc61677837422bf474e0",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "system-manager",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

34
system-manager/flake.nix Normal file
View File

@@ -0,0 +1,34 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
system-manager = {
url = "github:numtide/system-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-system-graphics = {
url = "github:soupglasses/nix-system-graphics";
inputs.nixpkgs.follows = "nixpkgs";
};
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, flake-utils, nixpkgs, system-manager, nix-system-graphics, home-manager }: {
systemConfigs.default = system-manager.lib.makeSystemConfig {
modules = [
nix-system-graphics.systemModules.default
({
config = {
nixpkgs.hostPlatform = "x86_64-linux";
system-manager.allowAnyDistro = true;
system-graphics.enable = true;
};
})
];
};
};
}

3
work_activate_home_manager.sh Executable file
View File

@@ -0,0 +1,3 @@
#!/usr/bin/env bash
nix run home-manager/master -- switch --flake ~/nix_config/home-manager
#home-manager switch --flake ~/nix_config/home-manager

View File

@@ -0,0 +1,2 @@
#!/usr/bin/env bash
sudo $(which nix) run --extra-experimental-features 'nix-command flakes' 'github:numtide/system-manager' -- switch --flake /home/nbraswell6/nix_config/system-manager