Compare commits

..

12 Commits

Author SHA1 Message Date
98ed85c4b0 Switched to zen browser 2026-04-11 15:34:43 -04:00
96b4dc216b Added bat && eza 2026-04-11 14:22:06 -04:00
a868dd120b Updated yazi config 2026-04-11 14:21:41 -04:00
3a32359eb6 Updated font config 2026-04-11 14:21:19 -04:00
1405acedbe Added niri blur 2026-04-11 14:20:23 -04:00
0b5824120b Updated zellij config 2026-04-11 14:19:46 -04:00
1b9dbdd1c3 Switched monique to use flake 2026-04-11 14:19:07 -04:00
f3664cb0af Updated flake inputs 2026-04-11 14:17:57 -04:00
6d3b315eb7 Moved assets into separate module 2026-04-05 14:00:34 -04:00
fa0e950c34 Removed stylix and a few small fixes 2026-04-04 17:56:31 -04:00
f080e311d1 Initial dendritic rewrite 2026-04-04 16:46:30 -04:00
06a8e77924 Small update 2026-03-28 15:26:16 -04:00
135 changed files with 4041 additions and 2814 deletions

11
README.md Normal file
View File

@@ -0,0 +1,11 @@
# Eclypse's Nix Config
My personal nixos configuration. Utilizes the dendritic pattern to manage my devices:
- Vanta: Framework 13 (12th Gen Intel)
- Onyx: Desktop Workstation
- Umbra: Mackbook (2015)
## TODO
- Look into Kitty terminal as replacement for Foot & Zellij

683
flake.lock generated
View File

@@ -10,11 +10,11 @@
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1762618334, "lastModified": 1770165109,
"narHash": "sha256-wyT7Pl6tMFbFrs8Lk/TlEs81N6L+VSybPfiIgzU8lbQ=", "narHash": "sha256-9VnK6Oqai65puVJ4WYtCTvlJeXxMzAp/69HhQuTdl/I=",
"owner": "ryantm", "owner": "ryantm",
"repo": "agenix", "repo": "agenix",
"rev": "fcdea223397448d35d9b31f798479227e80183f6", "rev": "b027ee29d959fda4b60b57566d64c98a202e0feb",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -34,11 +34,11 @@
"treefmt-nix": "treefmt-nix" "treefmt-nix": "treefmt-nix"
}, },
"locked": { "locked": {
"lastModified": 1759699908, "lastModified": 1774522439,
"narHash": "sha256-kYVGY8sAfqwpNch706Fy2+/b+xbtfidhXSnzvthAhIQ=", "narHash": "sha256-GvINrdGznE7mGlDNjW0/PMgOJlC+Nl9MkfxALB4QvWs=",
"owner": "oddlama", "owner": "oddlama",
"repo": "agenix-rekey", "repo": "agenix-rekey",
"rev": "42362b12f59978aabf3ec3334834ce2f3662013d", "rev": "8b9c179bc1300ab130c90f2d25426bf0e7a2b58d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -47,71 +47,30 @@
"type": "github" "type": "github"
} }
}, },
"base16": { "assets": {
"inputs": {
"fromYaml": "fromYaml"
},
"locked": {
"lastModified": 1755819240,
"narHash": "sha256-qcMhnL7aGAuFuutH4rq9fvAhCpJWVHLcHVZLtPctPlo=",
"owner": "SenchoPens",
"repo": "base16.nix",
"rev": "75ed5e5e3fce37df22e49125181fa37899c3ccd6",
"type": "github"
},
"original": {
"owner": "SenchoPens",
"repo": "base16.nix",
"type": "github"
}
},
"base16-fish": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1765809053, "path": "./assets",
"narHash": "sha256-XCUQLoLfBJ8saWms2HCIj4NEN+xNsWBlU1NrEPcQG4s=", "type": "path"
"owner": "tomyun",
"repo": "base16-fish",
"rev": "86cbea4dca62e08fb7fd83a70e96472f92574782",
"type": "github"
}, },
"original": { "original": {
"owner": "tomyun", "path": "./assets",
"repo": "base16-fish", "type": "path"
"rev": "86cbea4dca62e08fb7fd83a70e96472f92574782",
"type": "github"
}
}, },
"base16-helix": { "parent": []
"flake": false, },
"crane": {
"locked": { "locked": {
"lastModified": 1760703920, "lastModified": 1765739568,
"narHash": "sha256-m82fGUYns4uHd+ZTdoLX2vlHikzwzdu2s2rYM2bNwzw=", "narHash": "sha256-gQYx35Of4UDKUjAYvmxjUEh/DdszYeTtT6MDin4loGE=",
"owner": "tinted-theming", "owner": "ipetkov",
"repo": "base16-helix", "repo": "crane",
"rev": "d646af9b7d14bff08824538164af99d0c521b185", "rev": "67d2baff0f9f677af35db61b32b5df6863bcc075",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "tinted-theming", "owner": "ipetkov",
"repo": "base16-helix", "repo": "crane",
"type": "github"
}
},
"base16-vim": {
"flake": false,
"locked": {
"lastModified": 1732806396,
"narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=",
"owner": "tinted-theming",
"repo": "base16-vim",
"rev": "577fe8125d74ff456cf942c733a85d769afe58b7",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-vim",
"rev": "577fe8125d74ff456cf942c733a85d769afe58b7",
"type": "github" "type": "github"
} }
}, },
@@ -158,22 +117,6 @@
"type": "github" "type": "github"
} }
}, },
"firefox-gnome-theme": {
"flake": false,
"locked": {
"lastModified": 1764873433,
"narHash": "sha256-1XPewtGMi+9wN9Ispoluxunw/RwozuTRVuuQOmxzt+A=",
"owner": "rafaelmardojai",
"repo": "firefox-gnome-theme",
"rev": "f7ffd917ac0d253dbd6a3bf3da06888f57c69f92",
"type": "github"
},
"original": {
"owner": "rafaelmardojai",
"repo": "firefox-gnome-theme",
"type": "github"
}
},
"flake-compat": { "flake-compat": {
"flake": false, "flake": false,
"locked": { "locked": {
@@ -190,22 +133,6 @@
"type": "github" "type": "github"
} }
}, },
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1751685974,
"narHash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw=",
"ref": "refs/heads/main",
"rev": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1",
"revCount": 92,
"type": "git",
"url": "https://git.lix.systems/lix-project/flake-compat.git"
},
"original": {
"type": "git",
"url": "https://git.lix.systems/lix-project/flake-compat.git"
}
},
"flake-parts": { "flake-parts": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "nixpkgs-lib": [
@@ -228,6 +155,24 @@
} }
}, },
"flake-parts_2": { "flake-parts_2": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1772408722,
"narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_3": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "nixpkgs-lib": [
"nur", "nur",
@@ -248,61 +193,39 @@
"type": "github" "type": "github"
} }
}, },
"flake-parts_3": { "flake-utils": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "systems": "systems_2"
"nvf",
"nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1768135262, "lastModified": 1731533236,
"narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=", "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "hercules-ci", "owner": "numtide",
"repo": "flake-parts", "repo": "flake-utils",
"rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac", "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "hercules-ci", "owner": "numtide",
"repo": "flake-parts", "repo": "flake-utils",
"type": "github" "type": "github"
} }
}, },
"flake-parts_4": { "flake-utils_2": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "systems": "systems_4"
"stylix",
"nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1767609335, "lastModified": 1731533236,
"narHash": "sha256-feveD98mQpptwrAEggBQKJTYbvwwglSbOv53uCfH9PY=", "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "hercules-ci", "owner": "numtide",
"repo": "flake-parts", "repo": "flake-utils",
"rev": "250481aafeb741edfe23d29195671c19b36b6dca", "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "hercules-ci", "owner": "numtide",
"repo": "flake-parts", "repo": "flake-utils",
"type": "github"
}
},
"fromYaml": {
"flake": false,
"locked": {
"lastModified": 1731966426,
"narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=",
"owner": "SenchoPens",
"repo": "fromYaml",
"rev": "106af9e2f715e2d828df706c386a685698f3223b",
"type": "github"
},
"original": {
"owner": "SenchoPens",
"repo": "fromYaml",
"type": "github" "type": "github"
} }
}, },
@@ -328,25 +251,6 @@
"type": "github" "type": "github"
} }
}, },
"gnome-shell": {
"flake": false,
"locked": {
"host": "gitlab.gnome.org",
"lastModified": 1767737596,
"narHash": "sha256-eFujfIUQDgWnSJBablOuG+32hCai192yRdrNHTv0a+s=",
"owner": "GNOME",
"repo": "gnome-shell",
"rev": "ef02db02bf0ff342734d525b5767814770d85b49",
"type": "gitlab"
},
"original": {
"host": "gitlab.gnome.org",
"owner": "GNOME",
"ref": "gnome-49",
"repo": "gnome-shell",
"type": "gitlab"
}
},
"home-manager": { "home-manager": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -375,11 +279,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1771683283, "lastModified": 1774738535,
"narHash": "sha256-WxAEkAbo8dP7qiyPM6VN4ZGAxfuBVlNBNPkrqkrXVEc=", "narHash": "sha256-2jfBEZUC67IlnxO5KItFCAd7Oc+1TvyV/jQlR+2ykGQ=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "c6ed3eab64d23520bcbb858aa53fe2b533725d4a", "rev": "769e07ef8f4cf7b1ec3b96ef015abec9bc6b1e2a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -388,47 +292,46 @@
"type": "github" "type": "github"
} }
}, },
"mnw": { "import-tree": {
"locked": { "locked": {
"lastModified": 1768701608, "lastModified": 1773693634,
"narHash": "sha256-kSvWF3Xt2HW9hmV5V7i8PqeWJIBUKmuKoHhOgj3Znzs=", "narHash": "sha256-BtZ2dtkBdSUnFPPFc+n0kcMbgaTxzFNPv2iaO326Ffg=",
"owner": "Gerg-L", "owner": "vic",
"repo": "mnw", "repo": "import-tree",
"rev": "20d63a8a1ae400557c770052a46a9840e768926b", "rev": "c41e7d58045f9057880b0d85e1152d6a4430dbf1",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "Gerg-L", "owner": "vic",
"repo": "mnw", "repo": "import-tree",
"type": "github" "type": "github"
} }
}, },
"ndg": { "monique": {
"inputs": { "inputs": {
"nixpkgs": [ "flake-utils": "flake-utils",
"nvf", "nixpkgs": "nixpkgs"
"nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1768214250, "lastModified": 1775640310,
"narHash": "sha256-hnBZDQWUxJV3KbtvyGW5BKLO/fAwydrxm5WHCWMQTbw=", "narHash": "sha256-AYo7jk6xE2NX9IihdV1ec65eUMGyZomXRDQIdsOccnc=",
"owner": "feel-co", "owner": "ToRvaLDz",
"repo": "ndg", "repo": "monique",
"rev": "a6bd3c1ce2668d096e4fdaaa03ad7f03ba1fbca8", "rev": "1c22dacf89966bedcb21fe01864158b401395f3f",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "feel-co", "owner": "ToRvaLDz",
"ref": "refs/tags/v2.6.0", "repo": "monique",
"repo": "ndg",
"type": "github" "type": "github"
} }
}, },
"niri": { "niri": {
"inputs": { "inputs": {
"niri-stable": "niri-stable", "niri-stable": "niri-stable",
"niri-unstable": "niri-unstable", "niri-unstable": [
"niri-blur"
],
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ],
@@ -437,11 +340,11 @@
"xwayland-satellite-unstable": "xwayland-satellite-unstable" "xwayland-satellite-unstable": "xwayland-satellite-unstable"
}, },
"locked": { "locked": {
"lastModified": 1770739738, "lastModified": 1775042939,
"narHash": "sha256-sLpvik461SjSY1b23gHhNbM9aMJF9iU4h2vPepi9JoM=", "narHash": "sha256-qcCBdnnKj8g/TiYmfDl3LmTdLYVPxr08yht9JaTXW00=",
"owner": "sodiboo", "owner": "sodiboo",
"repo": "niri-flake", "repo": "niri-flake",
"rev": "9e23010320cfe4012adc2d8810495bad0fe2d4a6", "rev": "0e4df2c05361ed0f5e8738335369b304a0962b02",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -450,6 +353,23 @@
"type": "github" "type": "github"
} }
}, },
"niri-blur": {
"flake": false,
"locked": {
"lastModified": 1775673716,
"narHash": "sha256-nFScVrzNWXSbovyZOT5r5dgeHxgSGyksfRXbFD/tbqM=",
"owner": "niri-wm",
"repo": "niri",
"rev": "8bb271153260acdb2f78f1ef874da9b8b13f607a",
"type": "github"
},
"original": {
"owner": "niri-wm",
"ref": "wip/branch",
"repo": "niri",
"type": "github"
}
},
"niri-stable": { "niri-stable": {
"flake": false, "flake": false,
"locked": { "locked": {
@@ -467,22 +387,6 @@
"type": "github" "type": "github"
} }
}, },
"niri-unstable": {
"flake": false,
"locked": {
"lastModified": 1770735554,
"narHash": "sha256-8GzUa8bCyQ688jYW2waXrOqetTr7oV8UPTO2He+5Hsg=",
"owner": "YaLTeR",
"repo": "niri",
"rev": "41b5de87692b8262fbdbff7faab93f04ff0be453",
"type": "github"
},
"original": {
"owner": "YaLTeR",
"repo": "niri",
"type": "github"
}
},
"nix-jmu-cs345": { "nix-jmu-cs345": {
"locked": { "locked": {
"lastModified": 1745564874, "lastModified": 1745564874,
@@ -500,11 +404,11 @@
}, },
"nixos-hardware": { "nixos-hardware": {
"locked": { "locked": {
"lastModified": 1769302137, "lastModified": 1774777275,
"narHash": "sha256-QEDtctEkOsbx8nlFh4yqPEOtr4tif6KTqWwJ37IM2ds=", "narHash": "sha256-qogBiYFq8hZusDPeeKRqzelBAhZvREc7Cl+qlewGUCg=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "a351494b0e35fd7c0b7a1aae82f0afddf4907aa8", "rev": "b8f81636927f1af0cca812d22c876bad0a883ccd",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -515,11 +419,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1771369470, "lastModified": 1775423009,
"narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=", "narHash": "sha256-vPKLpjhIVWdDrfiUM8atW6YkIggCEKdSAlJPzzhkQlw=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "0182a361324364ae3f436a63005877674cf45efb", "rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -529,13 +433,28 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs-lib": {
"locked": {
"lastModified": 1772328832,
"narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": { "locked": {
"lastModified": 1770617025, "lastModified": 1775002709,
"narHash": "sha256-1jZvgZoAagZZB6NwGRv2T2ezPy+X6EFDsJm+YSlsvEs=", "narHash": "sha256-d3Yx83vSrN+2z/loBh4mJpyRqr9aAJqlke4TkpFmRJA=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "2db38e08fdadcc0ce3232f7279bab59a15b94482", "rev": "bcd464ccd2a1a7cd09aa2f8d4ffba83b761b1d0e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -545,18 +464,51 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_2": {
"locked": {
"lastModified": 1773389992,
"narHash": "sha256-wvfdLLWJ2I9oEpDd9PfMA8osfIZicoQ5MT1jIwNs9Tk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c06b4ae3d6599a672a6210b7021d699c351eebda",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1765934234,
"narHash": "sha256-pJjWUzNnjbIAMIc5gRFUuKCDQ9S1cuh3b2hKgA7Mc4A=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "af84f9d270d404c17699522fab95bbf928a2d92f",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"noctalia": { "noctalia": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ],
"noctalia-qs": "noctalia-qs"
}, },
"locked": { "locked": {
"lastModified": 1771434371, "lastModified": 1775039613,
"narHash": "sha256-1ivy5+FBZMSojnduPnG6K8w5EFxyP61vthmLXzfGwco=", "narHash": "sha256-5VzBe0SOXamABAbtjNF5Y7jaMbSeVtGQRhbICoJ6izo=",
"owner": "noctalia-dev", "owner": "noctalia-dev",
"repo": "noctalia-shell", "repo": "noctalia-shell",
"rev": "04589a4f58c7315b035633a274d1fc820d34c31a", "rev": "7b29c11d7aaf476723af14865665cf04750f8d20",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -565,77 +517,62 @@
"type": "github" "type": "github"
} }
}, },
"noctalia-qs": {
"inputs": {
"nixpkgs": [
"noctalia",
"nixpkgs"
],
"systems": "systems_3",
"treefmt-nix": "treefmt-nix_2"
},
"locked": {
"lastModified": 1774994931,
"narHash": "sha256-WmXA8kyqvDA226DRPrXyR6bLO9VsRr4SUAYCVH6H6Ns=",
"owner": "noctalia-dev",
"repo": "noctalia-qs",
"rev": "b053facf8421df220d0bf2496a543b23dee3ca85",
"type": "github"
},
"original": {
"owner": "noctalia-dev",
"repo": "noctalia-qs",
"type": "github"
}
},
"nur": { "nur": {
"inputs": { "inputs": {
"flake-parts": "flake-parts_2",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1765129370,
"narHash": "sha256-oECOMG9TqJfAym8EbcopfvA2+UZQEAnYB/wWEV09OvE=",
"owner": "nix-community",
"repo": "NUR",
"rev": "09e1d5968ffd4984068413c39e1803e74d436ce7",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "NUR",
"type": "github"
}
},
"nur_2": {
"inputs": {
"flake-parts": [
"stylix",
"flake-parts"
],
"nixpkgs": [
"stylix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1767810917,
"narHash": "sha256-ZKqhk772+v/bujjhla9VABwcvz+hB2IaRyeLT6CFnT0=",
"owner": "nix-community",
"repo": "NUR",
"rev": "dead29c804adc928d3a69dfe7f9f12d0eec1f1a4",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "NUR",
"type": "github"
}
},
"nvf": {
"inputs": {
"flake-compat": "flake-compat_2",
"flake-parts": "flake-parts_3", "flake-parts": "flake-parts_3",
"mnw": "mnw",
"ndg": "ndg",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ]
"systems": "systems_2"
}, },
"locked": { "locked": {
"lastModified": 1769173871, "lastModified": 1774965252,
"narHash": "sha256-vtcVJ/nlUVadTLoNsCb6HAYpwE/zOrlXljTnB5AyCsY=", "narHash": "sha256-wmrXM9Q8zgx2DEUjBqgPorjn1YSrwy89Ixo92uVnTQ0=",
"owner": "notashelf", "owner": "nix-community",
"repo": "nvf", "repo": "NUR",
"rev": "464a6f2641eecaf2a23b35a391b404b8efdcdb6a", "rev": "2662849d18110617a22243480a9b474c8f8602c6",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "notashelf", "owner": "nix-community",
"repo": "nvf", "repo": "NUR",
"type": "github" "type": "github"
} }
}, },
"packages": {
"flake": false,
"locked": {
"path": "./packages",
"type": "path"
},
"original": {
"path": "./packages",
"type": "path"
},
"parent": []
},
"pre-commit-hooks": { "pre-commit-hooks": {
"inputs": { "inputs": {
"flake-compat": "flake-compat", "flake-compat": "flake-compat",
@@ -663,52 +600,57 @@
"inputs": { "inputs": {
"agenix": "agenix", "agenix": "agenix",
"agenix-rekey": "agenix-rekey", "agenix-rekey": "agenix-rekey",
"assets": "assets",
"flake-parts": "flake-parts_2",
"home-manager": "home-manager_2", "home-manager": "home-manager_2",
"import-tree": "import-tree",
"monique": "monique",
"niri": "niri", "niri": "niri",
"niri-blur": "niri-blur",
"nix-jmu-cs345": "nix-jmu-cs345", "nix-jmu-cs345": "nix-jmu-cs345",
"nixos-hardware": "nixos-hardware", "nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs_2",
"noctalia": "noctalia", "noctalia": "noctalia",
"nur": "nur", "nur": "nur",
"nvf": "nvf", "packages": "packages",
"stylix": "stylix", "secrets": "secrets",
"zen-browser": "zen-browser" "zen-browser": "zen-browser",
"zjstatus": "zjstatus"
} }
}, },
"stylix": { "rust-overlay": {
"inputs": { "inputs": {
"base16": "base16",
"base16-fish": "base16-fish",
"base16-helix": "base16-helix",
"base16-vim": "base16-vim",
"firefox-gnome-theme": "firefox-gnome-theme",
"flake-parts": "flake-parts_4",
"gnome-shell": "gnome-shell",
"nixpkgs": [ "nixpkgs": [
"zjstatus",
"nixpkgs" "nixpkgs"
], ]
"nur": "nur_2",
"systems": "systems_3",
"tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty",
"tinted-schemes": "tinted-schemes",
"tinted-tmux": "tinted-tmux",
"tinted-zed": "tinted-zed"
}, },
"locked": { "locked": {
"lastModified": 1769471853, "lastModified": 1765939271,
"narHash": "sha256-aqs0HkV2T/7Syf/pYLRVSwfk23PPAyGJmWT43U5ZSF4=", "narHash": "sha256-7F/d+ZrTYyOxnBZcleQZjOOEWc1IMXR/CLLRLLsVtHo=",
"owner": "nix-community", "owner": "oxalica",
"repo": "stylix", "repo": "rust-overlay",
"rev": "805fa4262a21ada28cc918fa014359b9b35caea7", "rev": "8028944c1339469124639da276d403d8ab7929a8",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "oxalica",
"repo": "stylix", "repo": "rust-overlay",
"type": "github" "type": "github"
} }
}, },
"secrets": {
"flake": false,
"locked": {
"path": "./secrets",
"type": "path"
},
"original": {
"path": "./secrets",
"type": "path"
},
"parent": []
},
"systems": { "systems": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
@@ -740,6 +682,21 @@
} }
}, },
"systems_3": { "systems_3": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"systems_4": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@@ -754,87 +711,6 @@
"type": "github" "type": "github"
} }
}, },
"tinted-foot": {
"flake": false,
"locked": {
"lastModified": 1726913040,
"narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=",
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
"type": "github"
}
},
"tinted-kitty": {
"flake": false,
"locked": {
"lastModified": 1735730497,
"narHash": "sha256-4KtB+FiUzIeK/4aHCKce3V9HwRvYaxX+F1edUrfgzb8=",
"owner": "tinted-theming",
"repo": "tinted-kitty",
"rev": "de6f888497f2c6b2279361bfc790f164bfd0f3fa",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-kitty",
"type": "github"
}
},
"tinted-schemes": {
"flake": false,
"locked": {
"lastModified": 1767710407,
"narHash": "sha256-+W1EB79Jl0/gm4JqmO0Nuc5C7hRdp4vfsV/VdzI+des=",
"owner": "tinted-theming",
"repo": "schemes",
"rev": "2800e2b8ac90f678d7e4acebe4fa253f602e05b2",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "schemes",
"type": "github"
}
},
"tinted-tmux": {
"flake": false,
"locked": {
"lastModified": 1767489635,
"narHash": "sha256-e6nnFnWXKBCJjCv4QG4bbcouJ6y3yeT70V9MofL32lU=",
"owner": "tinted-theming",
"repo": "tinted-tmux",
"rev": "3c32729ccae99be44fe8a125d20be06f8d7d8184",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-tmux",
"type": "github"
}
},
"tinted-zed": {
"flake": false,
"locked": {
"lastModified": 1767488740,
"narHash": "sha256-wVOj0qyil8m+ouSsVZcNjl5ZR+1GdOOAooAatQXHbuU=",
"owner": "tinted-theming",
"repo": "base16-zed",
"rev": "11abb0b282ad3786a2aae088d3a01c60916f2e40",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-zed",
"type": "github"
}
},
"treefmt-nix": { "treefmt-nix": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -856,6 +732,28 @@
"type": "github" "type": "github"
} }
}, },
"treefmt-nix_2": {
"inputs": {
"nixpkgs": [
"noctalia",
"noctalia-qs",
"nixpkgs"
]
},
"locked": {
"lastModified": 1773297127,
"narHash": "sha256-6E/yhXP7Oy/NbXtf1ktzmU8SdVqJQ09HC/48ebEGBpk=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "71b125cd05fbfd78cab3e070b73544abe24c5016",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"xwayland-satellite-stable": { "xwayland-satellite-stable": {
"flake": false, "flake": false,
"locked": { "locked": {
@@ -876,11 +774,11 @@
"xwayland-satellite-unstable": { "xwayland-satellite-unstable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1770583271, "lastModified": 1773622265,
"narHash": "sha256-Q75S8cEqJoZ92s1y4zArvk2U1ayAy2E4SaF7gbNXkYQ=", "narHash": "sha256-wToKwH7IgWdGLMSIWksEDs4eumR6UbbsuPQ42r0oTXQ=",
"owner": "Supreeeme", "owner": "Supreeeme",
"repo": "xwayland-satellite", "repo": "xwayland-satellite",
"rev": "86f5bd5d867ad6e120935dfe825f6b903ebbeddd", "rev": "a879e5e0896a326adc79c474bf457b8b99011027",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -899,11 +797,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1769491693, "lastModified": 1775744672,
"narHash": "sha256-bbqeCDML1yXI6kpy8q8BshKRV1szk3xV0StAbzw4Z+o=", "narHash": "sha256-Qg3Wnn3WYiiii35CE9kE+XX4ooSFzupAnGC1/NjI5C8=",
"owner": "0xc000022070", "owner": "0xc000022070",
"repo": "zen-browser-flake", "repo": "zen-browser-flake",
"rev": "708e0f10aba5de7d0f55883d06fa08aa6a7cd462", "rev": "14a238beb0621977e9bf04cba68919d5650deea9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -911,6 +809,27 @@
"repo": "zen-browser-flake", "repo": "zen-browser-flake",
"type": "github" "type": "github"
} }
},
"zjstatus": {
"inputs": {
"crane": "crane",
"flake-utils": "flake-utils_2",
"nixpkgs": "nixpkgs_3",
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1773119656,
"narHash": "sha256-AE6SthrvDyUU70myW7wAq4mzQbtmK5Spng7Y/OdCdhI=",
"owner": "dj95",
"repo": "zjstatus",
"rev": "e80d508ffbff6ab6b39a481ae9986109d3c313ac",
"type": "github"
},
"original": {
"owner": "dj95",
"repo": "zjstatus",
"type": "github"
}
} }
}, },
"root": "root", "root": "root",

