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

692
flake.nix
View File

@@ -43,551 +43,17 @@
platforms = platforms.all;
};
}));
#background = ./GitS_other_alley_zoom.png;
background = ./GitS_alley_to_water_zoom.png;
homeManagerSharedModule = {
home-manager.useGlobalPkgs = true;
home-manager.users.nathan = { 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";
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
];
};
};
home-manager.users.nathan = ((import ./home-manager/home.nix) { username = "nathan"; homeDirectory = "/home/nathan"; backgroundImg = background; email = "miloignis@gmail.com"; });
};
commonConfigFunc = ({ config, lib, pkgs, modulesPath, ... }: (specificPkgs: {
nixpkgs.config.allowUnfree = true;
nixpkgs.config.permittedInsecurePackages = [
"olm-3.2.16"
];
nix.settings.experimental-features = [ "nix-command" "flakes" ];
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
time.timeZone = "America/New_York";
@@ -631,7 +97,9 @@
#image = ./stones-water.jpg;
#image = ./moss.jpeg;
#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 {
# url = "https://raw.githubusercontent.com/kiedtl/walls/refs/heads/master/green-tea.jpg";
# sha256 = "sha256-+NcZMBnbEWurmkOkzdrxGwBlxzUO3Sitt6Uoq9plc7o=";
@@ -639,13 +107,12 @@
polarity = "dark";
#polarity = "light";
fonts = {
# hehe casual as serif
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.inter; name = "Inter"; };
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 = {
@@ -658,7 +125,7 @@
extraPackages = with pkgs; [
swaylock # lockscreen
swayidle
xwayland # for legacy apps
#xwayland # for legacy apps
#waybar # status bar
mako # notification daemon
kanshi # autorandr
@@ -673,16 +140,15 @@
};
};
# For steam, and Vulkan in general
#hardware.opengl.driSupport = true;
hardware.opengl.driSupport32Bit = true;
hardware.graphics.enable32Bit = true;
hardware.steam-hardware.enable = true;
programs.steam.enable = true;
environment.systemPackages = with pkgs; [
tmux vim wget curl git w3m iftop iotop killall file unzip zip p7zip ripgrep imv killall
btop htop python3
waypipe firefox-wayland chromium chawan nautilus
vlc mpv wayfarer libreoffice calibre foliate #transmission-gtk mupdf
waypipe firefox chromium chawan cmatrix nautilus
vlc mpv wayfarer libreoffice calibre foliate epr #transmission-gtk mupdf
gimp
pavucontrol pywal
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.kernelModules = [ "amdgpu" ];
hardware.opengl.extraPackages = with pkgs; [ amdvlk ];
#hardware.opengl.extraPackages = with pkgs; [ amdvlk ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
@@ -799,6 +265,10 @@
# displayManager.gdm.enable = true;
# desktopManager.gnome.enable = true;
#};
networking.firewall = {
allowedTCPPorts = [ 8080 8081 ]; #30000 is minetest
allowedUDPPorts = [ 8080 8081 ];
};
}))
];
};
@@ -1214,6 +684,9 @@
forceSSL = true;
enableACME = true;
locations."/".proxyPass = "http://localhost:3001";
locations."/".extraConfig = ''
client_max_body_size 100M;
'';
};
virtualHosts."synapse.room409.xyz" = {
@@ -1434,6 +907,125 @@
'';
};
};
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>
'';
};
};
virtualHosts."batou.room409.xyz" = {
forceSSL = true;

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