View File

@@ -4,6 +4,9 @@
inputs = { inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-parts.url = "github:hercules-ci/flake-parts";
import-tree.url = "github:vic/import-tree";
nixos-hardware.url = "github:NixOS/nixos-hardware"; nixos-hardware.url = "github:NixOS/nixos-hardware";
home-manager = { home-manager = {
@@ -11,11 +14,6 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
nur = {
url = "github:nix-community/NUR";
inputs.nixpkgs.follows = "nixpkgs";
};
agenix = { agenix = {
url = "github:ryantm/agenix"; url = "github:ryantm/agenix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
@@ -26,24 +24,36 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
nvf = { nur = {
url = "github:notashelf/nvf"; url = "github:nix-community/NUR";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
stylix = { # nvf = {
url = "github:nix-community/stylix"; # url = "github:notashelf/nvf";
inputs.nixpkgs.follows = "nixpkgs"; # inputs.nixpkgs.follows = "nixpkgs";
}; # };
noctalia = { noctalia = {
url = "github:noctalia-dev/noctalia-shell"; url = "github:noctalia-dev/noctalia-shell";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
niri-blur = {
url = "github:niri-wm/niri/wip/branch";
flake = false;
};
niri = { niri = {
url = "github:sodiboo/niri-flake"; url = "github:sodiboo/niri-flake";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
inputs.niri-unstable.follows = "niri-blur";
};
monique.url = "github:ToRvaLDz/monique";
zjstatus = {
url = "github:dj95/zjstatus";
}; };
zen-browser = { zen-browser = {
@@ -56,28 +66,22 @@
}; };
nix-jmu-cs345.url = "github:Eclypsed/nix-jmu-cs345"; nix-jmu-cs345.url = "github:Eclypsed/nix-jmu-cs345";
assets = {
flake = false;
url = "path:./assets";
}; };
outputs = packages = {
{ flake = false;
self, url = "path:./packages";
nixpkgs,
agenix-rekey,
...
}@inputs:
{
nixosConfigurations.vanta = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit inputs; };
modules = [
./modules/system
./hosts/vanta
];
}; };
agenix-rekey = agenix-rekey.configure { secrets = {
userFlake = self; flake = false;
nixosConfigurations = self.nixosConfigurations; url = "path:./secrets";
}; };
}; };
outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } (inputs.import-tree ./modules);
} }

View File

@@ -1,21 +0,0 @@
{
lib,
...
}:
{
options.host = {
name = lib.mkOption {
type = lib.types.str;
description = "Logical host name";
};
# Host public SSH key (e.g. /etc/ssh/ssh_host_ed25519_key.pub).
# We only set the hostPubkey if one is supplied. For new hosts the pub key will not
# exist until it is generated after the first rebuild.
pubKey = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = "The public key of the host. Will be null until generated on first rebuild";
};
};
}

View File

@@ -1,17 +0,0 @@
{
inputs,
...
}:
{
imports = [
inputs.nixos-hardware.nixosModules.framework-12th-gen-intel
./hardware-configuration.nix
../../profiles/intel.nix
../hosts.nix
];
host = {
name = "vanta";
pubKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAaDVBJdMDFL8r9NQCbaLe+DPHGhGzRv2N7+7m1/U8DP";
};
}

View File

@@ -1,40 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "nvme" "usbhid" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/1df00fd1-f531-49b9-9dc6-6d17ca39b67a";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/EE0E-CAE4";
fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ];
};
swapDevices =
[ { device = "/dev/disk/by-uuid/fbacd982-b161-447c-a34a-7b44bc063a08"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp166s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View File

@@ -0,0 +1,51 @@
{
inputs,
...
}:
{
imports = [
inputs.agenix-rekey.flakeModule
];
perSystem =
{ config, pkgs, ... }:
{
devShells.default = pkgs.mkShell {
packages = [ config.agenix-rekey.package ];
};
agenix-rekey.nixosConfigurations = inputs.self.nixosConfigurations;
};
flake.modules.nixos.agenix =
{
config,
lib,
...
}:
{
imports = [
inputs.agenix.nixosModules.default
inputs.agenix-rekey.nixosModules.default
];
services.openssh.generateHostKeys = true;
age = {
# Need to explicitly set identity paths because OpenSSH daemon is disabled
# but the host keys are still generated via services.openssh.generateHostKeys = true
identityPaths = map (key: key.path) config.services.openssh.hostKeys;
rekey = {
masterIdentities = [ (inputs.secrets + "/age-yubikey-identity-d9ed335b.pub") ];
storageMode = "local";
localStorageDir = inputs.secrets + "/rekeyed/${config.networking.hostName}";
}
# We only set the hostPubkey if one is supplied. For new hosts the pub key will not
# exist until it is generated after the first rebuild. Runtime decryption will fail
# but then the ssh host key will be generated in /etc/ssh and can be supplied
// lib.optionalAttrs (config.hostPubkey != null) {
hostPubkey = config.hostPubkey;
};
};
};
}

View File

@@ -0,0 +1,29 @@
{
flake.modules.homeManager.assets =
{ config, lib, ... }:
{
options = {
profilePicture = lib.mkOption {
type = lib.types.path;
default = null;
description = "The user's profile picture, to be used as ~/.face";
};
wallpaperDir = lib.mkOption {
type = lib.types.path;
default = null;
description = "The path to a directory containing wallpapers to being linked to XDG_WALLPAPERS_DIR";
};
};
config.xdg.userDirs.extraConfig.WALLPAPERS = "${config.xdg.userDirs.pictures}/Wallpapers";
config.home.file.".face".source = lib.mkIf (config.profilePicture != null) config.profilePicture;
config.home.file."${config.xdg.userDirs.extraConfig.WALLPAPERS}" =
lib.mkIf (config.wallpaperDir != null)
{
source = config.wallpaperDir;
recursive = true;
};
};
}

20
modules/features/bat.nix Normal file
View File

@@ -0,0 +1,20 @@
{
flake.modules.homeManager.bat =
{ pkgs, ... }:
{
programs.bat = {
enable = true;
extraPackages = with pkgs.bat-extras; [
batgrep
batman
batpipe
batwatch
batdiff
prettybat
];
config = {
theme = "Catppuccin Mocha";
};
};
};
}

View File

@@ -0,0 +1,10 @@
{
flake.modules.nixos.bluetooth = {
hardware = {
bluetooth = {
enable = true;
powerOnBoot = false;
};
};
};
}

13
modules/features/boot.nix Normal file
View File

@@ -0,0 +1,13 @@
{
flake.modules.nixos.boot = {
boot = {
loader = {
systemd-boot = {
enable = true;
configurationLimit = 10;
};
efi.canTouchEfiVariables = true;
};
};
};
}

View File

@@ -0,0 +1,8 @@
{
flake.modules.homeManager.direnv = {
programs.direnv = {
enable = true;
enableZshIntegration = true;
};
};
}

123
modules/features/eza.nix Normal file
View File

@@ -0,0 +1,123 @@
{
flake.modules.homeManager.eza = {
programs.eza = {
enable = true;
enableZshIntegration = true;
git = true;
icons = "always";
theme = {
colorful = true;
filekinds = {
normal.foreground = "#BAC2DE";
directory.foreground = "#89B4FA";
symlink.foreground = "#89DCEB";
pipe.foreground = "#7F849C";
block_device.foreground = "#EBA0AC";
char_device.foreground = "#EBA0AC";
socket.foreground = "#585B70";
special.foreground = "#CBA6F7";
executable.foreground = "#A6E3A1";
mount_point.foreground = "#74C7EC";
};
perms = {
user_read.foreground = "#CDD6F4";
user_write.foreground = "#F9E2AF";
user_execute_file.foreground = "#A6E3A1";
user_execute_other.foreground = "#A6E3A1";
group_read.foreground = "#BAC2DE";
group_write.foreground = "#F9E2AF";
group_execute.foreground = "#A6E3A1";
other_read.foreground = "#A6ADC8";
other_write.foreground = "#F9E2AF";
other_execute.foreground = "#A6E3A1";
special_user_file.foreground = "#CBA6F7";
special_other.foreground = "#585B70";
attribute.foreground = "#A6ADC8";
};
size = {
major.foreground = "#A6ADC8";
minor.foreground = "#89DCEB";
number_byte.foreground = "#CDD6F4";
number_kilo.foreground = "#BAC2DE";
number_mega.foreground = "#89B4FA";
number_giga.foreground = "#CBA6F7";
number_huge.foreground = "#CBA6F7";
unit_byte.foreground = "#A6ADC8";
unit_kilo.foreground = "#89B4FA";
unit_mega.foreground = "#CBA6F7";
unit_giga.foreground = "#CBA6F7";
unit_huge.foreground = "#74C7EC";
};
users = {
user_you.foreground = "#CDD6F4";
user_root.foreground = "#F38BA8";
user_other.foreground = "#CBA6F7";
group_yours.foreground = "#BAC2DE";
group_other.foreground = "#7F849C";
group_root.foreground = "#F38BA8";
};
links = {
normal.foreground = "#89DCEB";
multi_link_file.foreground = "#74C7EC";
};
git = {
new.foreground = "#A6E3A1";
modified.foreground = "#F9E2AF";
deleted.foreground = "#F38BA8";
renamed.foreground = "#94E2D5";
typechange.foreground = "#F5C2E7";
ignored.foreground = "#7F849C";
conflicted.foreground = "#EBA0AC";
};
git_repo = {
branch_main.foreground = "#CDD6F4";
branch_other.foreground = "#CBA6F7";
git_clean.foreground = "#A6E3A1";
git_dirty.foreground = "#F38BA8";
};
security_context = {
colon.foreground = "#7F849C";
user.foreground = "#BAC2DE";
role.foreground = "#CBA6F7";
typ.foreground = "#585B70";
range.foreground = "#CBA6F7";
};
file_type = {
image.foreground = "#F9E2AF";
video.foreground = "#F38BA8";
music.foreground = "#A6E3A1";
lossless.foreground = "#94E2D5";
crypto.foreground = "#585B70";
document.foreground = "#CDD6F4";
compressed.foreground = "#F5C2E7";
temp.foreground = "#EBA0AC";
compiled.foreground = "#74C7EC";
build.foreground = "#585B70";
source.foreground = "#89B4FA";
};
punctuation.foreground = "#7F849C";
date.foreground = "#F9E2AF";
inode.foreground = "#A6ADC8";
blocks.foreground = "#9399B2";
header.foreground = "#CDD6F4";
octal.foreground = "#94E2D5";
flags.foreground = "#CBA6F7";
symlink_path.foreground = "#89DCEB";
control_char.foreground = "#74C7EC";
broken_symlink.foreground = "#F38BA8";
broken_path_overlay.foreground = "#585B70";
};
};
};
}

View File

@@ -0,0 +1,7 @@
{
flake.modules.homeManager.fastfetch = {
programs.fastfetch = {
enable = true;
};
};
}

View File

@@ -0,0 +1,161 @@
{
flake.modules.homeManager.firefox =
{
config,
pkgs,
lib,
...
}:
{
# This gets around having to run `pywalfox install` manually, which just creates this manifest
home.file.".mozilla/native-messaging-hosts/pywalfox.json".text = builtins.toJSON {
name = "pywalfox";
description = "Automatically theme your browser using the colors generated by Pywal";
path = lib.getExe' pkgs.pywalfox-native "pywalfox";
# path = "${pkgs.pywalfox-native}/bin/pywalfox";
type = "stdio";
allowed_extensions = [ "pywalfox@frewacom.org" ];
};
programs.firefox = {
enable = true;
languagePacks = [ "en-US" ];
nativeMessagingHosts = with pkgs; [
pywalfox-native
];
policies = {
DefaultDownloadDirectory = config.xdg.userDirs.download;
DisableFirefoxAccounts = true;
DisableFirefoxStudies = true;
DisablePocket = true;
DisableProfileImport = true;
DisableProfileRefresh = true;
DisableTelemetry = true;
DisplayBookmarksToolbar = "never";
DontCheckDefaultBrowser = true;
EnableTrackingProtection = {
Value = true; # Tracking protection is enabled by default in both the regular browser and private browsing
Locked = true; # Whether or not a user can change tracking protection
Cryptomining = true; # Block cryptomining scripts
Fingerprinting = true; # Block fingerprinting scripts
EmailTracking = true; # Block email tracking pixels and scripts
};
FirefoxHome = {
Search = true;
TopSites = true;
SponsoredTopSites = false;
Highlights = false;
Pocket = false;
Stories = false;
SponsoredPocket = false;
SponsoredStories = false;
Snippets = true;
Locked = true;
};
FirefoxSuggest = {
WebSuggestions = true;
SponsoredSuggestions = false;
ImproveSuggest = false;
Locked = true;
};
Homepage = {
URL = "http://100.78.212.35:30054";
Locked = true;
StartPage = "homepage";
};
OfferToSaveLogins = false;
OverrideFirstRunPage = "";
PasswordManagerEnabled = false;
PopupBlocking = {
Default = false;
Locked = true;
};
PrimaryPassword = false;
SearchBar = "unified";
ShowHomeButton = true;
SkipTermsOfUse = true;
};
profiles.eclypse = {
name = "Eclypse";
isDefault = true;
extensions = {
force = true;
# For a list of available packaged extensions, see:
# https://github.com/nix-community/nur-combined/blob/main/repos/rycee/pkgs/firefox-addons/addons.json
packages = with pkgs.nur.repos.rycee.firefox-addons; [
ublock-origin
bitwarden
pywalfox
];
settings = {
"uBlock0@raymondhill.net".settings = {
selectedFilterLists = [
"ublock-filters"
"ublock-badware"
"ublock-privacy"
"ublock-unbreak"
"ublock-quick-fixes"
];
};
};
};
search = {
default = "google";
force = true;
engines = {
nix-packages = {
name = "Nix Packages";
urls = [
{
template = "https://search.nixos.org/packages";
params = [
{
name = "channel";
value = "unstable";
}
{
name = "query";
value = "{searchTerms}";
}
];
}
];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@np" ];
};
home-manager = {
name = "Home Manager";
urls = [
{
template = "https://home-manager-options.extranix.com";
params = [
{
name = "query";
value = "{searchTerms}";
}
];
}
];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@hm" ];
};
surugaya = {
name = "Surugaya";
urls = [
{
template = "https://www.suruga-ya.jp/search?search_word={searchTerms}";
}
];
iconMapObj."16" = "https://www.suruga-ya.jp/drupal/themes/surugaya/favicon.ico";
definedAliases = [ "@suru" ];
};
};
};
settings = {
# Auto-enable extensions
"extensions.autoDisableScopes" = 0;
};
};
};
};
}

View File

@@ -0,0 +1,7 @@
{
flake.modules.nixos.firmware = {
services.fwupd = {
enable = true;
};
};
}

View File

@@ -0,0 +1,36 @@
{
flake.modules.nixos.fonts =
{ pkgs, ... }:
{
fonts = {
packages = with pkgs; [
# Maple Mono
maple-mono.truetype
maple-mono.NF-unhinted
maple-mono.NF-CN-unhinted
# JetBrains Mono
nerd-fonts.jetbrains-mono
# Noto
noto-fonts
noto-fonts-cjk-sans
noto-fonts-color-emoji
];
};
};
flake.modules.homeManager.fonts = {
fonts.fontconfig = {
enable = true;
defaultFonts = {
sansSerif = [ "Noto Sans" ];
monospace = [
"Maple Mono"
"JetBrainsMono Nerd Font"
];
emoji = [ "Noto Color Emoji" ];
};
};
};
}

22
modules/features/foot.nix Normal file
View File

@@ -0,0 +1,22 @@
{
flake.modules.homeManager.foot =
{ config, ... }:
{
programs.foot = {
enable = true;
server.enable = false;
settings = {
main = {
term = "xterm-256color";
include = "${config.xdg.configHome}/foot/themes/noctalia";
dpi-aware = "no";
font = "${builtins.head config.fonts.fontconfig.defaultFonts.monospace}:size=12";
pad = "10x10";
};
mouse = {
hide-when-typing = "yes";
};
};
};
};
}

View File

@@ -0,0 +1,5 @@
{
flake.modules.nixos.fprintd = {
services.fprintd.enable = true;
};
}

8
modules/features/fzf.nix Normal file
View File

@@ -0,0 +1,8 @@
{
flake.modules.homeManager.fzf = {
programs.fzf = {
enable = true;
enableZshIntegration = true;
};
};
}

10
modules/features/gdm.nix Normal file
View File

@@ -0,0 +1,10 @@
{
flake.modules.nixos.gdm = {
services.displayManager = {
gdm = {
enable = true;
wayland = true;
};
};
};
}

43
modules/features/git.nix Normal file
View File

@@ -0,0 +1,43 @@
{
flake.modules.homeManager.git =
{
pkgs,
config,
...
}:
let
name = "Eclypsed";
email = "Ec1ypsed@proton.me";
signingKey = "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIB2h6y1Al2OVotYIpwPZMjiBLAncAI2pAPgES2+gVbJqAAAABHNzaDo= ssh:";
in
{
home.packages = with pkgs; [ git-ignore ];
xdg.configFile."git/allowed_signers".text = ''
${email} namespaces="git" ${signingKey}
'';
programs = {
git = {
enable = true;
settings = {
user = { inherit name email; };
init = {
defaultBranch = "main";
};
gpg.ssh.allowedSignersFile = "${config.xdg.configHome}/git/allowed_signers";
};
signing = {
format = "ssh";
key = "${config.home.homeDirectory}/.ssh/id_ed25519_sk_rk.pub";
signByDefault = true;
};
};
lazygit = {
enable = true;
enableZshIntegration = true;
shellWrapperName = "lg";
};
};
};
}

362
modules/features/helix.nix Normal file
View File

@@ -0,0 +1,362 @@
{
flake.modules.homeManager.helix =
{
pkgs,
...
}:
let
yazi-picker = pkgs.writeShellApplication {
name = "yazi-picker";
text = ''
paths=$(yazi --chooser-file=/dev/stdout)
if [[ -n "$paths" ]]; then
zellij action toggle-floating-panes
zellij action write 27 # send <Escape> key
zellij action write-chars ":$1 $paths"
zellij action write 13 # send <Enter> key
else
zellij action toggle-floating-panes
fi
'';
};
in
{
home.packages = [ yazi-picker ];
programs.helix = {
enable = true;
defaultEditor = true;
extraPackages = with pkgs; [
basedpyright # Python static type checker
ruff # Pyhton linter and formatter
nixd # Nix language server
nixfmt # Nix formatter
rust-analyzer # Rust language server
rustfmt # Rust formmater
clippy # Rust linter
lldb # Debugger for llvm languages
marksman # Markdown language server
markdown-oxide # Markdown PKM language server
rumdl # Markdown linter and formatter
libclang # C language family frontend for LLVM
typescript-language-server # Typescript language server
vscode-langservers-extracted # HTML/CSS/JSON/ESLint language servers extracted from vscode
emmet-language-server # Emmet support based on LSP
prettier # Formatter for HTML/CSS/JSON/ESLint languages
superhtml # HTML Language server and Templating Language Library
ruby-lsp # Ruby language server
solargraph # Alternative ruby language server
rubocop # Ruby linter and formatter
jdt-language-server # Java language server
];
settings = {
editor = {
line-number = "relative";
cursorline = true;
auto-format = true;
completion-timeout = 5;
completion-trigger-len = 1;
bufferline = "always";
color-modes = true;
end-of-line-diagnostics = "hint";
lsp = {
display-inlay-hints = true;
};
cursor-shape = {
insert = "bar";
normal = "block";
select = "underline";
};
indent-guides = {
render = true;
skip-levels = 1;
};
soft-wrap = {
enable = true;
max-indent-retain = 80;
};
inline-diagnostics = {
cursor-line = "warning";
};
};
keys =
let
arrow_keys = {
"up" = "jump_view_up";
"down" = "jump_view_down";
"left" = "jump_view_left";
"right" = "jump_view_right";
};
in
{
normal = {
"C-y" =
":sh zellij run -n Yazi -c -f -x 10%% -y 10%% --width 80%% --height 80%% -- yazi-picker open %{buffer_name}";
}
// arrow_keys;
insert = {
"C-k" = "move_visual_line_up";
"C-j" = "move_visual_line_down";
"C-h" = "move_char_left";
"C-l" = "move_char_right";
}
// arrow_keys;
select = { } // arrow_keys;
};
theme = "catppuccin_mocha";
};
# Check https://github.com/helix-editor/helix/blob/master/languages.toml for default language configuration
# Only explictly set options you want to override / make explicit
languages = {
language = [
{
name = "python";
language-servers = [
"basedpyright"
"ruff"
];
auto-format = true;
formatter = {
command = "ruff";
args = [
"format"
"-"
];
};
}
{
name = "nix";
language-servers = [ "nixd" ];
auto-format = true;
formatter = {
command = "nixfmt";
};
}
{
name = "rust";
auto-format = true;
formatter = {
command = "rustfmt";
};
}
{
name = "markdown";
auto-format = true;
formatter = {
command = "rumdl";
args = [
"fmt"
"-"
];
};
}
{
name = "c";
file-types = [
"c"
"h"
]; # "h" is currently missing from the default config
auto-format = true;
formatter = {
command = "clang-format";
args = [
"--style=WebKit"
];
};
}
{
name = "typescript";
language-servers = [
"typescript-language-server"
"vscode-eslint-language-server"
"emmet-language-server"
];
auto-format = true;
formatter = {
command = "prettier";
args = [
"--parser"
"typescript"
];
};
}
{
name = "tsx";
language-servers = [
"typescript-language-server"
"vscode-eslint-language-server"
"emmet-language-server"
];
auto-format = true;
formatter = {
command = "prettier";
args = [
"--parser"
"typescript"
];
};
}
{
name = "javascript";
language-servers = [
"typescript-language-server"
"vscode-eslint-language-server"
"emmet-language-server"
];
auto-format = true;
formatter = {
command = "prettier";
args = [
"--parser"
"typescript"
];
};
}
{
name = "jsx";
language-servers = [
"typescript-language-server"
"vscode-eslint-language-server"
"emmet-language-server"
];
auto-format = true;
formatter = {
command = "prettier";
args = [
"--parser"
"typescript"
];
};
}
{
name = "json";
auto-format = true;
formatter = {
command = "prettier";
args = [
"--parser"
"json"
];
};
}
{
name = "jsonc";
auto-format = true;
formatter = {
command = "prettier";
args = [
"--parser"
"jsonc"
];
};
}
{
name = "html";
language-servers = [
"vscode-html-language-server"
{
name = "superhtml";
except-features = [ "format" ];
}
"emmet-language-server"
];
auto-format = true;
formatter = {
command = "prettier";
args = [
"--parser"
"html"
];
};
}
{
name = "css";
language-servers = [
"vscode-css-language-server"
"emmet-language-server"
];
auto-format = true;
formatter = {
command = "prettier";
args = [
"--parser"
"css"
];
};
}
{
name = "scss";
language-servers = [
"vscode-css-language-server"
"emmet-language-server"
];
auto-format = true;
formatter = {
command = "prettier";
args = [
"--parser"
"scss"
];
};
}
{
name = "ruby";
language-servers = [
"ruby-lsp"
"solargraph"
];
auto-format = true;
formatter = {
command = "rubocop";
args = [
"--stdin"
"placeholder.rb"
"-a"
"--stderr"
"--fail-level"
"fatal"
];
};
}
];
language-server = {
basedpyright.config.python.analysis.typeCheckingMode = "strict";
rust-analyzer.config.check.command = "clippy";
emmet-language-server = {
command = "emmet-language-server";
args = [ "--stdio" ];
};
vscode-eslint-language-server = {
config = {
# Automatically fix ESLint errors
codeActionsOnSave = {
mode = "all";
"source.fixAll.eslint" = true;
};
quiet = false;
experimental = {
# Support for the modern ESLint configuration format
useFlatConfig = true;
};
};
};
ruby-lsp = {
command = "ruby-lsp";
config = {
diagnostics = true;
formatting = true;
};
};
solargraph = {
command = "solargraph";
config = {
diagnostics = true;
formatting = false;
};
};
};
};
};
};
}

View File

@@ -0,0 +1,38 @@
{
flake.modules.homeManager.kanshi = {
services.kanshi = {
enable = true;
settings = [
{
profile = {
name = "laptop";
outputs = [
{
criteria = "eDP-1";
status = "enable";
scale = 1.0;
}
];
};
}
{
profile = {
name = "docked";
outputs = [
{
criteria = "eDP-1";
status = "disable";
}
{
criteria = "LG Electronics LG TV SSCR2 *";
mode = "3840x2160@120Hz";
scale = 1.0;
status = "enable";
}
];
};
}
];
};
};
}

View File

@@ -0,0 +1,11 @@
{
inputs,
...
}:
{
flake.modules.nixos.monique = {
imports = [ inputs.monique.nixosModules.default ];
programs.monique.enable = true;
};
}

View File

@@ -0,0 +1,19 @@
{
flake.modules.nixos.network = {
networking = {
# Pick only one of the below networking options.
# wireless.enable = true; # Enables wireless support via wpa_supplicant.
networkmanager.enable = true; # Easiest to use and most distros use this by default.
# Configure network proxy if necessary
# proxy.default = "http://user:password@proxy:port/";
# proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Open ports in the firewall.
# firewall.allowedTCPPorts = [ ... ];
# firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# firewall.enable = false;
};
};
}

644
modules/features/niri.nix Normal file
View File

@@ -0,0 +1,644 @@
{
inputs,
...
}:
{
flake.modules.nixos.niri =
{ pkgs, ... }:
{
imports = [
inputs.niri.nixosModules.niri
];
nixpkgs.overlays = [ inputs.niri.overlays.niri ];
programs = {
niri = {
enable = true;
package = pkgs.niri-unstable;
};
uwsm = {
waylandCompositors.niri = {
prettyName = "Niri";
binPath = "/run/current-system/sw/bin/niri-session";
};
};
};
environment.systemPackages = [ pkgs.xwayland-satellite-unstable ];
};
flake.modules.homeManager.niri =
{
pkgs,
lib,
config,
...
}:
let
# Executables
foot = lib.getExe' config.programs.foot.package "foot";
vicinae = lib.getExe' config.programs.vicinae.package "vicinae";
yazi = lib.getExe' config.programs.yazi.package "yazi";
noctalia-shell = lib.getExe' config.programs.noctalia-shell.package "noctalia-shell";
playerctl = lib.getExe' pkgs.playerctl "playerctl";
wpctl = lib.getExe' pkgs.wireplumber "wpctl";
brightnessctl = lib.getExe' pkgs.brightnessctl "brightnessctl";
in
{
home.packages = [
pkgs.nautilus
];
xdg.portal = {
enable = true;
configPackages = [ pkgs.gnome-session ];
extraPortals = with pkgs; [
xdg-desktop-portal-gnome
xdg-desktop-portal-gtk
];
};
xdg.configFile."niri/config.kdl".text = ''
input {
keyboard {
xkb {
layout "us"
model ""
rules ""
variant ""
options "compose:ralt"
}
repeat-delay 400
repeat-rate 35
track-layout "global"
}
touchpad {
tap
dwt
drag true
drag-lock
scroll-method "two-finger"
click-method "clickfinger"
tap-button-map "left-right-middle"
}
warp-mouse-to-focus mode="center-xy-always"
focus-follows-mouse
mod-key "Super"
}
screenshot-path "${config.xdg.userDirs.extraConfig.SCREENSHOTS}/%Y%m%d-%H%M%S.png"
prefer-no-csd
layout {
gaps 16
struts {
left 0
right 0
top 0
bottom 0
}
focus-ring { width 4; }
border { off; }
default-column-width
center-focused-column "never"
}
cursor {
xcursor-theme "${config.home.pointerCursor.name}"
xcursor-size ${toString config.home.pointerCursor.size}
hide-when-typing
}
hotkey-overlay { skip-at-startup; }
environment { "NIXOS_OZONE_WL" "1"; }
binds {
Alt+XF86AudioLowerVolume allow-when-locked=true hotkey-overlay-title="Lower microphone volume" { spawn "${wpctl}" "set-volume" "@DEFAULT_AUDIO_SOURCE@" "0.05-"; }
Alt+XF86AudioMute allow-when-locked=true hotkey-overlay-title="Mute microphone" repeat=false { spawn "${wpctl}" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
Alt+XF86AudioRaiseVolume allow-when-locked=true hotkey-overlay-title="Raise microphone volume" { spawn "${wpctl}" "set-volume" "@DEFAULT_AUDIO_SOURCE@" "0.05+"; }
Mod+A hotkey-overlay-title="Launcher" repeat=false { spawn "${vicinae}" "toggle"; }
Mod+BracketLeft hotkey-overlay-title="Move window left" repeat=false { consume-or-expel-window-left; }
Mod+BracketRight hotkey-overlay-title="Move window right" repeat=false { consume-or-expel-window-right; }
Mod+Ctrl+0 hotkey-overlay-title="Reset display scale" { spawn "output-scale" "1.0"; }
Mod+Ctrl+Equal hotkey-overlay-title="Increase display scale" { spawn "output-scale" "+0.1"; }
Mod+Ctrl+F hotkey-overlay-title="Fill empty column space" repeat=false { expand-column-to-available-width; }
Mod+Ctrl+J hotkey-overlay-title="Focus workspace down" repeat=false { focus-workspace-down; }
Mod+Ctrl+K hotkey-overlay-title="Focus workspace up" repeat=false { focus-workspace-up; }
Mod+Ctrl+Minus hotkey-overlay-title="Decrease display scale" { spawn "output-scale" "-0.1"; }
Mod+Ctrl+N hotkey-overlay-title="Clear notifications" repeat=false { spawn "${noctalia-shell}" "ipc" "call" "notifications" "clear"; }
Mod+Ctrl+Shift+J hotkey-overlay-title="Move column to workspace down" repeat=false { move-column-to-workspace-down; }
Mod+Ctrl+Shift+K hotkey-overlay-title="Move column to workspace up" repeat=false { move-column-to-workspace-up; }
Mod+E hotkey-overlay-title="File Explorer" repeat=false { spawn "${foot}" "-e" "${yazi}"; }
Mod+Equal hotkey-overlay-title="Increase column width" { set-column-width "+10%"; }
Mod+Escape hotkey-overlay-title="Session menu" repeat=false { spawn "${noctalia-shell}" "ipc" "call" "sessionMenu" "toggle"; }
Mod+F hotkey-overlay-title="Maximize Column" repeat=false { maximize-column; }
Mod+H hotkey-overlay-title="Focus window left" repeat=false { focus-column-or-monitor-left; }
Mod+J hotkey-overlay-title="Focus window down" repeat=false { focus-window-or-monitor-down; }
Mod+K hotkey-overlay-title="Focus window up" repeat=false { focus-window-or-monitor-up; }
Mod+L hotkey-overlay-title="Focus window right" repeat=false { focus-column-or-monitor-right; }
Mod+Minus hotkey-overlay-title="Decrease column width" { set-column-width "-10%"; }
Mod+N hotkey-overlay-title="Show notifications" repeat=false { spawn "${noctalia-shell}" "ipc" "call" "notifications" "toggleHistory"; }
Mod+Print hotkey-overlay-title="Screenshot window" repeat=false { screenshot-window; }
Mod+Q hotkey-overlay-title="Close window" repeat=false { close-window; }
Mod+Shift+Equal hotkey-overlay-title="Increase window height" { set-window-height "+10%"; }
Mod+Shift+F hotkey-overlay-title="Fullscreen" repeat=false { fullscreen-window; }
Mod+Shift+H hotkey-overlay-title="Move column left" repeat=false { move-column-left-or-to-monitor-left; }
Mod+Shift+J hotkey-overlay-title="Move column down" repeat=false { move-column-to-monitor-down; }
Mod+Shift+K hotkey-overlay-title="Move column up" repeat=false { move-column-to-monitor-up; }
Mod+Shift+L hotkey-overlay-title="Move column right" repeat=false { move-column-right-or-to-monitor-right; }
Mod+Shift+Minus hotkey-overlay-title="Decrease window height" { set-window-height "-10%"; }
Mod+Slash hotkey-overlay-title="Show hotkeys" repeat=false { show-hotkey-overlay; }
Mod+T hotkey-overlay-title="Toggle tabbed column" repeat=false { toggle-column-tabbed-display; }
Mod+Tab hotkey-overlay-title="Toggle overview" repeat=false { toggle-overview; }
Mod+W hotkey-overlay-title="Terminal" repeat=false { spawn "${foot}"; }
Mod+Z hotkey-overlay-title="Toggle floating" repeat=false { toggle-window-floating; }
Print hotkey-overlay-title="Screenshot" repeat=false { screenshot show-pointer=false; }
Shift+Print hotkey-overlay-title="Screenshot screen" repeat=false { screenshot-screen show-pointer=false; }
XF86AudioLowerVolume allow-when-locked=true hotkey-overlay-title="Lower volume" { spawn "${wpctl}" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.05-"; }
XF86AudioMute allow-when-locked=true hotkey-overlay-title="Mute playback" repeat=false { spawn "${wpctl}" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
XF86AudioNext hotkey-overlay-title="Next track" repeat=false { spawn "${playerctl}" "next"; }
XF86AudioPlay hotkey-overlay-title="Play / pause track" repeat=false { spawn "${playerctl}" "play-pause"; }
XF86AudioPrev hotkey-overlay-title="Previous track" repeat=false { spawn "${playerctl}" "previous"; }
XF86AudioRaiseVolume allow-when-locked=true hotkey-overlay-title="Raise volume" { spawn "${wpctl}" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.05+"; }
XF86MonBrightnessDown allow-when-locked=true hotkey-overlay-title="Decrease brightness" { spawn "${brightnessctl}" "set" "5%-"; }
XF86MonBrightnessUp allow-when-locked=true hotkey-overlay-title="Increase brightness" { spawn "${brightnessctl}" "set" "5%+"; }
}
spawn-at-startup "noctalia-shell"
blur {
passes 2
offset 4.0
}
window-rule {
geometry-corner-radius 10.000000 10.000000 10.000000 10.000000
clip-to-geometry true
}
window-rule {
match app-id="foot"
match app-id="Alacritty"
default-column-width { proportion 0.400000; }
opacity 0.870000
background-effect {
blur true
}
}
layer-rule {
match namespace="^noctalia-overview*"
place-within-backdrop true
}
gestures { hot-corners { off; }; }
xwayland-satellite { path "${lib.getExe pkgs.xwayland-satellite-unstable}"; }
'';
# settings = {
# input = {
# keyboard = {
# xkb = {
# layout = "us";
# options = "compose:ralt";
# };
# };
# touchpad = {
# enable = true;
# click-method = "clickfinger";
# drag = true;
# drag-lock = true;
# dwt = true;
# natural-scroll = false;
# scroll-method = "two-finger";
# tap = true;
# tap-button-map = "left-right-middle"; # Mouse button click to register when tapping with 1, 2, or 3 fingers
# };
# warp-mouse-to-focus = {
# enable = true;
# mode = "center-xy-always";
# };
# focus-follows-mouse = {
# enable = true;
# };
# mod-key = "Super";
# };
# binds = {
# # General
# "Mod+Slash" = {
# action.show-hotkey-overlay = { };
# repeat = false;
# hotkey-overlay.title = "Show hotkeys";
# };
# "Mod+Q" = {
# action.close-window = { };
# repeat = false;
# hotkey-overlay.title = "Close window";
# };
# "Mod+W" = {
# action.spawn = foot;
# repeat = false;
# hotkey-overlay.title = "Terminal";
# };
# "Mod+A" = {
# action.spawn = [
# vicinae
# "toggle"
# ];
# repeat = false;
# hotkey-overlay.title = "Launcher";
# };
# "Mod+E" = {
# action.spawn = [
# foot
# "-e"
# yazi
# ];
# repeat = false;
# hotkey-overlay.title = "File Explorer";
# };
# "Mod+Escape" = {
# action.spawn = [
# noctalia-shell
# "ipc"
# "call"
# "sessionMenu"
# "toggle"
# ];
# repeat = false;
# hotkey-overlay.title = "Session menu";
# };
# # Notifications
# "Mod+N" = {
# action.spawn = [
# noctalia-shell
# "ipc"
# "call"
# "notifications"
# "toggleHistory"
# ];
# repeat = false;
# hotkey-overlay.title = "Show notifications";
# };
# "Mod+Ctrl+N" = {
# action.spawn = [
# noctalia-shell
# "ipc"
# "call"
# "notifications"
# "clear"
# ];
# repeat = false;
# hotkey-overlay.title = "Clear notifications";
# };
# # Media keys
# "XF86AudioPrev" = {
# action.spawn = [
# playerctl
# "previous"
# ];
# repeat = false;
# hotkey-overlay.title = "Previous track";
# };
# "XF86AudioPlay" = {
# action.spawn = [
# playerctl
# "play-pause"
# ];
# repeat = false;
# hotkey-overlay.title = "Play / pause track";
# };
# "XF86AudioNext" = {
# action.spawn = [
# playerctl
# "next"
# ];
# repeat = false;
# hotkey-overlay.title = "Next track";
# };
# "XF86AudioRaiseVolume" = {
# action.spawn = [
# wpctl
# "set-volume"
# "@DEFAULT_AUDIO_SINK@"
# "0.05+"
# ];
# repeat = true;
# allow-when-locked = true;
# hotkey-overlay.title = "Raise volume";
# };
# "XF86AudioLowerVolume" = {
# action.spawn = [
# wpctl
# "set-volume"
# "@DEFAULT_AUDIO_SINK@"
# "0.05-"
# ];
# repeat = true;
# allow-when-locked = true;
# hotkey-overlay.title = "Lower volume";
# };
# "XF86AudioMute" = {
# action.spawn = [
# wpctl
# "set-mute"
# "@DEFAULT_AUDIO_SINK@"
# "toggle"
# ];
# repeat = false;
# allow-when-locked = true;
# hotkey-overlay.title = "Mute playback";
# };
# "Alt+XF86AudioRaiseVolume" = {
# action.spawn = [
# wpctl
# "set-volume"
# "@DEFAULT_AUDIO_SOURCE@"
# "0.05+"
# ];
# repeat = true;
# allow-when-locked = true;
# hotkey-overlay.title = "Raise microphone volume";
# };
# "Alt+XF86AudioLowerVolume" = {
# action.spawn = [
# wpctl
# "set-volume"
# "@DEFAULT_AUDIO_SOURCE@"
# "0.05-"
# ];
# repeat = true;
# allow-when-locked = true;
# hotkey-overlay.title = "Lower microphone volume";
# };
# "Alt+XF86AudioMute" = {
# action.spawn = [
# wpctl
# "set-mute"
# "@DEFAULT_AUDIO_SOURCE@"
# "toggle"
# ];
# repeat = false;
# allow-when-locked = true;
# hotkey-overlay.title = "Mute microphone";
# };
# # Brightness
# "XF86MonBrightnessUp" = {
# action.spawn = [
# brightnessctl
# "set"
# "5%+"
# ];
# repeat = true;
# allow-when-locked = true;
# hotkey-overlay.title = "Increase brightness";
# };
# "XF86MonBrightnessDown" = {
# action.spawn = [
# brightnessctl
# "set"
# "5%-"
# ];
# repeat = true;
# allow-when-locked = true;
# hotkey-overlay.title = "Decrease brightness";
# };
# # Screen capture
# "Print" = {
# action.screenshot = {
# show-pointer = false;
# };
# repeat = false;
# hotkey-overlay.title = "Screenshot";
# };
# "Mod+Print" = {
# action.screenshot-window = {
# # show-pointer = false;
# };
# repeat = false;
# hotkey-overlay.title = "Screenshot window";
# };
# "Shift+Print" = {
# action.screenshot-screen = {
# show-pointer = false;
# };
# repeat = false;
# hotkey-overlay.title = "Screenshot screen";
# };
# # Display scaling
# "Mod+Ctrl+Equal" = {
# action.spawn = [
# "output-scale"
# "+0.1"
# ];
# repeat = true;
# hotkey-overlay.title = "Increase display scale";
# };
# "Mod+Ctrl+Minus" = {
# action.spawn = [
# "output-scale"
# "-0.1"
# ];
# repeat = true;
# hotkey-overlay.title = "Decrease display scale";
# };
# "Mod+Ctrl+0" = {
# action.spawn = [
# "output-scale"
# "1.0"
# ];
# repeat = true;
# hotkey-overlay.title = "Reset display scale";
# };
# # Window and column size
# "Mod+F" = {
# action.maximize-column = { };
# repeat = false;
# hotkey-overlay.title = "Maximize Column";
# };
# "Mod+Shift+F" = {
# action.fullscreen-window = { };
# repeat = false;
# hotkey-overlay.title = "Fullscreen";
# };
# "Mod+Ctrl+F" = {
# action.expand-column-to-available-width = { };
# repeat = false;
# hotkey-overlay.title = "Fill empty column space";
# };
# "Mod+Equal" = {
# action.set-column-width = "+10%";
# repeat = true;
# hotkey-overlay.title = "Increase column width";
# };
# "Mod+Minus" = {
# action.set-column-width = "-10%";
# repeat = true;
# hotkey-overlay.title = "Decrease column width";
# };
# "Mod+Shift+Equal" = {
# action.set-window-height = "+10%";
# repeat = true;
# hotkey-overlay.title = "Increase window height";
# };
# "Mod+Shift+Minus" = {
# action.set-window-height = "-10%";
# repeat = true;
# hotkey-overlay.title = "Decrease window height";
# };
# "Mod+Z" = {
# action.toggle-window-floating = { };
# repeat = false;
# hotkey-overlay.title = "Toggle floating";
# };
# "Mod+T" = {
# action.toggle-column-tabbed-display = { };
# repeat = false;
# hotkey-overlay.title = "Toggle tabbed column";
# };
# # Window and column movement
# "Mod+K" = {
# action.focus-window-or-monitor-up = { };
# repeat = false;
# hotkey-overlay.title = "Focus window up";
# };
# "Mod+J" = {
# action.focus-window-or-monitor-down = { };
# repeat = false;
# hotkey-overlay.title = "Focus window down";
# };
# "Mod+H" = {
# action.focus-column-or-monitor-left = { };
# repeat = false;
# hotkey-overlay.title = "Focus window left";
# };
# "Mod+L" = {
# action.focus-column-or-monitor-right = { };
# repeat = false;
# hotkey-overlay.title = "Focus window right";
# };
# "Mod+BracketLeft" = {
# action.consume-or-expel-window-left = { };
# repeat = false;
# hotkey-overlay.title = "Move window left";
# };
# "Mod+BracketRight" = {
# action.consume-or-expel-window-right = { };
# repeat = false;
# hotkey-overlay.title = "Move window right";
# };
# "Mod+Shift+K" = {
# action.move-column-to-monitor-up = { };
# repeat = false;
# hotkey-overlay.title = "Move column up";
# };
# "Mod+Shift+J" = {
# action.move-column-to-monitor-down = { };
# repeat = false;
# hotkey-overlay.title = "Move column down";
# };
# "Mod+Shift+H" = {
# action.move-column-left-or-to-monitor-left = { };
# repeat = false;
# hotkey-overlay.title = "Move column left";
# };
# "Mod+Shift+L" = {
# action.move-column-right-or-to-monitor-right = { };
# repeat = false;
# hotkey-overlay.title = "Move column right";
# };
# # Workspaces
# "Mod+Ctrl+K" = {
# action.focus-workspace-up = { };
# repeat = false;
# hotkey-overlay.title = "Focus workspace up";
# };
# "Mod+Ctrl+J" = {
# action.focus-workspace-down = { };
# repeat = false;
# hotkey-overlay.title = "Focus workspace down";
# };
# "Mod+Ctrl+Shift+K" = {
# action.move-column-to-workspace-up = { };
# repeat = false;
# hotkey-overlay.title = "Move column to workspace up";
# };
# "Mod+Ctrl+Shift+J" = {
# action.move-column-to-workspace-down = { };
# repeat = false;
# hotkey-overlay.title = "Move column to workspace down";
# };
# # Overview
# "Mod+Tab" = {
# action.toggle-overview = { };
# repeat = false;
# hotkey-overlay.title = "Toggle overview";
# };
# };
# window-rules = [
# {
# geometry-corner-radius = {
# bottom-left = 10.0;
# bottom-right = 10.0;
# top-left = 10.0;
# top-right = 10.0;
# };
# clip-to-geometry = true;
# }
# # Unfortunately windows like firefox extensions set their titles after spawning preventing
# # the window rules from being applied. There is a script to fix this but it is pretty hacky.
# # {
# # matches = [
# # {
# # title = "^Extension:.*";
# # app-id = "firefox";
# # }
# # ];
# # open-floating = true;
# # }
# {
# matches = [
# { app-id = "foot"; }
# { app-id = "Alacritty"; }
# ];
# opacity = 0.90;
# default-column-width.proportion = 0.4;
# }
# ];
# layer-rules = [
# {
# # Use noctalia wallpaper as overview backdrop
# matches = [ { namespace = "^noctalia-overview*"; } ];
# place-within-backdrop = true;
# }
# ];
# prefer-no-csd = true;
# screenshot-path = "${config.xdg.userDirs.extraConfig.SCREENSHOTS}/%Y%m%d-%H%M%S.png";
# hotkey-overlay = {
# skip-at-startup = true;
# };
# spawn-at-startup = [
# { argv = [ "noctalia-shell" ]; }
# ];
# cursor = {
# size = config.home.pointerCursor.size;
# theme = config.home.pointerCursor.name;
# hide-when-typing = true;
# };
# gestures = {
# hot-corners.enable = false;
# };
# xwayland-satellite = {
# enable = true;
# path = lib.getExe pkgs.xwayland-satellite-unstable;
# };
# environment = {
# "NIXOS_OZONE_WL" = "1";
# };
# debug = {
# # Allows notification actions and window activation from Noctalia.
# honor-xdg-activation-with-invalid-serial = { };
# };
# # Support for external 'includes' sounds like it is in the works.
# # Will just have to wait until then for noctalia color scheme integration.
# };
};
}

45
modules/features/nix.nix Normal file
View File

@@ -0,0 +1,45 @@
{
inputs,
self,
...
}:
{
flake.modules.nixos.nix = {
imports = [
inputs.nur.modules.nixos.default
];
nix = {
nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];
settings = {
experimental-features = [
"nix-command"
"flakes"
];
substituters = [
"https://cache.nixos.org"
"https://nix-community.cachix.org"
"https://devenv.cachix.org"
"https://hyprland.cachix.org"
"https://vicinae.cachix.org"
];
trusted-public-keys = [
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"vicinae.cachix.org-1:1kDrfienkGHPYbkpNj1mWTr7Fm1+zcenzgTizIcI3oc="
];
};
};
nixpkgs = {
config.allowUnfree = true;
overlays = [
self.overlays.default
];
};
programs.nix-ld.enable = true;
};
}

View File

@@ -0,0 +1,138 @@
{
inputs,
...
}:
{
flake.modules.homeManager.noctalia =
{
config,
...
}:
{
imports = [
inputs.noctalia.homeModules.default
];
programs.noctalia-shell = {
enable = true;
settings = {
general = {
avatarImage = "~/.face";
autoStartAuth = true;
allowPasswordWithFprintd = true;
};
location.name = "Washington DC";
bar = {
widgets = {
right = [
{
id = "plugin:tailscale";
}
{
id = "Tray";
}
{
id = "NotificationHistory";
}
{
id = "Battery";
}
{
id = "Volume";
}
{
id = "Brightness";
}
{
id = "ControlCenter";
}
];
};
};
templates = {
activeTemplates = [
{
enabled = true;
id = "alacritty";
}
{
enabled = true;
id = "discord";
}
{
enabled = true;
id = "foot";
}
{
enabled = true;
id = "helix";
}
{
enabled = true;
id = "niri";
}
{
enabled = true;
id = "pywalfox";
}
{
enabled = true;
id = "qt";
}
{
enabled = true;
id = "vicinae";
}
{
enabled = true;
id = "yazi";
}
{
enabled = true;
id = "zed";
}
];
enableUserTheming = true;
};
wallpaper = {
enabled = true;
overviewEnabled = true;
directory = "${config.xdg.userDirs.extraConfig.WALLPAPERS}";
};
colorSchemes.predefinedScheme = "Catppuccin";
};
plugins = {
sources = [
{
enabled = true;
name = "Noctalia Plugins";
url = "https://github.com/noctalia-dev/noctalia-plugins";
}
];
states = {
tailscale = {
enabled = true;
sourceUrl = "https://github.com/noctalia-dev/noctalia-plugins";
};
activate-linux = {
enabled = true;
sourceUrl = "https://github.com/noctalia-dev/noctalia-plugins";
};
};
version = 1;
};
pluginSettings = {
tailscale = {
refreshInterval = 5000;
compactMode = true;
showIpAddress = false;
showPeerCount = false;
hideDisconnected = false;
terminalCommand = "foot";
pingCount = 5;
defaultPeerAction = "copy-ip";
};
};
};
};
}

View File

@@ -0,0 +1,19 @@
{
flake.modules.nixos.pipewire = {
# Enable sound with pipewire.
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
# If you want to use JACK applications, uncomment this
# jack.enable = true;
# use the example session manager (no others are packaged yet so this is enabled by default,
# no need to redefine it in your config for now)
# media-session.enable = true;
};
security.rtkit.enable = true;
};
}

View File

@@ -0,0 +1,34 @@
{
flake.modules.nixos.power-management = {
services = {
upower.enable = true;
system76-scheduler.settings.cfsProfiles.enable = true;
tlp = {
enable = true;
settings = {
CPU_BOOST_ON_AC = 1;
CPU_BOOST_ON_BAT = 0;
CPU_SCALING_GOVERNOR_ON_AC = "performance";
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
PLATFORM_PROFILE_ON_AC = "performance";
PLATFORM_PROFILE_ON_BAT = "balanced";
START_CHARGE_THRESH_BAT1 = 65; # Only STOP_CHARGE_THRESH available on Framework
STOP_CHARGE_THRESH_BAT1 = 80;
# Fixes stuttering Hyprland animations on Intel iGPU (https://wiki.hypr.land/Configuring/Performance/)
INTEL_GPU_MIN_FREQ_ON_AC = 300;
INTEL_GPU_MIN_FREQ_ON_BAT = 300;
};
};
# Disable GNOME's power management (conflicts with TLP)
power-profiles-daemon.enable = false;
};
powerManagement = {
enable = true;
powertop.enable = true;
};
};
}

View File

@@ -0,0 +1,24 @@
{
flake.modules.nixos.printing =
{ pkgs, ... }:
{
services = {
# Enable CUPS to print documents.
printing = {
enable = true;
drivers = with pkgs; [
gutenprint
cnijfilter2
];
};
avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
};
hardware.sane.enable = true;
};
}

34
modules/features/ssh.nix Normal file
View File

@@ -0,0 +1,34 @@
{
flake.modules.homeManager.ssh = {
programs.ssh = {
enable = true;
enableDefaultConfig = false;
matchBlocks = {
"*" = {
addKeysToAgent = "yes";
identityFile = [ "~/.ssh/id_ed25519_sk_rk" ];
};
"stu" = {
hostname = "stu.cs.jmu.edu";
user = "tamassno";
localForwards = [
{
bind.port = 5432;
host = {
address = "data.cs.jmu.edu";
port = 5432;
};
}
];
serverAliveCountMax = 5;
serverAliveInterval = 60;
};
"cluster" = {
hostname = "login02.cluster.cs.jmu.edu";
user = "tamassno";
proxyJump = "stu";
};
};
};
};
}

View File

@@ -0,0 +1,46 @@
{
flake.modules.homeManager.starship =
{ lib, ... }:
{
programs.starship = {
enable = true;
enableZshIntegration = true;
settings = {
add_newline = true;
format = lib.strings.concatStrings [
"[ [\\[](1)$username([@](bold 2)$hostname)[\\]:](1) $directory( $git_branch)](5)"
"$line_break"
"[ $character](5)"
];
username = {
style_root = "white";
format = "[$user](3)";
disabled = false;
show_always = true;
};
hostname = {
format = "[$hostname](bold 4)";
disabled = false;
ssh_only = false;
};
character = {
success_symbol = "[](bold 5)";
error_symbol = "[](bold 5)";
vimcmd_symbol = "[](bold 5)";
};
directory = {
read_only = "";
format = "[ $path](5)";
read_only_style = "bold white";
truncation_length = 5;
};
git_branch = {
symbol = "";
style = "bright-black";
format = "[$symbol $branch]($style)";
};
scan_timeout = 100;
};
};
};
}

View File

@@ -0,0 +1,61 @@
{
flake.modules.homeManager.styling =
{
config,
pkgs,
...
}:
{
home = {
pointerCursor = {
name = "catppuccin-mocha-dark-cursors";
package = pkgs.catppuccin-cursors.mochaDark;
size = 16;
x11.enable = true;
gtk.enable = true;
};
};
gtk = {
enable = true;
colorScheme = "dark";
iconTheme = {
name = "MoreWaita";
package = pkgs.morewaita-icon-theme;
};
theme = {
name = "adw-gtk3-dark";
package = pkgs.adw-gtk3;
};
gtk4.theme = config.gtk.theme;
};
qt =
let
qt_settings = ver: {
Appearance = {
color_scheme_path = "${config.xdg.configHome}/${ver}/colors/noctalia.conf";
custom_palette = true;
icon_theme = "MoreWaita";
standard_dialogs = "xdgdesktopportal";
style = "Breeze";
};
Fonts = {
fixed = "\"${builtins.head config.fonts.fontconfig.defaultFonts.monospace},12\"";
general = "\"${builtins.head config.fonts.fontconfig.defaultFonts.sansSerif},12\"";
};
};
in
{
enable = true;
platformTheme.name = "qtct";
style.name = "breeze";
qt5ctSettings = qt_settings "qt5ct";
qt6ctSettings = qt_settings "qt6ct";
};
home.sessionVariables = {
QS_ICON_THEME = "MoreWaita";
};
};
}

View File

@@ -0,0 +1,22 @@
{
flake.modules.homeManager.swappy =
{
config,
...
}:
{
programs.swappy = {
enable = true;
# Configuration options: https://github.com/jtheoof/swappy?tab=readme-ov-file#config
settings = {
Default = {
save_dir = config.xdg.userDirs.extraConfig.SCREENSHOTS;
save_filename_format = "%Y%m%d-%H%M%S.png";
show_panel = false;
auto_save = false;
early_exit = true;
};
};
};
};
}

View File

@@ -0,0 +1,36 @@
{
inputs,
...
}:
{
flake.modules.nixos.tailscale =
{ config, lib, ... }:
{
services.tailscale = {
enable = true;
useRoutingFeatures = "client";
authKeyFile = config.age.secrets.tailscale-auth.path;
# * Only applied if `authKeyFile` is specified
extraUpFlags = [
"--ssh"
"--accept-routes=true"
];
extraSetFlags = [
"--operator=eclypse"
];
};
age.secrets.tailscale-auth.rekeyFile = "${inputs.secrets}/tailscale-auth.age";
# Taildrop
systemd.user.services.taildrop = {
description = "Taildrop File Receiver Service";
wantedBy = [ "default.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${lib.getExe config.services.tailscale.package} file get --verbose --loop %h/Downloads/";
};
};
};
}

View File

@@ -0,0 +1,17 @@
{
flake.modules.homeManager.vesktop = {
programs.vesktop = {
enable = true;
vencord = {
settings = {
oUpdate = false;
autoUpdateNotification = false;
notifyAboutUpdates = false;
useQuickCss = true;
disableMinSize = true;
enabledThemes = [ "noctalia.theme.css" ];
};
};
};
};
}

View File

@@ -0,0 +1,38 @@
{
flake.modules.homeManager.vicinae = {
# Not using Vicinae's flake because the server fucking seg faults immediately
programs.vicinae = {
enable = true;
systemd = {
enable = true;
autoStart = true;
};
# For configuration option documentation, see: https://github.com/vicinaehq/vicinae/blob/f6222f1e82fe2077ad42f10a6d6837dc61c67fd0/vicinae/assets/config.jsonc
settings = {
escape_key_behavior = "close_window";
close_on_focus_loss = true;
pop_to_root_on_close = true;
favicon_service = "twenty";
telemetry = {
system_info = false;
};
font = {
normal = {
size = 12;
family = "JetBrainsMono Nerd Font";
};
};
theme = {
light = {
name = "noctalia";
icon_theme = "MoreWaita";
};
dark = {
name = "noctalia";
icon_theme = "MoreWaita";
};
};
};
};
};
}

View File

@@ -0,0 +1,20 @@
{
flake.modules.nixos.virtualization =
{ config, pkgs, ... }:
{
boot = {
extraModulePackages = with config.boot.kernelPackages; [ virtualbox ];
kernelParams = [
"kvm.enable_virt_at_load=0" # Fixes some virtuallization issues
];
};
virtualisation = {
podman.enable = true;
};
environment.systemPackages = [ pkgs.distrobox ];
users.extraGroups.vboxusers.members = [ "eclypse" ];
};
}

View File

@@ -0,0 +1,8 @@
{
flake.modules.nixos.wayland = {
programs = {
uwsm.enable = true;
xwayland.enable = true;
};
};
}

15
modules/features/x11.nix Normal file
View File

@@ -0,0 +1,15 @@
{
flake.modules.nixos.x11 = {
services.xserver = {
# Enable the X11 windowing system.
# You can disable this if you're only using the Wayland session.
enable = true;
# Configure keymap in X11
xkb = {
layout = "us";
variant = "";
};
};
};
}

21
modules/features/xdg.nix Normal file
View File

@@ -0,0 +1,21 @@
{
flake.modules.homeManager.xdg =
{
config,
...
}:
{
xdg = {
enable = true;
userDirs = {
enable = true;
setSessionVariables = true;
createDirectories = true;
extraConfig = {
DEV = "${config.home.homeDirectory}/Dev";
SCREENSHOTS = "${config.xdg.userDirs.pictures}/Screenshots";
};
};
};
};
}

171
modules/features/yazi.nix Normal file
View File

@@ -0,0 +1,171 @@
{
flake.modules.homeManager.yazi =
{
pkgs,
...
}:
{
home.packages = with pkgs; [
wl-clipboard-rs
dragon-drop
trash-cli
];
programs.yazi = {
enable = true;
enableZshIntegration = true;
shellWrapperName = "y";
plugins = with pkgs.yaziPlugins; {
inherit
git
full-border
chmod
compress
wl-clipboard
recycle-bin
mount
lazygit
;
};
initLua = ''
require("git"):setup {
-- Order of status signs showing in the linemode
order = 1500,
}
require("full-border"):setup()
require("recycle-bin"):setup()
'';
keymap =
let
leader = "c";
in
{
mgr.prepend_keymap = [
{
on = [
leader
"d"
];
run = "shell -- dragon-drop -x -i -T %s1";
desc = "Open a prompt to drag and drop a file";
}
{
on = [
leader
"c"
];
run = "plugin chmod";
desc = "Chmod on selected files";
}
{
on = [
leader
"a"
"a"
];
run = "plugin compress";
desc = "Archive selected files";
}
{
on = [
leader
"a"
"p"
];
run = "plugin compress -p";
desc = "Archive selected files (password)";
}
{
on = [
leader
"a"
"h"
];
run = "plugin compress -ph";
desc = "Archive selected files (password+header)";
}
{
on = [
leader
"a"
"h"
];
run = "plugin compress -ph";
desc = "Archive selected files (password+header)";
}
{
on = [
leader
"a"
"l"
];
run = "plugin compress -l";
desc = "Archive selected files (compression level)";
}
{
on = [
leader
"a"
"u"
];
run = "plugin compress -phl";
desc = "Archive selected files (password+header+level)";
}
{
on = [
leader
"y"
];
run = "plugin wl-clipboard";
desc = "Copy file to clipboard";
}
{
on = [
leader
"r"
];
run = "plugin recycle-bin";
desc = "Open Recycle Bin Menu";
}
{
on = [
leader
"m"
];
run = "plugin mount";
desc = "Open Mount Manager";
}
{
on = [
leader
"l"
];
run = "plugin lazygit";
desc = "Open lazygit";
}
];
};
settings = {
plugin = {
# Disable all preset previewers, preloaders
# This is recommended by yazi when working with network shares
preloaders = [ ];
previewers = [ ];
prepend_fetchers = [
{
id = "git";
url = "*";
run = "git";
}
{
id = "git";
url = "*/";
run = "git";
}
];
};
};
};
};
}

View File

@@ -0,0 +1,16 @@
{
flake.modules.nixos.yubikey =
{ pkgs, ... }:
{
programs = {
yubikey-manager.enable = true;
yubikey-touch-detector.enable = true;
};
environment.systemPackages = [
pkgs.age-plugin-yubikey
];
services.yubikey-agent.enable = true;
};
}

22
modules/features/zed.nix Normal file
View File

@@ -0,0 +1,22 @@
{
flake.modules.homeManager.zed =
{
pkgs,
...
}:
{
programs.zed-editor = {
enable = true;
extensions = [
"nix"
];
extraPackages = [ pkgs.nixd ];
userSettings = {
features = {
edit_prediction_provider = "copilot";
};
};
};
};
}

384
modules/features/zellij.nix Normal file
View File

@@ -0,0 +1,384 @@
{
inputs,
...
}:
{
flake.modules.homeManager.zellij =
{ pkgs, ... }:
{
programs.zellij =
let
mod = "Alt"; # Can be one of "Ctrl", "Alt", "Shift", "Super"
action = name: { ${name} = { }; };
actionWith = name: args: { ${name}._args = args; };
switchMode = mode: actionWith "SwitchToMode" [ mode ];
bind =
{ keys, actions }:
{
bind = {
_args = [ keys ];
_children = actions;
};
};
modeBinds = mode: bindings: {
${mode}._children = map bind bindings;
};
sharedExcept = modes: bindings: {
shared_except = {
_args = modes;
_children = map bind bindings;
};
};
in
{
enable = true;
enableZshIntegration = true;
settings = {
theme = "catppuccin-mocha";
show_startup_tips = false;
default_mode = "locked";
ui._children = [
{
pane_frames._children = [
{ rounded_corners = true; }
];
}
];
keybinds = {
_props = {
clear-defaults = true;
};
_children = [
(modeBinds "locked" [
{
keys = "${mod} q";
actions = [
(switchMode "Normal")
];
}
])
(sharedExcept
[ "locked" "normal" "renamepane" "renametab" ]
[
{
keys = "Esc";
actions = [ (switchMode "Normal") ];
}
]
)
(modeBinds "normal" [
{
keys = "Esc";
actions = [ (switchMode "Locked") ];
}
{
keys = "h";
actions = [ (actionWith "MoveFocusOrTab" [ "Left" ]) ];
}
{
keys = "j";
actions = [ (actionWith "MoveFocus" [ "Down" ]) ];
}
{
keys = "k";
actions = [ (actionWith "MoveFocus" [ "Up" ]) ];
}
{
keys = "l";
actions = [ (actionWith "MoveFocusOrTab" [ "Right" ]) ];
}
{
keys = "H";
actions = [ (action "GoToPreviousTab") ];
}
{
keys = "L";
actions = [ (action "GoToNextTab") ];
}
{
keys = "p";
actions = [ (switchMode "Pane") ];
}
{
keys = "t";
actions = [ (switchMode "Tab") ];
}
{
keys = "r";
actions = [ (switchMode "Resize") ];
}
])
(modeBinds "pane" [
{
keys = "h";
actions = [ (actionWith "MovePane" [ "Left" ]) ];
}
{
keys = "j";
actions = [ (actionWith "MovePane" [ "Down" ]) ];
}
{
keys = "k";
actions = [ (actionWith "MovePane" [ "Up" ]) ];
}
{
keys = "l";
actions = [ (actionWith "MovePane" [ "Right" ]) ];
}
{
keys = "s";
actions = [
(actionWith "NewPane" [ "stacked" ])
];
}
{
keys = "d";
actions = [
(actionWith "NewPane" [ "down" ])
];
}
{
keys = "r";
actions = [
(actionWith "NewPane" [ "right" ])
];
}
{
keys = "x";
actions = [
(action "CloseFocus")
];
}
{
keys = "e";
actions = [
(action "TogglePaneEmbedOrFloating")
];
}
{
keys = "f";
actions = [
(action "ToggleFocusFullscreen")
];
}
{
keys = "c";
actions = [
(switchMode "RenamePane")
(actionWith "PaneNameInput" [ 0 ])
];
}
{
keys = "w";
actions = [
(action "ToggleFloatingPanes")
];
}
{
keys = "[";
actions = [
(action "BreakPaneLeft")
];
}
{
keys = "]";
actions = [
(action "BreakPaneRight")
];
}
])
(modeBinds "tab" [
{
keys = "h";
actions = [ (actionWith "MoveTab" [ "Left" ]) ];
}
{
keys = "l";
actions = [ (actionWith "MoveTab" [ "Right" ]) ];
}
{
keys = "b";
actions = [
(action "BreakPane")
];
}
{
keys = "x";
actions = [
(action "CloseTab")
];
}
{
keys = "n";
actions = [
(action "NewTab")
];
}
{
keys = "c";
actions = [
(switchMode "RenameTab")
(actionWith "TabNameInput" [ 0 ])
];
}
])
(modeBinds "renamepane" [
{
keys = "Enter";
actions = [
(switchMode "Pane")
];
}
{
keys = "Esc";
actions = [
(action "UndoRenamePane")
(switchMode "Pane")
];
}
])
(modeBinds "renametab" [
{
keys = "Enter";
actions = [
(switchMode "Tab")
];
}
{
keys = "Esc";
actions = [
(action "UndoRenameTab")
(switchMode "Tab")
];
}
])
(modeBinds "resize" [
{
keys = "h";
actions = [ (actionWith "Resize" [ "Increase Left" ]) ];
}
{
keys = "j";
actions = [ (actionWith "Resize" [ "Increase Down" ]) ];
}
{
keys = "k";
actions = [ (actionWith "Resize" [ "Increase Up" ]) ];
}
{
keys = "l";
actions = [ (actionWith "Resize" [ "Increase Right" ]) ];
}
{
keys = "H";
actions = [ (actionWith "Resize" [ "Decrease Right" ]) ];
}
{
keys = "J";
actions = [ (actionWith "Resize" [ "Decrease Up" ]) ];
}
{
keys = "K";
actions = [ (actionWith "Resize" [ "Decrease Down" ]) ];
}
{
keys = "L";
actions = [ (actionWith "Resize" [ "Decrease Left" ]) ];
}
{
keys = "+";
actions = [ (actionWith "Resize" [ "Increase" ]) ];
}
{
keys = "=";
actions = [ (actionWith "Resize" [ "Increase" ]) ];
}
{
keys = "-";
actions = [ (actionWith "Resize" [ "Decrease" ]) ];
}
])
];
};
plugins = {
compact-bar = {
_props = {
location = "zellij:compact-bar";
};
};
};
# simplified_ui = true;
# pane_frames = true;
copy_on_select = true;
};
};
xdg.configFile."zellij/layouts/default.kdl".text =
let
zjstatus = inputs.zjstatus.packages.${pkgs.stdenv.hostPlatform.system}.default;
in
''
layout {
default_tab_template {
pane size=2 borderless=true {
plugin location="file:${zjstatus}/bin/zjstatus.wasm" {
hide_frame_except_for_search "true"
border_enabled "true"
border_char ""
border_format "#[fg=#6C7086]{char}"
border_position "bottom"
format_left " {mode} #[fg=#6c7086] #[fg=#eba0ac] {session}"
format_center "{tabs}"
format_right ""
format_space ""
format_hide_on_overlength "true"
format_precedence "crl"
tab_normal "#[fg=#f5e0dc] {name}{fullscreen_indicator}{sync_indicator}{floating_indicator} "
tab_active "#[fg=#1e1e2e,bg=#fab387] {name}{fullscreen_indicator}{sync_indicator}{floating_indicator} "
tab_fullscreen_indicator " "
tab_sync_indicator " "
tab_floating_indicator " 󰉈"
tab_separator "#[fg=#6C7086] "
mode_normal "#[fg=#a6da95]NORMAL"
mode_locked "#[fg=#6e738d]LOCKED "
mode_resize "#[fg=#f38ba8]RESIZE"
mode_pane "#[fg=#89b4fa]PANE"
mode_tab "#[fg=#b4befe]TAB"
mode_scroll "#[fg=#f9e2af]SCROLL"
mode_enter_search "#[fg=#8aadf4]ENT-SEARCH"
mode_search "#[fg=#8aadf4]SEARCHARCH"
mode_rename_tab "#[fg=#b4befe]RENAME-TAB"
mode_rename_pane "#[fg=#89b4fa]RENAME-PANE"
mode_session "#[fg=#74c7ec]SESSION"
mode_move "#[fg=#f5c2e7]MOVE"
mode_prompt "#[fg=#8aadf4]PROMPT"
mode_tmux "#[fg=#f5a97f]TMUX"
command_host_command "uname -n"
command_host_format "{stdout}"
command_host_interval "0"
command_host_rendermode "static"
command_user_command "whoami"
command_user_format "{stdout}"
command_user_interval "0"
command_user_rendermode "static"
}
}
children
}
}
'';
};
}

View File

@@ -0,0 +1,169 @@
{
inputs,
...
}:
{
flake.modules.homeManager.zen-browser =
{ pkgs, config, ... }:
{
imports = [
inputs.zen-browser.homeModules.twilight
];
programs.zen-browser =
let
mkPluginUrl = id: "https://addons.mozilla.org/firefox/downloads/latest/${id}/latest.xpi";
mkExtensionEntry =
{
id,
pinned ? false,
}:
let
base = {
install_url = mkPluginUrl id;
installation_mode = "force_installed";
};
in
if pinned then base // { default_area = "navbar"; } else base;
mkExtensionSettings = builtins.mapAttrs (
_: entry: if builtins.isAttrs entry then entry else mkExtensionEntry { id = entry; }
);
in
{
enable = true;
setAsDefaultBrowser = true;
languagePacks = [ "en-US" ];
policies = {
DefaultDownloadDirectory = config.xdg.userDirs.download;
DisableFirefoxAccounts = true;
DisableFirefoxStudies = true;
DisablePocket = true;
DisableProfileImport = true;
DisableProfileRefresh = true;
DisableTelemetry = true;
DisplayBookmarksToolbar = "never";
DontCheckDefaultBrowser = true;
EnableTrackingProtection = {
Value = true; # Tracking protection is enabled by default in both the regular browser and private browsing
Locked = true; # Whether or not a user can change tracking protection
Cryptomining = true; # Block cryptomining scripts
Fingerprinting = true; # Block fingerprinting scripts
EmailTracking = true; # Block email tracking pixels and scripts
};
ExtensionSettings = mkExtensionSettings {
"uBlock0@raymondhill.net" = mkExtensionEntry {
id = "ublock-origin";
pinned = true;
};
"{446900e4-71c2-419f-a6a7-df9c091e268b}" = "bitwarden-password-manager";
};
FirefoxSuggest = {
WebSuggestions = true;
SponsoredSuggestions = false;
ImproveSuggest = false;
Locked = true;
};
Homepage = {
URL = "http://100.78.212.35:30054";
Locked = true;
StartPage = "homepage";
};
OfferToSaveLogins = false;
OverrideFirstRunPage = "";
PasswordManagerEnabled = false;
PopupBlocking = {
Default = false;
Locked = true;
};
PrimaryPassword = false;
SearchBar = "unified";
ShowHomeButton = true;
SkipTermsOfUse = true;
};
profiles.default = {
search = {
force = true;
default = "google";
engines =
let
nixSnowflakeIcon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
in
{
nix-packages = {
name = "Nix Packages";
urls = [
{
template = "https://search.nixos.org/packages";
params = [
{
name = "channel";
value = "unstable";
}
{
name = "query";
value = "{searchTerms}";
}
];
}
];
icon = nixSnowflakeIcon;
definedAliases = [ "@np" ];
};
nix-options = {
name = "Nix Options";
urls = [
{
template = "https://search.nixos.org/options";
params = [
{
name = "channel";
value = "unstable";
}
{
name = "query";
value = "{searchTerms}";
}
];
}
];
icon = nixSnowflakeIcon;
definedAliases = [ "@no" ];
};
home-manager = {
name = "Home Manager";
urls = [
{
template = "https://home-manager-options.extranix.com";
params = [
{
name = "query";
value = "{searchTerms}";
}
];
}
];
icon = nixSnowflakeIcon;
definedAliases = [ "@hm" ];
};
surugaya = {
name = "Surugaya";
urls = [
{
template = "https://www.suruga-ya.jp/search?search_word={searchTerms}";
}
];
iconMapObj."16" = "https://www.suruga-ya.jp/drupal/themes/surugaya/favicon.ico";
definedAliases = [ "@suru" ];
};
};
};
settings = {
# Auto-enable extensions
"extensions.autoDisableScopes" = 0;
};
};
};
};
}

View File

@@ -0,0 +1,8 @@
{
flake.modules.homeManager.zoxide = {
programs.zoxide = {
enable = true;
enableZshIntegration = true;
};
};
}

56
modules/features/zsh.nix Normal file
View File

@@ -0,0 +1,56 @@
{
flake.modules.nixos.zsh = {
programs.zsh.enable = true;
environment.pathsToLink = [ "/share/zsh" ];
};
flake.modules.homeManager.zsh =
{ config, ... }:
{
programs.zsh = {
enable = true;
enableCompletion = false;
antidote = {
enable = true;
plugins = [
"Aloxaf/fzf-tab"
];
};
autosuggestion.enable = true;
dotDir = "${config.xdg.configHome}/zsh";
history = {
append = true;
findNoDups = true;
ignoreSpace = true;
ignoreDups = true;
saveNoDups = true;
share = true;
};
historySubstringSearch = {
enable = true;
searchDownKey = "^p";
searchUpKey = "^n";
};
initContent = ''
# disable sort when completing `git checkout`
zstyle ':completion:*:git-checkout:*' sort false
# set descriptions format to enable group support
# NOTE: don't use escape sequences (like '%F{red}%d%f') here, fzf-tab will ignore them
zstyle ':completion:*:descriptions' format '[%d]'
# preview directory's content when completing cd or zoxide
zstyle ':fzf-tab:complete:cd:*' fzf-preview 'ls --color $realpath'
zstyle ':fzf-tab:complete:__zoxide_z:*' fzf-preview 'ls --color $realpath'
# custom fzf flags
# NOTE: fzf-tab does not follow FZF_DEFAULT_OPTS by default
zstyle ':fzf-tab:*' fzf-flags --color=fg:1,fg+:2 --bind=tab:accept
# switch group using `<` and `>`
zstyle ':fzf-tab:*' switch-group '<' '>'
'';
syntaxHighlighting.enable = true;
shellAliases = {
ff = "fastfetch";
};
};
};
}

View File

@@ -0,0 +1,37 @@
{
inputs,
self,
...
}:
{
flake.modules.nixos.eclypsecloud-shares =
{
pkgs,
config,
...
}:
{
imports = with self.factory.nixos; [
(cifs {
destination = "/mnt/EclypseCloud";
host = "100.78.212.35";
resource = "EclypseCloud";
credentialsPath = config.age.secrets.eclypsecloud-eclypse.path;
uid = config.users.users.eclypse.uid;
})
(cifs {
destination = "/mnt/Music";
host = "100.78.212.35";
resource = "music";
credentialsPath = config.age.secrets.eclypsecloud-eclypse.path;
uid = config.users.users.eclypse.uid;
})
];
age.secrets.eclypsecloud-eclypse.rekeyFile = "${inputs.secrets}/eclypsecloud-eclypse.age";
environment.systemPackages = with pkgs; [
cifs-utils
];
};
}

View File

@@ -0,0 +1,40 @@
{
flake.factory.nixos.cifs =
{
destination,
host,
resource,
credentialsPath,
uid,
gid ? null,
}:
{
lib,
...
}:
{
fileSystems."${destination}" = {
device = "//${host}/${resource}";
fsType = "cifs";
options =
let
automount-opts = [
"x-systemd.automount"
"x-systemd.idle-timeout=60"
"x-systemd.device-timeout=5s"
"x-systemd.mount-timeout=5s"
"noauto"
"nofail"
"soft"
];
mount-opts = [
"rw"
"iocharset=utf8"
];
user = [ "uid=${toString uid}" ] ++ (lib.optionals (gid != null) [ "gid=${toString gid}" ]);
credentials = [ "credentials=${credentialsPath}" ];
in
automount-opts ++ mount-opts ++ user ++ credentials;
};
};
}

View File

@@ -1,22 +0,0 @@
{
imports = [
./firefox.nix
./git.nix
./helix.nix
./kanshi.nix
./niri.nix
./noctalia.nix
./nvf.nix
./packages.nix
./screenshot.nix
./ssh.nix
./stylix.nix
./terminal.nix
./vesktop.nix
./vicinae.nix
./xdg.nix
./yazi.nix
./zed.nix
# ./zen-browser.nix
];
}

View File

@@ -1,154 +0,0 @@
{
config,
pkgs,
...
}:
{
# This gets around having to run `pywalfox install` manually, which just creates this manifest
home.file.".mozilla/native-messaging-hosts/pywalfox.json".text = builtins.toJSON {
name = "pywalfox";
description = "Automatically theme your browser using the colors generated by Pywal";
path = "${pkgs.pywalfox-native}/bin/pywalfox";
type = "stdio";
allowed_extensions = [ "pywalfox@frewacom.org" ];
};
programs.firefox = {
enable = true;
languagePacks = [ "en-US" ];
nativeMessagingHosts = with pkgs; [
pywalfox-native
];
policies = {
DefaultDownloadDirectory = config.xdg.userDirs.download;
DisableFirefoxAccounts = true;
DisableFirefoxStudies = true;
DisablePocket = true;
DisableProfileImport = true;
DisableProfileRefresh = true;
DisableTelemetry = true;
DisplayBookmarksToolbar = "never";
DontCheckDefaultBrowser = true;
EnableTrackingProtection = {
Value = true; # Tracking protection is enabled by default in both the regular browser and private browsing
Locked = true; # Whether or not a user can change tracking protection
Cryptomining = true; # Block cryptomining scripts
Fingerprinting = true; # Block fingerprinting scripts
EmailTracking = true; # Block email tracking pixels and scripts
};
FirefoxHome = {
Search = true;
TopSites = true;
SponsoredTopSites = false;
Highlights = false;
Pocket = false;
Stories = false;
SponsoredPocket = false;
SponsoredStories = false;
Snippets = true;
Locked = true;
};
FirefoxSuggest = {
WebSuggestions = true;
SponsoredSuggestions = false;
ImproveSuggest = false;
Locked = true;
};
Homepage = {
URL = "http://100.78.212.35:30054";
Locked = true;
StartPage = "homepage";
};
OfferToSaveLogins = false;
OverrideFirstRunPage = "";
PasswordManagerEnabled = false;
PopupBlocking = {
Default = false;
Locked = true;
};
PrimaryPassword = false;
SearchBar = "unified";
ShowHomeButton = true;
SkipTermsOfUse = true;
};
profiles.eclypse = {
name = "Eclypse";
isDefault = true;
extensions = {
force = true;
packages = with pkgs.nur.repos.rycee.firefox-addons; [
ublock-origin
bitwarden
pywalfox
];
settings = {
"uBlock0@raymondhill.net".settings = {
selectedFilterLists = [
"ublock-filters"
"ublock-badware"
"ublock-privacy"
"ublock-unbreak"
"ublock-quick-fixes"
];
};
};
};
search = {
default = "google";
force = true;
engines = {
nix-packages = {
name = "Nix Packages";
urls = [
{
template = "https://search.nixos.org/packages";
params = [
{
name = "channel";
value = "unstable";
}
{
name = "query";
value = "{searchTerms}";
}
];
}
];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@np" ];
};
home-manager = {
name = "Home Manager";
urls = [
{
template = "https://home-manager-options.extranix.com";
params = [
{
name = "query";
value = "{searchTerms}";
}
];
}
];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@hm" ];
};
surugaya = {
name = "Surugaya";
urls = [
{
template = "https://www.suruga-ya.jp/search?search_word={searchTerms}";
}
];
iconMapObj."16" = "https://www.suruga-ya.jp/drupal/themes/surugaya/favicon.ico";
definedAliases = [ "@suru" ];
};
};
};
settings = {
# Auto-enable extensions
"extensions.autoDisableScopes" = 0;
};
};
};
}

View File

@@ -1,40 +0,0 @@
{
pkgs,
config,
...
}:
let
name = "Eclypsed";
email = "Ec1ypsed@proton.me";
signingKey = "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIB2h6y1Al2OVotYIpwPZMjiBLAncAI2pAPgES2+gVbJqAAAABHNzaDo= ssh:";
in
{
home.packages = with pkgs; [ git-ignore ];
xdg.configFile."git/allowed_signers".text = ''
${email} namespaces="git" ${signingKey}
'';
programs = {
git = {
enable = true;
settings = {
user = { inherit name email; };
init = {
defaultBranch = "main";
};
gpg.ssh.allowedSignersFile = "${config.xdg.configHome}/git/allowed_signers";
};
signing = {
format = "ssh";
key = "${config.home.homeDirectory}/.ssh/id_ed25519_sk_rk.pub";
signByDefault = true;
};
};
lazygit = {
enable = true;
enableZshIntegration = true;
shellWrapperName = "lg";
};
};
}

View File

@@ -1,322 +0,0 @@
{
pkgs,
...
}:
let
yazi-picker = pkgs.writeShellApplication {
name = "yazi-picker";
text = ''
paths=$(yazi --chooser-file=/dev/stdout)
if [[ -n "$paths" ]]; then
zellij action toggle-floating-panes
zellij action write 27 # send <Escape> key
zellij action write-chars ":$1 $paths"
zellij action write 13 # send <Enter> key
else
zellij action toggle-floating-panes
fi
'';
};
in
{
home.packages = [ yazi-picker ];
programs.helix = {
enable = true;
defaultEditor = true;
extraPackages = with pkgs; [
basedpyright # Python static type checker
ruff # Pyhton linter and formatter
nixd # Nix language server
nixfmt # Nix formatter
rust-analyzer # Rust language server
rustfmt # Rust formmater
clippy # Rust linter
lldb # Debugger for llvm languages
marksman # Markdown language server
markdown-oxide # Markdown PKM language server
rumdl # Markdown linter and formatter
libclang # C language family frontend for LLVM
typescript-language-server # Typescript language server
vscode-langservers-extracted # HTML/CSS/JSON/ESLint language servers extracted from vscode
emmet-language-server # Emmet support based on LSP
prettier # Formatter for HTML/CSS/JSON/ESLint languages
superhtml # HTML Language Server and Templating Language Library
];
settings = {
editor = {
line-number = "relative";
cursorline = true;
auto-format = true;
completion-timeout = 5;
completion-trigger-len = 1;
bufferline = "always";
color-modes = true;
end-of-line-diagnostics = "hint";
lsp = {
display-inlay-hints = true;
};
cursor-shape = {
insert = "bar";
normal = "block";
select = "underline";
};
indent-guides = {
render = true;
skip-levels = 1;
};
soft-wrap = {
enable = true;
max-indent-retain = 80;
};
inline-diagnostics = {
cursor-line = "warning";
};
};
keys =
let
arrow_keys = {
"up" = "jump_view_up";
"down" = "jump_view_down";
"left" = "jump_view_left";
"right" = "jump_view_right";
};
in
{
normal = {
"C-y" =
":sh zellij run -n Yazi -c -f -x 10%% -y 10%% --width 80%% --height 80%% -- yazi-picker open %{buffer_name}";
}
// arrow_keys;
insert = {
"C-k" = "move_visual_line_up";
"C-j" = "move_visual_line_down";
"C-h" = "move_char_left";
"C-l" = "move_char_right";
}
// arrow_keys;
select = { } // arrow_keys;
};
theme = "catppuccin_mocha";
};
# Check https://github.com/helix-editor/helix/blob/master/languages.toml for default language configuration
# Only explictly set options you want to override / make explicit
languages = {
language = [
{
name = "python";
language-servers = [
"basedpyright"
"ruff"
];
auto-format = true;
formatter = {
command = "ruff";
args = [
"format"
"-"
];
};
}
{
name = "nix";
language-servers = [ "nixd" ];
auto-format = true;
formatter = {
command = "nixfmt";
};
}
{
name = "rust";
auto-format = true;
formatter = {
command = "rustfmt";
};
}
{
name = "markdown";
auto-format = true;
formatter = {
command = "rumdl";
args = [
"fmt"
"-"
];
};
}
{
name = "c";
file-types = [
"c"
"h"
]; # "h" is currently missing from the default config
auto-format = true;
formatter = {
command = "clang-format";
args = [
"--style=WebKit"
];
};
}
{
name = "typescript";
language-servers = [
"typescript-language-server"
"vscode-eslint-language-server"
"emmet-language-server"
];
auto-format = true;
formatter = {
command = "prettier";
args = [
"--parser"
"typescript"
];
};
}
{
name = "tsx";
language-servers = [
"typescript-language-server"
"vscode-eslint-language-server"
"emmet-language-server"
];
auto-format = true;
formatter = {
command = "prettier";
args = [
"--parser"
"typescript"
];
};
}
{
name = "javascript";
language-servers = [
"typescript-language-server"
"vscode-eslint-language-server"
"emmet-language-server"
];
auto-format = true;
formatter = {
command = "prettier";
args = [
"--parser"
"typescript"
];
};
}
{
name = "jsx";
language-servers = [
"typescript-language-server"
"vscode-eslint-language-server"
"emmet-language-server"
];
auto-format = true;
formatter = {
command = "prettier";
args = [
"--parser"
"typescript"
];
};
}
{
name = "json";
auto-format = true;
formatter = {
command = "prettier";
args = [
"--parser"
"json"
];
};
}
{
name = "jsonc";
auto-format = true;
formatter = {
command = "prettier";
args = [
"--parser"
"jsonc"
];
};
}
{
name = "html";
language-servers = [
"vscode-html-language-server"
{
name = "superhtml";
except-features = [ "format" ];
}
"emmet-language-server"
];
auto-format = true;
formatter = {
command = "prettier";
args = [
"--parser"
"html"
];
};
}
{
name = "css";
language-servers = [
"vscode-css-language-server"
"emmet-language-server"
];
auto-format = true;
formatter = {
command = "prettier";
args = [
"--parser"
"css"
];
};
}
{
name = "scss";
language-servers = [
"vscode-css-language-server"
"emmet-language-server"
];
auto-format = true;
formatter = {
command = "prettier";
args = [
"--parser"
"scss"
];
};
}
];
language-server = {
basedpyright.config.python.analysis.typeCheckingMode = "strict";
rust-analyzer.config.check.command = "clippy";
emmet-language-server = {
command = "emmet-language-server";
args = [ "--stdio" ];
};
vscode-eslint-language-server = {
config = {
# Automatically fix ESLint errors
codeActionsOnSave = {
mode = "all";
"source.fixAll.eslint" = true;
};
quiet = false;
experimental = {
# Support for the modern ESLint configuration format
useFlatConfig = true;
};
};
};
};
};
};
}

View File

@@ -1,36 +0,0 @@
{
services.kanshi = {
enable = true;
settings = [
{
profile = {
name = "laptop";
outputs = [
{
criteria = "eDP-1";
status = "enable";
scale = 1.0;
}
];
};
}
{
profile = {
name = "docked";
outputs = [
{
criteria = "eDP-1";
status = "disable";
}
{
criteria = "LG Electronics LG TV SSCR2 *";
mode = "3840x2160@120Hz";
scale = 1.0;
status = "enable";
}
];
};
}
];
};
}

View File

@@ -1,468 +0,0 @@
{
pkgs,
lib,
config,
...
}:
let
# Executables
foot = lib.getExe' config.programs.foot.package "foot";
vicinae = lib.getExe' config.programs.vicinae.package "vicinae";
noctalia-shell = lib.getExe' config.programs.noctalia-shell.package "noctalia-shell";
playerctl = lib.getExe' pkgs.playerctl "playerctl";
wpctl = lib.getExe' pkgs.wireplumber "wpctl";
brightnessctl = lib.getExe' pkgs.brightnessctl "brightnessctl";
in
{
programs.niri = {
# Niri is enabled by niri.nixosModules.nir in desktop.nix
settings = {
input = {
keyboard = {
xkb = {
layout = "us";
options = "compose:ralt";
};
};
touchpad = {
enable = true;
click-method = "clickfinger";
drag = true;
drag-lock = true;
dwt = true;
natural-scroll = false;
scroll-method = "two-finger";
tap = true;
tap-button-map = "left-right-middle"; # Mouse button click to register when tapping with 1, 2, or 3 fingers
};
warp-mouse-to-focus = {
enable = true;
mode = "center-xy-always";
};
focus-follows-mouse = {
enable = true;
};
mod-key = "Super";
};
binds = {
# General
"Mod+Slash" = {
action.show-hotkey-overlay = { };
repeat = false;
hotkey-overlay.title = "Show hotkeys";
};
"Mod+Q" = {
action.close-window = { };
repeat = false;
hotkey-overlay.title = "Close window";
};
"Mod+W" = {
action.spawn = foot;
repeat = false;
hotkey-overlay.title = "Terminal";
};
"Mod+A" = {
action.spawn = [
vicinae
"toggle"
];
repeat = false;
hotkey-overlay.title = "Launcher";
};
"Mod+Escape" = {
action.spawn = [
noctalia-shell
"ipc"
"call"
"sessionMenu"
"toggle"
];
repeat = false;
hotkey-overlay.title = "Session menu";
};
# Notifications
"Mod+N" = {
action.spawn = [
noctalia-shell
"ipc"
"call"
"notifications"
"toggleHistory"
];
repeat = false;
hotkey-overlay.title = "Show notifications";
};
"Mod+Ctrl+N" = {
action.spawn = [
noctalia-shell
"ipc"
"call"
"notifications"
"clear"
];
repeat = false;
hotkey-overlay.title = "Clear notifications";
};
# Media keys
"XF86AudioPrev" = {
action.spawn = [
playerctl
"previous"
];
repeat = false;
hotkey-overlay.title = "Previous track";
};
"XF86AudioPlay" = {
action.spawn = [
playerctl
"play-pause"
];
repeat = false;
hotkey-overlay.title = "Play / pause track";
};
"XF86AudioNext" = {
action.spawn = [
playerctl
"next"
];
repeat = false;
hotkey-overlay.title = "Next track";
};
"XF86AudioRaiseVolume" = {
action.spawn = [
wpctl
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.05+"
];
repeat = true;
allow-when-locked = true;
hotkey-overlay.title = "Raise volume";
};
"XF86AudioLowerVolume" = {
action.spawn = [
wpctl
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.05-"
];
repeat = true;
allow-when-locked = true;
hotkey-overlay.title = "Lower volume";
};
"XF86AudioMute" = {
action.spawn = [
wpctl
"set-mute"
"@DEFAULT_AUDIO_SINK@"
"toggle"
];
repeat = false;
allow-when-locked = true;
hotkey-overlay.title = "Mute playback";
};
"Alt+XF86AudioRaiseVolume" = {
action.spawn = [
wpctl
"set-volume"
"@DEFAULT_AUDIO_SOURCE@"
"0.05+"
];
repeat = true;
allow-when-locked = true;
hotkey-overlay.title = "Raise microphone volume";
};
"Alt+XF86AudioLowerVolume" = {
action.spawn = [
wpctl
"set-volume"
"@DEFAULT_AUDIO_SOURCE@"
"0.05-"
];
repeat = true;
allow-when-locked = true;
hotkey-overlay.title = "Lower microphone volume";
};
"Alt+XF86AudioMute" = {
action.spawn = [
wpctl
"set-mute"
"@DEFAULT_AUDIO_SOURCE@"
"toggle"
];
repeat = false;
allow-when-locked = true;
hotkey-overlay.title = "Mute microphone";
};
# Brightness
"XF86MonBrightnessUp" = {
action.spawn = [
brightnessctl
"set"
"5%+"
];
repeat = true;
allow-when-locked = true;
hotkey-overlay.title = "Increase brightness";
};
"XF86MonBrightnessDown" = {
action.spawn = [
brightnessctl
"set"
"5%-"
];
repeat = true;
allow-when-locked = true;
hotkey-overlay.title = "Decrease brightness";
};
# Screen capture
"Print" = {
action.screenshot = {
show-pointer = false;
};
repeat = false;
hotkey-overlay.title = "Screenshot";
};
"Mod+Print" = {
action.screenshot-window = {
# show-pointer = false;
};
repeat = false;
hotkey-overlay.title = "Screenshot window";
};
"Shift+Print" = {
action.screenshot-screen = {
show-pointer = false;
};
repeat = false;
hotkey-overlay.title = "Screenshot screen";
};
# Display scaling
"Mod+Ctrl+Equal" = {
action.spawn = [
"output-scale"
"+0.1"
];
repeat = true;
hotkey-overlay.title = "Increase display scale";
};
"Mod+Ctrl+Minus" = {
action.spawn = [
"output-scale"
"-0.1"
];
repeat = true;
hotkey-overlay.title = "Decrease display scale";
};
"Mod+Ctrl+0" = {
action.spawn = [
"output-scale"
"1.0"
];
repeat = true;
hotkey-overlay.title = "Reset display scale";
};
# Window and column size
"Mod+F" = {
action.maximize-column = { };
repeat = false;
hotkey-overlay.title = "Maximize Column";
};
"Mod+Shift+F" = {
action.fullscreen-window = { };
repeat = false;
hotkey-overlay.title = "Fullscreen";
};
"Mod+Ctrl+F" = {
action.expand-column-to-available-width = { };
repeat = false;
hotkey-overlay.title = "Fill empty column space";
};
"Mod+Equal" = {
action.set-column-width = "+10%";
repeat = true;
hotkey-overlay.title = "Increase column width";
};
"Mod+Minus" = {
action.set-column-width = "-10%";
repeat = true;
hotkey-overlay.title = "Decrease column width";
};
"Mod+Shift+Equal" = {
action.set-window-height = "+10%";
repeat = true;
hotkey-overlay.title = "Increase window height";
};
"Mod+Shift+Minus" = {
action.set-window-height = "-10%";
repeat = true;
hotkey-overlay.title = "Decrease window height";
};
"Mod+Z" = {
action.toggle-window-floating = { };
repeat = false;
hotkey-overlay.title = "Toggle floating";
};
"Mod+T" = {
action.toggle-column-tabbed-display = { };
repeat = false;
hotkey-overlay.title = "Toggle tabbed column";
};
# Window and column movement
"Mod+K" = {
action.focus-window-or-monitor-up = { };
repeat = false;
hotkey-overlay.title = "Focus window up";
};
"Mod+J" = {
action.focus-window-or-monitor-down = { };
repeat = false;
hotkey-overlay.title = "Focus window down";
};
"Mod+H" = {
action.focus-column-or-monitor-left = { };
repeat = false;
hotkey-overlay.title = "Focus window left";
};
"Mod+L" = {
action.focus-column-or-monitor-right = { };
repeat = false;
hotkey-overlay.title = "Focus window right";
};
"Mod+BracketLeft" = {
action.consume-or-expel-window-left = { };
repeat = false;
hotkey-overlay.title = "Move window left";
};
"Mod+BracketRight" = {
action.consume-or-expel-window-right = { };
repeat = false;
hotkey-overlay.title = "Move window right";
};
"Mod+Shift+K" = {
action.move-column-to-monitor-up = { };
repeat = false;
hotkey-overlay.title = "Move column up";
};
"Mod+Shift+J" = {
action.move-column-to-monitor-down = { };
repeat = false;
hotkey-overlay.title = "Move column down";
};
"Mod+Shift+H" = {
action.move-column-left-or-to-monitor-left = { };
repeat = false;
hotkey-overlay.title = "Move column left";
};
"Mod+Shift+L" = {
action.move-column-right-or-to-monitor-right = { };
repeat = false;
hotkey-overlay.title = "Move column right";
};
# Workspaces
"Mod+Ctrl+K" = {
action.focus-workspace-up = { };
repeat = false;
hotkey-overlay.title = "Focus workspace up";
};
"Mod+Ctrl+J" = {
action.focus-workspace-down = { };
repeat = false;
hotkey-overlay.title = "Focus workspace down";
};
"Mod+Ctrl+Shift+K" = {
action.move-column-to-workspace-up = { };
repeat = false;
hotkey-overlay.title = "Move column to workspace up";
};
"Mod+Ctrl+Shift+J" = {
action.move-column-to-workspace-down = { };
repeat = false;
hotkey-overlay.title = "Move column to workspace down";
};
# Overview
"Mod+Tab" = {
action.toggle-overview = { };
repeat = false;
hotkey-overlay.title = "Toggle overview";
};
};
window-rules = [
{
geometry-corner-radius = {
bottom-left = 10.0;
bottom-right = 10.0;
top-left = 10.0;
top-right = 10.0;
};
clip-to-geometry = true;
}
# Unfortunately windows like firefox extensions set their titles after spawning preventing
# the window rules from being applied. There is a script to fix this but it is pretty hacky.
# {
# matches = [
# {
# title = "^Extension:.*";
# app-id = "firefox";
# }
# ];
# open-floating = true;
# }
{
matches = [
{ app-id = "foot"; }
{ app-id = "Alacritty"; }
];
opacity = 0.93;
default-column-width.proportion = 0.4;
}
];
layer-rules = [
{
# Use noctalia wallpaper as overview backdrop
matches = [ { namespace = "^noctalia-overview*"; } ];
place-within-backdrop = true;
}
];
prefer-no-csd = true;
screenshot-path = "${config.xdg.userDirs.extraConfig.SCREENSHOTS}/%Y%m%d-%H%M%S.png";
hotkey-overlay = {
skip-at-startup = true;
};
# If not using systemd for noctalia, use this
# spawn-at-startup = [
# { argv = [ "noctalia-shell" ]; }
# ];
cursor = {
size = config.stylix.cursor.size;
theme = config.stylix.cursor.name;
hide-when-typing = true;
};
gestures = {
hot-corners.enable = false;
};
xwayland-satellite = {
enable = true;
path = lib.getExe pkgs.xwayland-satellite-unstable;
};
environment = {
"NIXOS_OZONE_WL" = "1";
};
debug = {
# Allows notification actions and window activation from Noctalia.
honor-xdg-activation-with-invalid-serial = { };
};
# Support for external 'includes' sounds like it is in the works.
# Will just have to wait until then for noctalia color scheme integration.
};
};
}

View File

@@ -1,133 +0,0 @@
{
inputs,
config,
...
}:
{
imports = [
inputs.noctalia.homeModules.default
];
programs.noctalia-shell = {
enable = true;
systemd.enable = true; # Replaces spawn-at-startup in niri
settings = {
general = {
avatarImage = "~/.face";
autoStartAuth = true;
allowPasswordWithFprintd = true;
};
location.name = "Washington DC";
bar = {
widgets = {
right = [
{
id = "plugin:tailscale";
}
{
id = "Tray";
}
{
id = "NotificationHistory";
}
{
id = "Battery";
}
{
id = "Volume";
}
{
id = "Brightness";
}
{
id = "ControlCenter";
}
];
};
};
templates = {
activeTemplates = [
{
enabled = true;
id = "alacritty";
}
{
enabled = true;
id = "discord";
}
{
enabled = true;
id = "foot";
}
{
enabled = true;
id = "gtk";
}
{
enabled = true;
id = "helix";
}
{
enabled = true;
id = "niri";
}
{
enabled = true;
id = "pywalfox";
}
{
enabled = true;
id = "qt";
}
{
enabled = true;
id = "vicinae";
}
{
enabled = true;
id = "yazi";
}
{
enabled = true;
id = "zed";
}
];
enableUserTheming = true;
};
wallpaper = {
enabled = true;
overviewEnabled = true;
directory = "${config.xdg.userDirs.extraConfig.WALLPAPERS}";
};
colorSchemes.predefinedScheme = "Catppuccin";
};
plugins = {
sources = [
{
enabled = true;
name = "Noctalia Plugins";
url = "https://github.com/noctalia-dev/noctalia-plugins";
}
];
states = {
tailscale = {
enabled = true;
sourceUrl = "https://github.com/noctalia-dev/noctalia-plugins";
};
};
version = 1;
};
pluginSettings = {
tailscale = {
refreshInterval = 5000;
compactMode = true;
showIpAddress = false;
showPeerCount = false;
hideDisconnected = false;
terminalCommand = "foot";
pingCount = 5;
defaultPeerAction = "copy-ip";
};
};
};
}

View File

@@ -1,26 +0,0 @@
{
inputs,
pkgs,
...
}:
{
imports = [
inputs.nix-jmu-cs345.homeManagerModules.bernstdh
];
programs.nix-jmu-cs345.enable = true;
home.packages = with pkgs; [
devenv
htop
obsidian
# CD Stuff
picard
heybrochecklog
rsgain
playerctl
brightnessctl
];
}

View File

@@ -1,26 +0,0 @@
{
pkgs,
config,
...
}:
{
home.packages = with pkgs; [
grim
slurp
wl-clipboard-rs
];
programs.swappy = {
enable = true;
# Configuration options: https://github.com/jtheoof/swappy?tab=readme-ov-file#config
settings = {
Default = {
save_dir = config.xdg.userDirs.extraConfig.SCREENSHOTS;
save_filename_format = "%Y%m%d-%H%M%S.png";
show_panel = false;
auto_save = false;
early_exit = true;
};
};
};
}

View File

@@ -1,32 +0,0 @@
{
programs.ssh = {
enable = true;
enableDefaultConfig = false;
matchBlocks = {
"*" = {
addKeysToAgent = "yes";
identityFile = [ "~/.ssh/id_ed25519_sk_rk" ];
};
"stu" = {
hostname = "stu.cs.jmu.edu";
user = "tamassno";
localForwards = [
{
bind.port = 5432;
host = {
address = "data.cs.jmu.edu";
port = 5432;
};
}
];
serverAliveCountMax = 5;
serverAliveInterval = 60;
};
"cluster" = {
hostname = "login02.cluster.cs.jmu.edu";
user = "tamassno";
proxyJump = "stu";
};
};
};
}

View File

@@ -1,89 +0,0 @@
{
inputs,
config,
pkgs,
...
}:
{
imports = [
inputs.stylix.homeModules.stylix
];
# Not really using stylix as it was intended because IMO it sets too many defaults for some
# programs and not enought for others, meaning I wind up setting a lot myself anyway. That
# being said it provides a nice structure for setting fonts, cursors, icons, etc.
stylix = {
enable = true;
autoEnable = false;
polarity = "dark";
base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
cursor = {
name = "catppuccin-mocha-dark-cursors";
package = pkgs.catppuccin-cursors.mochaDark;
size = 16;
};
# For some reason setting the fonts' package option doesn't work.
# Just use home.packages instead
fonts = {
monospace.name = "JetBrainsMono Nerd Font";
sansSerif.name = "Noto Sans";
emoji.name = "Noto Color Emoji";
sizes = {
applications = 12;
terminal = 12;
};
};
icons = {
enable = true;
package = pkgs.morewaita-icon-theme;
light = "MoreWaita";
dark = "MoreWaita";
};
};
# Fonts
home.packages = with pkgs; [
nerd-fonts.jetbrains-mono
noto-fonts
noto-fonts-cjk-sans
noto-fonts-color-emoji
];
gtk = {
enable = true;
colorScheme = config.stylix.polarity;
# iconTheme is set by default by stylix.icons.enable
theme = {
name = "adw-gtk3-${config.stylix.polarity}";
package = pkgs.adw-gtk3;
};
};
qt =
let
qt_settings = ver: {
Appearance = {
color_scheme_path = "${config.xdg.configHome}/${ver}/colors/noctalia.conf";
custom_palette = true;
icon_theme = config.stylix.icons.${config.stylix.polarity};
standard_dialogs = "xdgdesktopportal";
style = "Breeze";
};
Fonts = {
fixed = "\"${config.stylix.fonts.monospace.name},${toString config.stylix.fonts.sizes.applications}\"";
general = "\"${config.stylix.fonts.sansSerif.name},${toString config.stylix.fonts.sizes.applications}\"";
};
};
in
{
enable = true;
platformTheme.name = "qtct";
style.name = "breeze";
qt5ctSettings = qt_settings "qt5ct";
qt6ctSettings = qt_settings "qt6ct";
};
home.sessionVariables = {
QS_ICON_THEME = config.stylix.icons.${config.stylix.polarity};
};
}

View File

@@ -1,146 +0,0 @@
{
config,
pkgs,
...
}:
{
programs = {
alacritty = {
enable = true;
settings = {
general = {
import = [ "${config.xdg.configHome}/alacritty/themes/noctalia.toml" ];
};
font = {
normal = {
family = "${config.stylix.fonts.monospace.name}";
style = "Regular";
};
size = config.stylix.fonts.sizes.terminal;
};
};
};
direnv = {
enable = true;
enableZshIntegration = true;
};
fastfetch = {
enable = true;
};
foot = {
enable = true;
server.enable = false;
settings = {
main = {
term = "xterm-256color";
include = "${config.xdg.configHome}/foot/themes/noctalia";
dpi-aware = "no";
font = "${config.stylix.fonts.monospace.name}:size=${toString config.stylix.fonts.sizes.terminal}";
};
mouse = {
hide-when-typing = "yes";
};
};
};
fzf = {
enable = true;
enableZshIntegration = true;
};
starship = {
enable = true;
enableZshIntegration = true;
settings = {
add_newline = true;
format = pkgs.lib.concatStrings [
"[ [\\[](1)$username([@](bold 2)$hostname)[\\]:](1) $directory( $git_branch)](5)"
"$line_break"
"[ $character](5)"
];
username = {
style_root = "white";
format = "[$user](3)";
disabled = false;
show_always = true;
};
hostname = {
format = "[$hostname](bold 4)";
disabled = false;
ssh_only = false;
};
character = {
success_symbol = "[](bold 5)";
error_symbol = "[](bold 5)";
vimcmd_symbol = "[](bold 5)";
};
directory = {
read_only = "";
format = "[ $path](5)";
read_only_style = "bold white";
truncation_length = 5;
};
git_branch = {
symbol = "";
style = "bright-black";
format = "[$symbol $branch]($style)";
};
scan_timeout = 100;
};
};
zellij = {
enable = true;
enableZshIntegration = true;
settings = {
theme = "catppuccin-mocha";
show_startup_tips = false;
};
};
zoxide = {
enable = true;
enableZshIntegration = true;
};
zsh = {
enable = true;
enableCompletion = false;
antidote = {
enable = true;
plugins = [
"Aloxaf/fzf-tab"
];
};
autosuggestion.enable = true;
dotDir = "${config.xdg.configHome}/zsh";
history = {
append = true;
findNoDups = true;
ignoreSpace = true;
ignoreDups = true;
saveNoDups = true;
share = true;
};
historySubstringSearch = {
enable = true;
searchDownKey = "^p";
searchUpKey = "^n";
};
initContent = ''
# disable sort when completing `git checkout`
zstyle ':completion:*:git-checkout:*' sort false
# set descriptions format to enable group support
# NOTE: don't use escape sequences (like '%F{red}%d%f') here, fzf-tab will ignore them
zstyle ':completion:*:descriptions' format '[%d]'
# preview directory's content when completing cd or zoxide
zstyle ':fzf-tab:complete:cd:*' fzf-preview 'ls --color $realpath'
zstyle ':fzf-tab:complete:__zoxide_z:*' fzf-preview 'ls --color $realpath'
# custom fzf flags
# NOTE: fzf-tab does not follow FZF_DEFAULT_OPTS by default
zstyle ':fzf-tab:*' fzf-flags --color=fg:1,fg+:2 --bind=tab:accept
# switch group using `<` and `>`
zstyle ':fzf-tab:*' switch-group '<' '>'
'';
syntaxHighlighting.enable = true;
shellAliases = {
ff = "fastfetch";
};
};
};
}

View File

@@ -1,15 +0,0 @@
{
programs.vesktop = {
enable = true;
vencord = {
settings = {
oUpdate = false;
autoUpdateNotification = false;
notifyAboutUpdates = false;
useQuickCss = true;
disableMinSize = true;
enabledThemes = [ "noctalia.theme.css" ];
};
};
};
}

View File

@@ -1,37 +0,0 @@
{
config,
...
}:
{
# Not using Vicinae's flake because the server fucking seg faults immediately
programs.vicinae = {
enable = true;
systemd = {
enable = true;
autoStart = true;
};
# For configuration option documentation, see: https://github.com/vicinaehq/vicinae/blob/f6222f1e82fe2077ad42f10a6d6837dc61c67fd0/vicinae/assets/config.jsonc
settings = {
escape_key_behavior = "close_window";
close_on_focus_loss = true;
pop_to_root_on_close = true;
favicon_service = "twenty";
font = {
normal = {
size = 12;
normal = "${config.stylix.fonts.sansSerif.name}";
};
};
theme = {
light = {
name = "noctalia";
icon_theme = "${config.stylix.icons.light}";
};
dark = {
name = "noctalia";
icon_theme = "${config.stylix.icons.dark}";
};
};
};
};
}

View File

@@ -1,34 +0,0 @@
{
config,
pkgs,
...
}:
{
xdg = {
enable = true;
portal = {
enable = true;
configPackages = [ pkgs.gnome-session ];
extraPortals = with pkgs; [
xdg-desktop-portal-gnome
xdg-desktop-portal-gtk
];
};
userDirs = {
enable = true;
createDirectories = true;
extraConfig = {
DEV = "${config.home.homeDirectory}/Dev";
WALLPAPERS = "${config.xdg.userDirs.pictures}/Wallpapers";
SCREENSHOTS = "${config.xdg.userDirs.pictures}/Screenshots";
};
};
};
home.file.".face".source = ../../assets/profile-picture.jpg;
home.file."${config.xdg.userDirs.extraConfig.WALLPAPERS}" = {
source = ../../assets/wallpapers;
recursive = true;
};
}

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