diff --git a/assets/lockscreen.png b/assets/lockscreen.png
new file mode 100644
index 0000000..c42735e
Binary files /dev/null and b/assets/lockscreen.png differ
diff --git a/assets/wallpaper.png b/assets/wallpaper.png
new file mode 100644
index 0000000..7f7903a
Binary files /dev/null and b/assets/wallpaper.png differ
diff --git a/config/dunst.conf b/config/dunst.conf
new file mode 100644
index 0000000..328b280
--- /dev/null
+++ b/config/dunst.conf
@@ -0,0 +1,64 @@
+# https://github.com/catppuccin/dunst/blob/main/src/mocha.conf
+[global]
+ frame_color = "#89B4FA"
+ separator_color= frame
+
+ follow = none
+ width = 300
+ height = 145
+ origin = top-right
+ alignment = "left"
+ vertical_alignment = "center"
+ ellipsize = "middle"
+ offset = "15x15"
+ padding = 15
+ horizontal_padding = 15
+ text_icon_padding = 15
+ icon_position = "left"
+ min_icon_size = 48
+ max_icon_size = 64
+ progress_bar = true
+ progress_bar_height = 8
+ progress_bar_frame_width = 1
+ progress_bar_min_width = 150
+ progress_bar_max_width = 300
+ separator_height = 2
+ frame_width = 2
+ corner_radius = 8
+ transparency = 0
+ gap_size = 8
+ line_height = 0
+ notification_limit = 0
+ idle_threshold = 120
+ history_length = 20
+ show_age_threshold = 60
+ markup = "full"
+ font = "Atkinson Hyperlegible Pro 10"
+ word_wrap = "yes"
+ sort = "yes"
+ shrink = "no"
+ indicate_hidden = "yes"
+ sticky_history = "yes"
+ ignore_newline = "no"
+ show_indicators = "no"
+ stack_duplicates = true
+ always_run_script = true
+ hide_duplicate_count = false
+ ignore_dbusclose = false
+ mouse_left_click = "do_action"
+ mouse_middle_click = "close_all"
+ mouse_right_click = "close_current"
+
+[urgency_low]
+background = "#1E1E2E"
+foreground = "#CDD6F4"
+
+[urgency_normal]
+background = "#1E1E2E"
+foreground = "#CDD6F4"
+
+[urgency_critical]
+background = "#1E1E2E"
+foreground = "#CDD6F4"
+frame_color = "#FAB387"
+
diff --git a/config/nwg-drawer.css b/config/nwg-drawer.css
new file mode 100644
index 0000000..fa7cf4b
--- /dev/null
+++ b/config/nwg-drawer.css
@@ -0,0 +1,27 @@
+window {
+ /*background: @base;*/
+ background: alpha(@base, 0.3);
+ color: @text;
+ font-family: 'Atkinson Hyperlegible Pro', 'Atkinson Hyperlegible', FontAwesome, Noto Sans CJK;
+ font-size: 14px;
+ font-style: normal;
+}
+
+/* search entry */
+entry {
+ background-color: alpha(@surface0, 0.5);
+}
+
+button, image {
+ background: none;
+ border: none
+}
+
+button {
+ padding: 1em 0.5em;
+ border-radius: 1em;
+}
+
+button:hover {
+ background-color: alpha(@surface0, 0.5);
+}
\ No newline at end of file
diff --git a/config/rofi.rasi b/config/rofi.rasi
new file mode 100644
index 0000000..a4cad5c
--- /dev/null
+++ b/config/rofi.rasi
@@ -0,0 +1,98 @@
+* {
+ bg-col: #24273a;
+ bg-col-light: #313244;
+ border-col: #363a4f;
+ selected-col: #45475a;
+ pink: #f5c2e7;
+ fg-col: #cdd6f4;
+ fg-col2: @pink;
+ grey: #bac2de;
+
+ width: 450px;
+}
+
+element-text, element-icon , mode-switcher {
+ background-color: inherit;
+ text-color: inherit;
+}
+
+window {
+ height: 500px;
+ border: 2px;
+ border-radius: 1em;
+ border-color: @pink;
+ background-color: @bg-col;
+}
+
+mainbox {background-color: @bg-col;}
+
+inputbar {
+ margin: 10px 5px 5px 5px;
+ children: [prompt, entry];
+ background-color: @bg-col;
+ padding: 1px;
+}
+
+prompt {
+ background-color: transparent;
+ padding: 1px;
+ text-color: @fg-col;
+ border-radius: 1.5em;
+}
+
+textbox-prompt-colon {
+ expand: true;
+ str: ":";
+}
+
+entry {
+ padding: 1px;
+ margin: 0px;
+ text-color: @fg-col;
+ background-color: @bg-col;
+}
+
+listview {
+ border: 0px 0px 0px;
+ margin: 5px 0px 0px 10px;
+ columns: 1;
+ lines: 10;
+ background-color: @bg-col;
+}
+
+element {
+ padding: 1px;
+ background-color: @bg-col;
+ text-color: @fg-col;
+}
+
+element-icon {size: 12px;}
+
+element.selected {
+ background-color: @selected-col;
+ text-color: @fg-col2;
+}
+
+
+scrollbar {
+ width: 4px ;
+ border: 0;
+ handle-color: @fg-col;
+ handle-width: 8px ;
+ padding: 0;
+}
+
+mode-switcher {spacing: 0;}
+
+button {
+ spacing: 0;
+ background-color: @bg-col-light;
+ text-color: @grey;
+ vertical-align: 0.5;
+ horizontal-align: 0.5;
+}
+
+button.selected {
+ background-color: @bg-col;
+ text-color: @pink;
+}
\ No newline at end of file
diff --git a/config/waybar.css b/config/waybar.css
new file mode 100644
index 0000000..b3bad77
--- /dev/null
+++ b/config/waybar.css
@@ -0,0 +1,101 @@
+* {
+ border: none;
+ border-radius: 0px;
+ min-height: 0;
+}
+
+window#waybar {
+ color: @text;
+ /*background: alpha(@base, 0.6);*/
+ background: @base;
+ border-radius: 1em;
+ /*font-family: VictorMono, Iosevka Nerd Font, Noto Sans CJK;*/
+ /*font-family: 'Atkinson Hyperlegible', FontAwesome, Noto Sans CJK;*/
+ font-family: CozetteVector, FontAwesome, Noto Sans CJK;
+ font-size: 13px;
+ font-style: normal;
+}
+
+box.module, .modules-right box {
+ background-color: @surface0;
+ margin: 0 0.25em;
+ padding: 0.15em 0.25em;
+ border-radius: 1em;
+}
+.modules-right label.module {
+ margin: 0 0.5em;
+}
+
+.modules-right box {
+ padding: 0.15em 0.4em;
+}
+.modules-left, .modules-right {
+ margin: 0.4em 0.5em;
+}
+
+#workspaces {
+ background-color: @surface0;
+ padding: 0;
+}
+
+#workspaces button {
+ background-color: transparent;
+ color: @text;
+ padding: 0 0.4em;
+}
+
+#workspaces button:nth-child(1) {
+ border-top-left-radius: 1em;
+ border-bottom-left-radius: 1em;
+}
+#workspaces button:nth-last-child(1) {
+ border-top-right-radius: 1em;
+ border-bottom-right-radius: 1em;
+}
+
+#workspaces button.empty {
+ color: @overlay0;
+}
+
+#workspaces button.visible {
+ background: @surface1;
+}
+
+#workspaces button.active {
+ background: @pink;
+ color: @surface0;
+}
+
+#workspaces button.urgent {
+ background: @red;
+ color: @surface0;
+}
+
+#window {
+ background: transparent;
+}
+window#waybar.floating #window {
+ color: @pink;
+}
+
+#clock {
+ color: @lavender;
+}
+
+#network {
+ color: @sapphire;
+}
+
+#pulseaudio {
+ color: @pink;
+}
+
+#custom-power {
+ color: @red;
+}
+
+tooltip {
+ color: @text;
+ background: @base;
+ border: 1px solid @pink;
+}
diff --git a/default.nix b/default.nix
index 5f373fb..6be4f64 100755
--- a/default.nix
+++ b/default.nix
@@ -2,16 +2,28 @@
let
inherit (builtins) toString;
- inherit (lib.modules) mkDefault mkIf;
+ inherit (lib.modules) mkDefault mkIf mkAliasOptionModule;
inherit (lib.my) mapModulesRec';
in {
imports =
[
inputs.home-manager.nixosModules.home-manager
(mkAliasOptionModule ["hm"] ["home-manager" "users" config.user.name])
+ inputs.nix-colors.homeManagerModules.default
+ inputs.hyprland.nixosModules.default
]
++ (mapModulesRec' (toString ./modules) import);
+ hm.imports = [
+ inputs.hyprlock.homeManagerModules.hyprlock
+ inputs.hypridle.homeManagerModules.hypridle
+ inputs.hyprland.homeManagerModules.default
+ ];
+
+ environment.variables = {
+ NIXPKGS_ALLOW_UNFREE = "1";
+ };
+
nix = {
package = pkgs.nix;
@@ -27,19 +39,36 @@ in {
keep-derivations = true;
substituters = [
"https://nix-community.cachix.org"
+ "https://nixpkgs-wayland.cachix.org"
+ "https://hyprland.cachix.org"
];
trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
+ "nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA="
+ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
];
};
};
- # set our git revision inside `nixos-version`
+ system.stateVersion = mkDefault "23.11";
system.configurationRevision = with inputs; mkIf (self ? rev) self.rev;
-
- # set home stateversion to system stateversion. Just Makes Sense
hm.home.stateVersion = config.system.stateVersion;
+ boot = {
+ kernelPackages = pkgs.linuxPackages_latest;
+ kernelParams=["pci_aspm.policy=performance"];
+ };
+
+ # configure keymap in x11
+ services.xserver.xkb = {
+ layout = "us";
+ # i need to learn this sometime
+ # variant = "workman";
+ };
+ console = {
+ useXkbConfig = mkDefault true;
+ };
+
time.timeZone = mkDefault "America/Los_Angeles";
i18n.defaultLocale = mkDefault "en_US.UTF-8";
@@ -50,10 +79,11 @@ in {
unrar unzip
micro
curl wget
- # im pretty sure removing this breaks nixos-rebuild
- # have fun
+ desktop-file-utils
+ shared-mime-info
+ xdg-user-dirs
+ xdg-utils
git
];
- system.stateVersion = mkDefault "23.11";
}
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..377c687
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,670 @@
+{
+ "nodes": {
+ "base16-schemes": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1696158499,
+ "narHash": "sha256-5yIHgDTPjoX/3oDEfLSQ0eJZdFL1SaCfb9d6M0RmOTM=",
+ "owner": "tinted-theming",
+ "repo": "base16-schemes",
+ "rev": "a9112eaae86d9dd8ee6bb9445b664fba2f94037a",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tinted-theming",
+ "repo": "base16-schemes",
+ "type": "github"
+ }
+ },
+ "catppuccin-vsc": {
+ "inputs": {
+ "nixpkgs": "nixpkgs"
+ },
+ "locked": {
+ "lastModified": 1710544781,
+ "narHash": "sha256-nkxihb3D85k1nZV1CzlB3seMKtTEeKb688sblIGp/Bs=",
+ "owner": "catppuccin",
+ "repo": "vscode",
+ "rev": "d7b96ccac36fd29929bd97bc9357413cc4e0240c",
+ "type": "github"
+ },
+ "original": {
+ "owner": "catppuccin",
+ "repo": "vscode",
+ "type": "github"
+ }
+ },
+ "hardware": {
+ "locked": {
+ "lastModified": 1711352745,
+ "narHash": "sha256-luvqik+i3HTvCbXQZgB6uggvEcxI9uae0nmrgtXJ17U=",
+ "owner": "nixos",
+ "repo": "nixos-hardware",
+ "rev": "9a763a7acc4cfbb8603bb0231fec3eda864f81c0",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "repo": "nixos-hardware",
+ "type": "github"
+ }
+ },
+ "home-manager": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1711604890,
+ "narHash": "sha256-vbI/gxRTq/gHW1Q8z6D/7JG/qGNl3JTimUDX+MwnC3A=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "3142bdcc470e1e291e1fbe942fd69e06bd00c5df",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "type": "github"
+ }
+ },
+ "hyprcursor": {
+ "inputs": {
+ "hyprlang": "hyprlang_2",
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1711466786,
+ "narHash": "sha256-sArxGyUBiCA1in+q6t0QqT+ZJiZ1PyBp7cNPKLmREM0=",
+ "owner": "hyprwm",
+ "repo": "hyprcursor",
+ "rev": "d3876f34779cc03ee51e4aafc0d00a4f187c7544",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprcursor",
+ "type": "github"
+ }
+ },
+ "hypridle": {
+ "inputs": {
+ "hyprlang": "hyprlang",
+ "nixpkgs": "nixpkgs_2",
+ "systems": "systems"
+ },
+ "locked": {
+ "lastModified": 1710180874,
+ "narHash": "sha256-ZSn3wXQuRz36Ta/L+UCFKuUVG6QpwK2QmRkPjpQprU4=",
+ "owner": "hyprwm",
+ "repo": "hypridle",
+ "rev": "4395339a2dc410bcf49f3e24f9ed3024fdb25b0a",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hypridle",
+ "type": "github"
+ }
+ },
+ "hyprland": {
+ "inputs": {
+ "hyprcursor": "hyprcursor",
+ "hyprland-protocols": "hyprland-protocols",
+ "hyprlang": "hyprlang_3",
+ "nixpkgs": "nixpkgs_3",
+ "systems": "systems_3",
+ "wlroots": "wlroots",
+ "xdph": "xdph"
+ },
+ "locked": {
+ "lastModified": 1711673030,
+ "narHash": "sha256-atpS9c2LR56DIURlDLmuKHGmVQj9Xky2aETGhdTwMKg=",
+ "owner": "hyprwm",
+ "repo": "Hyprland",
+ "rev": "fcd9d77b642c0cd45cae61cf10ed1924f2e7945b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "Hyprland",
+ "type": "github"
+ }
+ },
+ "hyprland-catppuccin": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1702668781,
+ "narHash": "sha256-9BhZq9J1LmHfAPBqOr64chiAEzS+YV6zqe9ma95V3no=",
+ "owner": "catppuccin",
+ "repo": "hyprland",
+ "rev": "fc228737d3d0c12e34a7fa155a0fc3192e5e4017",
+ "type": "github"
+ },
+ "original": {
+ "owner": "catppuccin",
+ "repo": "hyprland",
+ "type": "github"
+ }
+ },
+ "hyprland-protocols": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1691753796,
+ "narHash": "sha256-zOEwiWoXk3j3+EoF3ySUJmberFewWlagvewDRuWYAso=",
+ "owner": "hyprwm",
+ "repo": "hyprland-protocols",
+ "rev": "0c2ce70625cb30aef199cb388f99e19a61a6ce03",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprland-protocols",
+ "type": "github"
+ }
+ },
+ "hyprlang": {
+ "inputs": {
+ "nixpkgs": [
+ "hypridle",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1708212860,
+ "narHash": "sha256-nW3Zrhh9RJcMTvOcXAaKADnJM/g6tDf3121lJtTHnYo=",
+ "owner": "hyprwm",
+ "repo": "hyprlang",
+ "rev": "11d5ccda071c153dfdc18ef65338956a51cef96a",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprlang",
+ "type": "github"
+ }
+ },
+ "hyprlang_2": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprland",
+ "hyprcursor",
+ "nixpkgs"
+ ],
+ "systems": "systems_2"
+ },
+ "locked": {
+ "lastModified": 1709914708,
+ "narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=",
+ "owner": "hyprwm",
+ "repo": "hyprlang",
+ "rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprlang",
+ "type": "github"
+ }
+ },
+ "hyprlang_3": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1711250455,
+ "narHash": "sha256-LSq1ZsTpeD7xsqvlsepDEelWRDtAhqwetp6PusHXJRo=",
+ "owner": "hyprwm",
+ "repo": "hyprlang",
+ "rev": "b3e430f81f3364c5dd1a3cc9995706a4799eb3fa",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprlang",
+ "type": "github"
+ }
+ },
+ "hyprlang_4": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprlock",
+ "nixpkgs"
+ ],
+ "systems": "systems_4"
+ },
+ "locked": {
+ "lastModified": 1711250455,
+ "narHash": "sha256-LSq1ZsTpeD7xsqvlsepDEelWRDtAhqwetp6PusHXJRo=",
+ "owner": "hyprwm",
+ "repo": "hyprlang",
+ "rev": "b3e430f81f3364c5dd1a3cc9995706a4799eb3fa",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprlang",
+ "type": "github"
+ }
+ },
+ "hyprlang_5": {
+ "inputs": {
+ "nixpkgs": "nixpkgs_5",
+ "systems": "systems_6"
+ },
+ "locked": {
+ "lastModified": 1711250455,
+ "narHash": "sha256-LSq1ZsTpeD7xsqvlsepDEelWRDtAhqwetp6PusHXJRo=",
+ "owner": "hyprwm",
+ "repo": "hyprlang",
+ "rev": "b3e430f81f3364c5dd1a3cc9995706a4799eb3fa",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprlang",
+ "type": "github"
+ }
+ },
+ "hyprlock": {
+ "inputs": {
+ "hyprlang": "hyprlang_4",
+ "nixpkgs": "nixpkgs_4",
+ "systems": "systems_5"
+ },
+ "locked": {
+ "lastModified": 1711622429,
+ "narHash": "sha256-JwHbbmAzX1Kfq1XAs06lKbk2TZL7mH/yLczG4BaiuTs=",
+ "owner": "hyprwm",
+ "repo": "hyprlock",
+ "rev": "7f8c9b6addce5174af78acaf1eb1d726fc4133b5",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprlock",
+ "type": "github"
+ }
+ },
+ "hyprpaper": {
+ "inputs": {
+ "hyprlang": "hyprlang_5",
+ "nixpkgs": "nixpkgs_6",
+ "systems": "systems_7"
+ },
+ "locked": {
+ "lastModified": 1711556036,
+ "narHash": "sha256-z+ZgMjGC8540k3Z6Z49ZnEvbWyLGXtWPSCagMOrmuXk=",
+ "owner": "hyprwm",
+ "repo": "hyprpaper",
+ "rev": "5838c90cd29374935930281f62bc131d8bcf2295",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprpaper",
+ "type": "github"
+ }
+ },
+ "nix-colors": {
+ "inputs": {
+ "base16-schemes": "base16-schemes",
+ "nixpkgs-lib": "nixpkgs-lib"
+ },
+ "locked": {
+ "lastModified": 1707825078,
+ "narHash": "sha256-hTfge2J2W+42SZ7VHXkf4kjU+qzFqPeC9k66jAUBMHk=",
+ "owner": "misterio77",
+ "repo": "nix-colors",
+ "rev": "b01f024090d2c4fc3152cd0cf12027a7b8453ba1",
+ "type": "github"
+ },
+ "original": {
+ "owner": "misterio77",
+ "repo": "nix-colors",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1707268954,
+ "narHash": "sha256-2en1kvde3cJVc3ZnTy8QeD2oKcseLFjYPLKhIGDanQ0=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "f8e2ebd66d097614d51a56a755450d4ae1632df1",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs-lib": {
+ "locked": {
+ "lastModified": 1697935651,
+ "narHash": "sha256-qOfWjQ2JQSQL15KLh6D7xQhx0qgZlYZTYlcEiRuAMMw=",
+ "owner": "nix-community",
+ "repo": "nixpkgs.lib",
+ "rev": "e1e11fdbb01113d85c7f41cada9d2847660e3902",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "nixpkgs.lib",
+ "type": "github"
+ }
+ },
+ "nixpkgs_2": {
+ "locked": {
+ "lastModified": 1708475490,
+ "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "0e74ca98a74bc7270d28838369593635a5db3260",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_3": {
+ "locked": {
+ "lastModified": 1711523803,
+ "narHash": "sha256-UKcYiHWHQynzj6CN/vTcix4yd1eCu1uFdsuarupdCQQ=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "2726f127c15a4cc9810843b96cad73c7eb39e443",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_4": {
+ "locked": {
+ "lastModified": 1711523803,
+ "narHash": "sha256-UKcYiHWHQynzj6CN/vTcix4yd1eCu1uFdsuarupdCQQ=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "2726f127c15a4cc9810843b96cad73c7eb39e443",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_5": {
+ "locked": {
+ "lastModified": 1708475490,
+ "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "0e74ca98a74bc7270d28838369593635a5db3260",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_6": {
+ "locked": {
+ "lastModified": 1711163522,
+ "narHash": "sha256-YN/Ciidm+A0fmJPWlHBGvVkcarYWSC+s3NTPk/P+q3c=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "44d0940ea560dee511026a53f0e2e2cde489b4d4",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_7": {
+ "locked": {
+ "lastModified": 1711523803,
+ "narHash": "sha256-UKcYiHWHQynzj6CN/vTcix4yd1eCu1uFdsuarupdCQQ=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "2726f127c15a4cc9810843b96cad73c7eb39e443",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "catppuccin-vsc": "catppuccin-vsc",
+ "hardware": "hardware",
+ "home-manager": "home-manager",
+ "hypridle": "hypridle",
+ "hyprland": "hyprland",
+ "hyprland-catppuccin": "hyprland-catppuccin",
+ "hyprlock": "hyprlock",
+ "hyprpaper": "hyprpaper",
+ "nix-colors": "nix-colors",
+ "nixpkgs": "nixpkgs_7",
+ "waybar-catppuccin": "waybar-catppuccin"
+ }
+ },
+ "systems": {
+ "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_2": {
+ "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_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": {
+ "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_5": {
+ "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_6": {
+ "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_7": {
+ "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"
+ }
+ },
+ "waybar-catppuccin": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1678438606,
+ "narHash": "sha256-WLJMA2X20E5PCPg0ZPtSop0bfmu+pLImP9t8A8V4QK8=",
+ "owner": "catppuccin",
+ "repo": "waybar",
+ "rev": "f74ab1eecf2dcaf22569b396eed53b2b2fbe8aff",
+ "type": "github"
+ },
+ "original": {
+ "owner": "catppuccin",
+ "repo": "waybar",
+ "type": "github"
+ }
+ },
+ "wlroots": {
+ "flake": false,
+ "locked": {
+ "host": "gitlab.freedesktop.org",
+ "lastModified": 1709983277,
+ "narHash": "sha256-wXWIJLd4F2JZeMaihWVDW/yYXCLEC8OpeNJZg9a9ly8=",
+ "owner": "wlroots",
+ "repo": "wlroots",
+ "rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b",
+ "type": "gitlab"
+ },
+ "original": {
+ "host": "gitlab.freedesktop.org",
+ "owner": "wlroots",
+ "repo": "wlroots",
+ "rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b",
+ "type": "gitlab"
+ }
+ },
+ "xdph": {
+ "inputs": {
+ "hyprland-protocols": [
+ "hyprland",
+ "hyprland-protocols"
+ ],
+ "hyprlang": [
+ "hyprland",
+ "hyprlang"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1709299639,
+ "narHash": "sha256-jYqJM5khksLIbqSxCLUUcqEgI+O2LdlSlcMEBs39CAU=",
+ "owner": "hyprwm",
+ "repo": "xdg-desktop-portal-hyprland",
+ "rev": "2d2fb547178ec025da643db57d40a971507b82fe",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "xdg-desktop-portal-hyprland",
+ "type": "github"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
index e26fc20..df8c7bd 100755
--- a/flake.nix
+++ b/flake.nix
@@ -4,8 +4,25 @@
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+ flake-parts.url = "github:hercules-ci/flake-parts";
+
home-manager.url = "github:nix-community/home-manager";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
+
+ hardware.url = "github:nixos/nixos-hardware";
+ nix-colors.url = "github:misterio77/nix-colors";
+
+ hyprland.url = "github:hyprwm/Hyprland";
+ hyprlock.url = "github:hyprwm/hyprlock";
+ hypridle.url = "github:hyprwm/hypridle";
+ hyprpaper.url = "github:hyprwm/hyprpaper";
+
+ waybar-catppuccin.url = "github:catppuccin/waybar";
+ waybar-catppuccin.flake = false;
+ hyprland-catppuccin.url = "github:catppuccin/hyprland";
+ hyprland-catppuccin.flake = false;
+
+ catppuccin-vsc.url = "github:catppuccin/vscode";
};
outputs = inputs @ { self, nixpkgs, ... }:
@@ -20,7 +37,7 @@
config.allowAliases = false;
overlays = extraOverlays ++ (lib.attrValues self.overlays);
};
- pkgs = mkPkgs nixpkgs [ self.overlays.default ];
+ pkgs = mkPkgs nixpkgs [ self.overlays.default inputs.catppuccin-vsc.overlays.default ];
lib = nixpkgs.lib.extend (final: prev: {
my = import ./lib {
diff --git a/packages/.gitkeep b/goop.lua
old mode 100755
new mode 100644
similarity index 100%
rename from packages/.gitkeep
rename to goop.lua
diff --git a/hosts/goopnet-interface/default.nix b/hosts/goopnet-interface/default.nix
index 86ca36a..ac8f681 100755
--- a/hosts/goopnet-interface/default.nix
+++ b/hosts/goopnet-interface/default.nix
@@ -1,6 +1,6 @@
{ config, lib, pkgs, ... }:
-in {
+{
imports = [
./hardware.nix
];
@@ -9,19 +9,60 @@ in {
# archives
zip xz unzip p7zip
# utils
- ripgrep jq
+ ripgrep jq libqalculate
# nix
nix-output-monitor
# system
- btop duf killall
+ btop duf lm_sensors ethtool pciutils usbutils powertop killall
+ # debug
+ strace ltrace lsof
+ # apps
+ firefox mpv qalculate-gtk
# misc
- file which tree
+ bat file which tree yt-dlp
] ++ (with pkgs.my; [
- # none yet
+ # none yet
+ ]) ++ (with pkgs.gnome; [
+ # yay gnomeware!!!!!!!!!!!!!! yum
+ nautilus gnome-disk-utility pkgs.gedit file-roller gnome-system-monitor loupe
]);
modules = {
- security.useDoas = false;
+ security.useDoas = true;
+
+ hardware = {
+ pipewire.enable = true;
+ };
+ desktop = {
+ envProto = "wayland";
+
+ hyprland.enable = true;
+ hyprlock.enable = true;
+ hypridle.enable = true;
+ hyprpaper.enable = true;
+
+ dunst.enable = true;
+ rofi.enable = true;
+ nwg-drawer.enable = true;
+ waybar.enable = true;
+
+ sddm.enable = true;
+
+ themes.active = "catppuccin";
+ };
+ software = {
+ # system
+ system.wezterm.enable = true;
+ system.fish.enable = true;
+ # editors
+ editors.micro.enable = true;
+ editors.vscode.enable = true;
+ # distractions
+ distractions.discord.enable = true;
+ distractions.discord.armcord = true;
+ # dev
+ dev.git.enable = true;
+ };
};
networking.networkmanager.enable = true;
diff --git a/hosts/goopnet-interface/hardware.nix b/hosts/goopnet-interface/hardware.nix
index 83a985a..4b949c5 100755
--- a/hosts/goopnet-interface/hardware.nix
+++ b/hosts/goopnet-interface/hardware.nix
@@ -1,32 +1,68 @@
-{ config, lib, pkgs, modulesPath, ... }:
+{ inputs, config, lib, pkgs, modulesPath, ... }:
{
imports =
[
+ inputs.hardware.nixosModules.common-cpu-intel
+ inputs.hardware.nixosModules.common-gpu-nvidia
+
(modulesPath + "/installer/scan/not-detected.nix")
];
- boot = {
- initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "sdhci_pci" ];
- initrd.kernelModules = [ ];
- kernelModules = [ ];
- extraModulePackages = [ ];
- # TODO: move bootloader, networking, boot speed to another file?
- kernelPackages = pkgs.linuxPackages_latest;
- loader = {
- # use u-boot over grub
- grub.enable = lib.mkForce false;
- generic-extlinux-compatible.enable = true;
- };
+ boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "sdhci_pci" ];
+ boot.initrd.kernelModules = [ ];
+ boot.kernelModules = [ "kvm-intel" ];
+ boot.extraModulePackages = [ ];
+
+ boot.loader = {
+ # use systemd-boot over grub
+ grub.enable = lib.mkForce false;
+ systemd-boot.enable = true;
+ efi.canTouchEfiVariables = true;
};
- fileSystems."/" = {
- device = "/dev/disk/by-uuid/44444444-4444-4444-8888-888888888888";
+ # nvidia bullshit. Wow
+ # i really, *really* wish i had an AMD card rn
+ hardware.nvidia = {
+ # this will cause problems down the line, but man i need that explicit sync ASAP
+ package = config.boot.kernelPackages.nvidiaPackages.beta;
+ modesetting.enable = true;
+ # powermanagement breaks suspend i guess??
+ #
+ # im about to suspend lets see if turning it off fixed it
+ #
+ # it did not !! this time our computer actually shut off fully but..
+ # hyprland turned into an eldrich horror then crashed. Lets just not for now!
+ # powerManagement.enable = false;
+
+ prime = {
+ offload = {
+ enable = true;
+ };
+
+ intelBusId = "PCI:0:2:0";
+ nvidiaBusId = "PCI:1:0:0";
+ };
+ };
+ hardware.opengl = {
+ enable = true;
+ driSupport = true;
+ driSupport32Bit = true;
+ };
+
+ fileSystems."/" =
+ { device = "/dev/disk/by-uuid/08cfbb11-5943-4627-a2fc-fd41ce578027";
fsType = "ext4";
};
- swapDevices =
- [ ];
+ fileSystems."/boot" =
+ { device = "/dev/disk/by-uuid/C321-2746";
+ fsType = "vfat";
+ };
+
+ swapDevices =
+ [ { device = "/dev/disk/by-uuid/04eddb76-4925-4192-a472-1c2c7e4ac9f7"; }
+ ];
# 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
@@ -36,6 +72,6 @@
# networking.interfaces.end0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlan0.useDHCP = lib.mkDefault true;
- nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
- powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand";
+ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
+ hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
diff --git a/lib/options.nix b/lib/options.nix
new file mode 100644
index 0000000..8853e02
--- /dev/null
+++ b/lib/options.nix
@@ -0,0 +1,7 @@
+{lib, ...}: let
+ inherit (lib.options) mkOption;
+in {
+ mkOpt = type: default: mkOption {inherit type default;};
+
+ mkOpt' = type: default: description: mkOption {inherit type default description;};
+}
diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix
new file mode 100644
index 0000000..ac36a75
--- /dev/null
+++ b/modules/desktop/default.nix
@@ -0,0 +1,47 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+let
+ cfg = config.modules.desktop;
+in {
+ options.modules.desktop = {
+ envProto = mkOption {
+ type = types.nullOr (types.enum ["x11" "wayland"]);
+ description = "What display protocol to use";
+ };
+ };
+
+ config = mkMerge [
+ {
+ qt = {
+ enable = true;
+ platformTheme = "gnome";
+ style = "adwaita-dark";
+ };
+
+ modules.desktop.fonts.enable = builtins.trace "enabling fonts" true;
+ modules.desktop.fonts.baseFonts = builtins.trace "enabling basefonts" true;
+ }
+ (mkIf (cfg.envProto == "wayland") {
+ hm.home.packages = with pkgs; [ wl-clipboard-x11 ];
+
+ environment.sessionVariables = {
+ # magic, dont ask
+ NIXOS_OZONE_WL = "1";
+ _JAVA_AWT_WM_NONEREPARENTING = "1";
+ GDK_BACKEND = "wayland,x11";
+ ANKI_WAYLAND = "1";
+ XDG_SESSION_TYPE = "wayland";
+ SDL_VIDEODRIVER = "wayland";
+ CLUTTER_BACKEND = "wayland";
+ # this fixes cursors on nvidia, maybe move all nvidia stuff to a module? or put this in hardware
+ WLR_NO_HARDWARE_CURSORS = "1";
+ };
+ })
+ (mkIf (cfg.envProto == "x11") {
+ hm.home.packages = with pkgs; [ xclip ];
+
+ services.xserver.excludePackages = [ pkgs.xterm ];
+ })
+ ];
+}
diff --git a/modules/desktop/dunst.nix b/modules/desktop/dunst.nix
new file mode 100644
index 0000000..c0a41bd
--- /dev/null
+++ b/modules/desktop/dunst.nix
@@ -0,0 +1,17 @@
+{ lib, config, ... }:
+
+with lib;
+let
+ cfg = config.modules.desktop.dunst;
+in {
+ options.modules.desktop.dunst = {
+ enable = mkEnableOption "Enable dunst, a lightweight replacement for the notification daemons provided by most desktop environments";
+ };
+
+ config = mkIf cfg.enable {
+ hm.services.dunst = {
+ enable = true;
+ configFile = ../../config/dunst.conf;
+ };
+ };
+}
diff --git a/modules/desktop/fonts.nix b/modules/desktop/fonts.nix
new file mode 100644
index 0000000..bfdd0f5
--- /dev/null
+++ b/modules/desktop/fonts.nix
@@ -0,0 +1,117 @@
+{ lib, config, pkgs, ... }:
+
+with lib;
+let
+ # ty https://github.com/Misterio77/nix-config/blob/main/modules/home-manager/fonts.nix
+ mkFontOption = kind: default: {
+ family = mkOption {
+ type = types.str;
+ default = default.family;
+ description = "Family name for ${kind} font profile";
+ example = "Fira Code";
+ };
+ package = mkOption {
+ type = types.package;
+ default = default.package;
+ description = "Package for ${kind} font profile";
+ example = "pkgs.fira-code";
+ };
+ size = mkOption {
+ type = types.number;
+ default = default.size;
+ description = "${kind} font profile size, px";
+ example = "11";
+ };
+ };
+ cfg = config.modules.desktop.fonts;
+in {
+ options.modules.desktop.fonts = {
+ enable = mkEnableOption "Enable the font configuration module, containing system fonts";
+ baseFonts = mkEnableOption "Add an extra set of extra base fonts";
+
+ fonts = {
+ sans = mkFontOption "sans" {
+ package = pkgs.my.atkinson-hyperlegible-pro;
+ family = "Atkinson Hyperlegible Pro";
+
+ size = 11;
+ };
+ sansSerif = mkFontOption "sans-serif" {
+ package = pkgs.my.atkinson-hyperlegible-pro;
+ family = "Atkinson Hyperlegible Pro";
+
+ size = 11;
+ };
+ monospace = mkFontOption "monospace" {
+ package = pkgs.cozette;
+ family = "CozetteVector";
+
+ size = 10;
+ };
+ monospaceBitmap = mkFontOption "bitmap monospace" {
+ package = pkgs.cozette;
+ family = "Cozette";
+
+ size = 10;
+ };
+ emoji = mkFontOption "emoji" {
+ package = pkgs.twitter-color-emoji;
+ family = "Twitter Color Emoji";
+
+ size = 10; # not applicable, but whatever
+ };
+ };
+ };
+
+ config = mkIf cfg.enable {
+ fonts = {
+ fontDir.enable = true;
+ fontconfig.enable = true;
+ fontconfig.defaultFonts = {
+ sans = [ cfg.fonts.sans.family ];
+ sansSerif = [ cfg.fonts.sansSerif.family ];
+ monospace = [ cfg.fonts.monospace.family ];
+ emoji = [ cfg.fonts.emoji.family ];
+ };
+ enableGhostscriptFonts = true;
+ packages = with pkgs; [
+ corefonts
+ noto-fonts
+ noto-fonts-cjk-sans
+ liberation_ttf
+ ] ++ [
+ cfg.fonts.sans.package
+ cfg.fonts.sansSerif.package
+ cfg.fonts.monospace.package
+ cfg.fonts.monospaceBitmap.package
+ cfg.fonts.emoji.package
+ ];
+ };
+
+ hm.gtk.enable = true;
+ hm.gtk.font = {
+ inherit (cfg.fonts.sans) package name size;
+ };
+
+ hm.dconf.settings = {
+ "org/gnome/desktop/interface".font-name = with cfg.fonts.sans; "${family} ${toString size}";
+ "org/gnome/desktop/interface".document-font-name = with cfg.fonts.sansSerif; "${family} ${toString size}";
+ "org/gnome/desktop/interface".monospace-font-name = with cfg.fonts.monospace; "${family} ${toString size}";
+ };
+ } // (mkIf cfg.baseFonts {
+ fonts.enableDefaultPackages = true;
+ fonts.packages = with pkgs; [
+ fira-code
+ fira-code-symbols
+ mplus-outline-fonts.githubRelease
+ dina-font
+ proggyfonts
+ atkinson-hyperlegible
+ cozette
+ twemoji-color-font
+ noto-fonts-color-emoji
+ noto-fonts-monochrome-emoji
+ font-awesome
+ ];
+ });
+}
diff --git a/modules/desktop/hypridle.nix b/modules/desktop/hypridle.nix
new file mode 100644
index 0000000..bd4b0f4
--- /dev/null
+++ b/modules/desktop/hypridle.nix
@@ -0,0 +1,43 @@
+{ lib, config, pkgs, system, inputs , ... }:
+
+with lib;
+let
+ cfg = config.modules.desktop.hypridle;
+in {
+ options.modules.desktop.hypridle = {
+ enable = mkEnableOption "Enable hypridle, hyprland's idle daemon";
+ package = mkOption {
+ type = types.package;
+ default = inputs.hypridle.packages.${system}.hypridle;
+ example = "pkgs.hypridle";
+ };
+ };
+
+ config = mkIf cfg.enable {
+ hm.services.hypridle = {
+ enable = true;
+ package = cfg.package;
+
+ lockCmd = "${lib.getExe config.modules.desktop.hyprlock.package}";
+ unlockCmd = "pkill -USR1 hyprlock";
+
+ listeners = let
+ hyprctl = "${config.modules.desktop.hyprland.package}/bin/hyprctl";
+ in [
+ {
+ timeout = 90; # 1.5 min
+ onTimeout = "${hyprctl} dispatch dpms off"; # turn off screen
+ onResume = "${hyprctl} dispatch dpms on"; # turn it back on
+ }
+ {
+ timeout = 60 * 2; # 2 min
+ onTimeout = "loginctl lock-session"; # lock computer
+ }
+ {
+ timeout = 60 * 30; # 15 min
+ onTimeout = "systemctl suspend"; # sleep/suspend
+ }
+ ];
+ };
+ };
+}
diff --git a/modules/desktop/hyprland.nix b/modules/desktop/hyprland.nix
new file mode 100644
index 0000000..33fbae8
--- /dev/null
+++ b/modules/desktop/hyprland.nix
@@ -0,0 +1,201 @@
+{ inputs, lib, config, system, pkgs, ... }:
+
+with lib;
+let
+ cfg = config.modules.desktop.hyprland;
+ hyprpkgs = inputs.hyprland.packages.${system};
+in {
+ options.modules.desktop.hyprland = {
+ enable = mkEnableOption "Enable hyprland, a dynamic tiling wayland compositor based on wlroots that doesn't sacrifice on its looks";
+ package = mkOption {
+ type = types.package;
+ default = hyprpkgs.hyprland;
+ example = "pkgs.hyprland";
+ };
+ portalPackage = mkOption {
+ type = types.package;
+ default = hyprpkgs.xdg-desktop-portal-hyprland;
+ example = "pkgs.xdg-desktop-portal-hyprland";
+ };
+ };
+
+ config = mkIf cfg.enable {
+ services.xserver.displayManager.sessionPackages = [ cfg.package ];
+ xdg.portal = {
+ enable = true;
+ extraPortals = [ pkgs.xdg-desktop-portal-gtk cfg.portalPackage ];
+ config = {
+ common = {
+ default = [ "hyprland" "gtk" ];
+ };
+ };
+ };
+ hm.wayland.windowManager.hyprland = {
+ enable = true;
+ xwayland.enable = true;
+ package = cfg.package;
+
+ settings = {
+ source = [];
+
+ "$mod" = "SUPER";
+ bindm = [ # "bind mouse"
+ # move/resize windows with mod + lmb/rmb and dragging
+ "$mod, mouse:272, movewindow"
+ "$mod, mouse:273, resizewindow"
+ ];
+ bindel = [ # "bind held & locked"
+ ", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 10%+"
+ ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 10%-"
+ ];
+ bindl = [ # "bind locked"
+ ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
+ ", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
+ ];
+ bindr = [ # "bind released"
+ "SUPER, Super_L, exec, ${lib.getExe pkgs.nwg-drawer}"
+ ];
+ bind = [
+ "$mod, R, exec, ${lib.getExe pkgs.rofi-wayland} -show run"
+ ", print, exec, ${lib.getExe pkgs.grimblast} copy area"
+ "$mod, T, exec, ${lib.getExe pkgs.wezterm}"
+
+ "$mod, Q, killactive, "
+ "$mod, V, togglefloating, "
+ "$mod, P, pseudo, "
+ "$mod, J, togglesplit, "
+
+ # scroll through workspaces with mod + scroll
+ "$mod, mouse_down, workspace, e+1"
+ "$mod, mouse_up, workspace, e-1"
+ ] ++ (
+ # workspaces
+ # binds $mod + [shift +] {1..10} to [move to] workspace {1..10}
+ builtins.concatLists (builtins.genList (
+ x: let
+ ws = let
+ c = (x + 1) / 10;
+ in
+ builtins.toString (x + 1 - (c * 10));
+ in [
+ "$mod, ${ws}, workspace, ${toString (x + 1)}"
+ "$mod SHIFT, ${ws}, movetoworkspace, ${toString (x + 1)}"
+ ]
+ )
+ 10)
+ );
+
+ input = {
+ kb_layout = "us";
+
+ follow_mouse = 1;
+ };
+
+ monitor= [
+ "DVI-D-1, 1920x1080@60, 0x0, 1"
+ "DP-1, 1920x1080@60, 1920x0, 1"
+ ];
+
+ exec-once = [ "${lib.getExe pkgs.networkmanagerapplet}" ];
+
+ env = [
+ "XCURSOR_THEME,${config.modules.desktop.themes.cursorTheme.name}"
+ "XCURSOR_SIZE,24"
+ ];
+
+ general = {
+ gaps_in = 6;
+ gaps_out = 6;
+ border_size = 2;
+ no_border_on_floating = true;
+
+ layout = "dwindle";
+
+ resize_on_border = true;
+ };
+
+ windowrulev2 = [
+ # common popups
+ "float, class:file-roller"
+ "float, class:org.gnome.Loupe"
+ "float, initialTitle:^Open Folder$"
+ "float, initialTitle:^Open File$"
+
+ # fix focus
+ "stayfocused, class:^pinentry-"
+ "stayfocused, class:^rofi-"
+
+ # workspace moving
+ "workspace 1, class:^firefox"
+ "workspace 2, class:code-url-handler"
+ "workspace 4, class:ArmCord"
+ ];
+
+ blurls = [
+ "gtk-layer-shell" # nwg-drawer
+ "waybar"
+ ];
+
+ decoration = {
+ rounding = 10;
+
+ blur = {
+ enabled = true;
+ size = 4;
+ passes = 2;
+ # popups = true;
+ };
+
+ drop_shadow = false;
+ };
+
+ animations = {
+ enabled = true;
+
+ bezier = [
+ "outCubic, 0.33, 1, 0.68, 1"
+ "outExpo, 0.16, 1, 0.3, 1"
+ ];
+
+ animation = [
+ "windows, 1, 5, outExpo, popin"
+ "windowsOut, 1, 5, outCubic, popin 80%"
+ "border, 1, 2, outExpo"
+ "fade, 1, 3, outCubic"
+ "workspaces, 1, 6, outExpo"
+ ];
+ };
+
+ dwindle = {
+ pseudotile = "yes";
+
+ preserve_split = "yes";
+ };
+
+ master = {
+ new_is_master = true;
+ };
+
+ misc = {
+ force_default_wallpaper = 0;
+ disable_splash_rendering = true;
+ disable_hyprland_logo = true;
+ };
+ };
+
+ extraConfig = ''
+ general {
+ col.active_border=$pink
+ col.inactive_border=$surface0
+ }
+ decoration {
+ col.shadow=$surface0
+ col.shadow_inactive=$surface0
+ }
+ misc {
+ background_color=$crust
+ }
+ '';
+ };
+ };
+}
diff --git a/modules/desktop/hyprlock.nix b/modules/desktop/hyprlock.nix
new file mode 100644
index 0000000..b5b1e54
--- /dev/null
+++ b/modules/desktop/hyprlock.nix
@@ -0,0 +1,72 @@
+{ lib, config, inputs, system, ... }:
+
+with lib;
+let
+ cfg = config.modules.desktop.hyprlock;
+in {
+ options.modules.desktop.hyprlock = {
+ enable = mkEnableOption "Enable hyprlock, a simple, fast, multithreaded screen lock for hyprland";
+ package = mkOption {
+ type = types.package;
+ default = inputs.hyprlock.packages.${system}.hyprlock;
+ example = "pkgs.hyprlock";
+ };
+ };
+
+ config = mkIf cfg.enable {
+ security.pam.services.hyprlock.text = "auth include login";
+ powerManagement.resumeCommands = ''
+ ${cfg.package}
+ '';
+ hm.programs.hyprlock = with config.colorScheme.palette; {
+ enable = true;
+ package = cfg.package;
+ general = {
+ hide_cursor = false;
+ no_fade_in = true;
+ no_fade_out = true;
+ };
+ backgrounds = [
+ {
+ path = toString ../../assets/lockscreen.png;
+ blur_passes = 3;
+ blur_size = 6;
+ }
+ ];
+ labels = [
+ {
+ text = "cmd[update:1000] echo \"$(date +'%H:%M')\"";
+ font_size = 58;
+ color = "rgb(${base05})";
+ font_family = config.modules.desktop.fonts.fonts.sansSerif.family;
+ position = { x = 0; y = 30; };
+ }
+ {
+ text = "cmd[update:1000] echo \"$(date + '%A %B %e')\"";
+ font_size = 14;
+ color = "rgb(${base05})";
+ font_family = config.modules.desktop.fonts.fonts.sansSerif.family;
+ position = { x = 0; y = 10; };
+ }
+ ];
+ input-fields = [
+ {
+ size = { width = 300; height = 28; };
+ outline_thickness = 2;
+ dots_size = 0.2;
+ fade_on_empty = false;
+ placeholder_text = "";
+
+ outer_color = "rgb(${base0E})";
+ inner_color = "rgb(${base00})";
+ font_color = "rgb(${base05})";
+ check_color = "rgb(${base02})";
+ fail_color = "rgb(${base08})";
+ capslock_color = "rgb(${base09})";
+
+ position = { x = 0; y = -30; };
+ }
+ ];
+ };
+ };
+}
diff --git a/modules/desktop/hyprpaper.nix b/modules/desktop/hyprpaper.nix
new file mode 100644
index 0000000..acb7d29
--- /dev/null
+++ b/modules/desktop/hyprpaper.nix
@@ -0,0 +1,28 @@
+{ lib, config, inputs, system, ... }:
+
+with lib;
+let
+ cfg = config.modules.desktop.hyprpaper;
+in {
+ options.modules.desktop.hyprpaper = {
+ enable = mkEnableOption "Enable hyprpaper, a wayland wallpaper utility";
+ package = mkOption {
+ type = types.package;
+ default = inputs.hyprpaper.packages.${system}.hyprpaper;
+ example = "pkgs.hyperpaper";
+ };
+ };
+
+ config = mkIf cfg.enable {
+ hm.wayland.windowManager.hyprland.settings.exec-once = [ "${lib.getExe cfg.package}" ];
+ hm.xdg.configFile."hypr/hyprpaper.conf" = let
+ img = ../../assets/wallpaper.png;
+ in {
+ text = ''
+ preload = ${img}
+ wallpaper = ,${img}
+ splash = false
+ '';
+ };
+ };
+}
diff --git a/modules/desktop/nwg-drawer.nix b/modules/desktop/nwg-drawer.nix
new file mode 100644
index 0000000..558f07d
--- /dev/null
+++ b/modules/desktop/nwg-drawer.nix
@@ -0,0 +1,18 @@
+{ lib, config, pkgs, inputs, ... }:
+
+with lib;
+let
+ cfg = config.modules.desktop.nwg-drawer;
+in {
+ options.modules.desktop.nwg-drawer = {
+ enable = mkEnableOption "Enable nwg-drawer, a GTK based application launcher for wayland";
+ };
+
+ config = mkIf cfg.enable {
+ hm.wayland.windowManager.hyprland.settings.exec-once = [ "${lib.getExe pkgs.nwg-drawer} -r -nofs -nocats -ovl -term wezterm -spacing 15 -fm nautilus" ];
+ hm.xdg.configFile."nwg-drawer/drawer.css".text = builtins.concatStringsSep "\n" [
+ "@import \"${inputs.waybar-catppuccin}/themes/mocha.css\";"
+ (lib.readFile ../../config/nwg-drawer.css)
+ ];
+ };
+}
diff --git a/modules/desktop/rofi.nix b/modules/desktop/rofi.nix
new file mode 100644
index 0000000..d687c37
--- /dev/null
+++ b/modules/desktop/rofi.nix
@@ -0,0 +1,22 @@
+{ lib, config, pkgs, ... }:
+
+with lib;
+let
+ cfg = config.modules.desktop.rofi;
+in {
+ options.modules.desktop.rofi = {
+ enable = mkEnableOption "Enable rofi, a window switcher, run dialog and dmenu replacement";
+ };
+
+ config = mkIf cfg.enable {
+ hm.programs.rofi = {
+ enable = true;
+ package = pkgs.rofi-wayland;
+ font = with config.modules.desktop.fonts.fonts.monospace; "${family} ${toString size}";
+ extraConfig = {
+ show-icons = true;
+ };
+ theme = ../../config/rofi.rasi;
+ };
+ };
+}
diff --git a/modules/desktop/sddm.nix b/modules/desktop/sddm.nix
new file mode 100644
index 0000000..5d7c31a
--- /dev/null
+++ b/modules/desktop/sddm.nix
@@ -0,0 +1,30 @@
+{ lib, config, pkgs, ... }:
+
+with lib;
+let
+ cfg = config.modules.desktop.sddm;
+in {
+ options.modules.desktop.sddm = {
+ enable = mkEnableOption "Enable SDDM, a display manager for X11 and Wayland windowing systems";
+ };
+
+ config = mkIf cfg.enable {
+ services.xserver.enable = true; # this is needed, unfortunately!
+ environment.systemPackages = with pkgs; [
+ config.modules.desktop.themes.sddmTheme.package
+ libsForQt5.qt5.qtsvg
+ libsForQt5.qt5.qtgraphicaleffects
+ libsForQt5.qt5.qtquickcontrols2
+ ];
+ services.xserver.displayManager.sddm = {
+ enable = true;
+ wayland.enable = true;
+ theme = config.modules.desktop.themes.sddmTheme.name;
+ settings = {
+ Theme = {
+ CursorTheme = config.modules.desktop.themes.cursorTheme.name;
+ };
+ };
+ };
+ };
+}
diff --git a/modules/desktop/themes/catppuccin/default.nix b/modules/desktop/themes/catppuccin/default.nix
new file mode 100644
index 0000000..519c31b
--- /dev/null
+++ b/modules/desktop/themes/catppuccin/default.nix
@@ -0,0 +1,69 @@
+{ inputs, config, lib, pkgs, ... }:
+
+with lib;
+let
+ cfg = config.modules.desktop.themes;
+ accent = "pink";
+ variant = "mocha";
+in {
+ config = mkIf (cfg.active == "catppuccin") {
+ colorScheme = inputs.nix-colors.colorSchemes.catppuccin-mocha;
+
+ modules.desktop.themes = {
+ dark = true;
+
+ gtkTheme = {
+ name = "Catppuccin-Mocha-Compact-Pink-Dark"; # TODO: put accent in here
+ package = pkgs.catppuccin-gtk.override {
+ variant = variant;
+ accents = [ accent ];
+ tweaks = [ "rimless" ];
+ size = "compact";
+ };
+ };
+
+ iconTheme = {
+ name = "WhiteSur-dark";
+ package = pkgs.whitesur-icon-theme;
+ };
+
+ cursorTheme = {
+ name = "graphite-dark";
+ package = pkgs.graphite-cursors;
+ };
+
+ sddmTheme = {
+ name = "catppuccin-sddm-corners";
+ package = (pkgs.my.catppuccin-sddm-corners.override {
+ config.General = {
+ Background = ../../../../assets/lockscreen.png;
+ Font = config.modules.desktop.fonts.fonts.sansSerif.family;
+ };
+ });
+ };
+
+ editor = {
+ vscode = {
+ colorTheme = {
+ name = "Catppuccin Mocha";
+ extension = (pkgs.vscode-extensions.catppuccin.catppuccin-vsc.override {
+ accent = accent;
+ boldKeywords = false;
+ italicComments = false;
+ italicKeywords = false;
+ extraBordersEnabled = false;
+ workbenchMode = "flat";
+ bracketMode = "rainbow";
+ });
+ };
+ iconTheme = {
+ name = "material-icon-theme";
+ extension = pkgs.vscode-extensions.pkief.material-icon-theme;
+ };
+ };
+ };
+
+ hyprland = "${inputs.hyprland-catppuccin}/themes/${variant}.conf";
+ };
+ };
+}
diff --git a/modules/desktop/themes/default.nix b/modules/desktop/themes/default.nix
new file mode 100644
index 0000000..a4692b3
--- /dev/null
+++ b/modules/desktop/themes/default.nix
@@ -0,0 +1,88 @@
+{ lib, config, ... }:
+
+with lib;
+with lib.my;
+let
+ cfg = config.modules.desktop.themes;
+in {
+ options.modules.desktop.themes = with types; {
+ active = mkOption {
+ type = types.nullOr types.str;
+ default = null;
+ description = "Name of the theme to apply; see modules/desktop/themes for a list of valid options";
+ };
+
+ dark = mkOpt bool false;
+
+ gtkTheme = {
+ name = mkOpt str "";
+ package = mkPackageOption pkgs "gtk" {};
+ };
+ iconTheme = {
+ name = mkOpt str "";
+ package = mkPackageOption pkgs "icon" {};
+ };
+ cursorTheme = {
+ name = mkOpt str "";
+ package = mkPackageOption pkgs "cursor" {};
+ };
+ sddmTheme = {
+ name = mkOpt str "";
+ package = mkPackageOption pkgs "sddm" {};
+ };
+
+ editor = {
+ vscode = {
+ colorTheme = {
+ name = mkOpt str "";
+ extension = mkPackageOption pkgs "extension" {};
+ };
+ iconTheme = {
+ name = mkOpt str "";
+ extension = mkPackageOption pkgs "extension" {};
+ };
+ };
+ };
+
+ hyprland = mkOpt (nullOr str) null;
+ };
+
+ config = mkIf (cfg.active != null) {
+ programs.dconf.enable = true;
+
+ hm.dconf = {
+ enable = true;
+ settings."org/gnome/desktop/interface".color-scheme = mkIf cfg.dark "prefer-dark";
+ settings."org/gnome/desktop/interface".gtk-theme = cfg.gtkTheme.name;
+ settings."org/gnome/desktop/interface".icon-theme = cfg.iconTheme.name;
+ settings."org/gnome/desktop/interface".cursor-theme = cfg.cursorTheme.name;
+
+ settings."org/gnome/shell/extensions/user-theme".name = cfg.gtkTheme.name;
+ };
+
+ hm.gtk = {
+ enable = true;
+ cursorTheme = cfg.cursorTheme;
+ iconTheme = cfg.iconTheme;
+ theme = cfg.gtkTheme;
+ };
+
+ hm.services.dunst.iconTheme = {
+ name = cfg.iconTheme.name;
+ package = cfg.iconTheme.package;
+ };
+
+ hm.programs.vscode = {
+ extensions = [
+ cfg.editor.vscode.colorTheme.extension
+ cfg.editor.vscode.iconTheme.extension
+ ];
+ userSettings = {
+ "workbench.colorTheme" = cfg.editor.vscode.colorTheme.name;
+ "workbench.iconTheme" = cfg.editor.vscode.iconTheme.name;
+ };
+ };
+
+ hm.wayland.windowManager.hyprland.settings.source = mkIf (cfg.hyprland != null) [ cfg.hyprland ];
+ };
+}
diff --git a/modules/desktop/waybar.nix b/modules/desktop/waybar.nix
new file mode 100644
index 0000000..f9dbf92
--- /dev/null
+++ b/modules/desktop/waybar.nix
@@ -0,0 +1,199 @@
+{ lib, config, pkgs, inputs, ... }:
+
+with lib;
+let
+ cfg = config.modules.desktop.waybar;
+in {
+ options.modules.desktop.waybar = {
+ enable = mkEnableOption "Enable Waybar, a lightweight desktop environment based on GTK+";
+ };
+
+ config = mkIf cfg.enable {
+ hm.wayland.windowManager.hyprland.settings.exec-once = [ "${lib.getExe pkgs.waybar}" ];
+ hm.programs.waybar = {
+ enable = true;
+ style = builtins.concatStringsSep "\n" [
+ "@import \"${inputs.waybar-catppuccin}/themes/mocha.css\";"
+ (lib.readFile ../../config/waybar.css)
+ ];
+ settings = {
+ mainBar = {
+ layer = "top";
+ position = "top";
+ #spacing = 4;
+ height = 30;
+ margin-top = 6;
+ margin-left = 6;
+ margin-right = 6;
+ margin-bottom = 0;
+ modules-left = [
+ "hyprland/workspaces"
+ "hyprland/window"
+ ];
+ modules-center = [
+ "clock"
+ ];
+ modules-right = [
+ "group/status"
+ "tray"
+ "group/power"
+ ];
+
+ "group/status" = {
+ orientation = "inherit";
+ modules = [
+ "pulseaudio"
+ "cpu"
+ "memory"
+ #"network"
+ ];
+ };
+ "group/power" = {
+ orientation = "inherit";
+ drawer = {
+ transition-duration = 200;
+ children-class = "not-power";
+ transition-left-to-right = false;
+ };
+ modules = [
+ "custom/power"
+ "custom/lock"
+ "custom/reboot"
+ "custom/quit"
+ ];
+ };
+ "custom/quit" = {
+ format = "";
+ tooltip = true;
+ tooltip-format = "Exit Hyprland";
+ on-click = "${config.modules.desktop.hyprland.package}/bin/hyprctl dispatch exit";
+ };
+ "custom/lock" = {
+ format = "";
+ tooltip = true;
+ tooltip-format = "Lock the system";
+ on-click = "${lib.getExe config.modules.desktop.hyprlock.package}";
+ };
+ "custom/reboot" = {
+ format = "↻";
+ tooltip = true;
+ tooltip-format = "Reboot";
+ on-click = "reboot";
+ };
+ "custom/power" = {
+ format = "⏻";
+ tooltip = true;
+ tooltip-format = "Power off";
+ on-click = "shutdown now";
+ };
+ "hyprland/workspaces" = {
+ format = "{icon}";
+ format-icons = {
+ "1" = "";
+ "2" = "";
+ "3" = "";
+ "4" = "";
+ urgent = "";
+ default = "•";
+ };
+ persistent-workspaces = {
+ "1" = [];
+ "2" = [];
+ "3" = [];
+ "4" = [];
+ };
+ };
+ "hyprland/window" = {
+ format = "{}";
+ icon = true;
+ icon-size = 16;
+ rewrite = {
+ "(.*) - Mozilla Firefox" = "$1";
+ "(.*) - Visual Studio Code" = "$1";
+ #"(.*\\.nix\\s.*)" = "";
+ "(\\S+\\.js\\s.*)" = " $1";
+ "(\\S+\\.ts\\s.*)" = " $1";
+ "(\\S+\\.go\\s.*)" = " $1";
+ "(\\S+\\.lua\\s.*)" = " $1";
+ "(\\S+\\.java\\s.*)" = " $1";
+ "(\\S+\\.rb\\s.*)" = " $1";
+ "(\\S+\\.php\\s.*)" = " $1";
+ "(\\S+\\.jsonc?\\s.*)" = " $1";
+ "(\\S+\\.md\\s.*)" = " $1";
+ "(\\S+\\.txt\\s.*)" = " $1";
+ "(\\S+\\.cs\\s.*)" = " $1";
+ "(\\S+\\.c\\s.*)" = " $1";
+ "(\\S+\\.cpp\\s.*)" = " $1";
+ "(\\S+\\.hs\\s.*)" = " $1";
+ ".*Discord | (.*) | .*" = "$1 - ArmCord";
+ #"(.*) - ArmCord" = "$1";
+ };
+ separate-outputs = true;
+ };
+ pulseaudio = {
+ format = "{icon} {volume}%";
+ format-bluetooth = "{icon} {volume}%";
+ format-muted = "婢 {volume}%";
+ format-icons = {
+ headphone = "";
+ hands-free = "";
+ headset = "";
+ phone = "";
+ portable = "";
+ car = "";
+ default = ["" "" ""];
+ };
+ scroll-step = 1;
+ on-click = "${lib.getExe pkgs.pavucontrol}";
+ ignored-sinks = ["Easy Effects Sink"];
+ };
+ cpu = {
+ interval = 4;
+ format = " {usage}%";
+ };
+ memory = {
+ interval = 4;
+ format = " {percentage}%";
+ tooltip-format = "{used:0.1f}GiB/{avail:0.1f}GiB used\n{swapUsed:0.1f}GiB/{swapAvail:0.1f}GiB swap";
+ };
+ "network" = {
+ format = "";
+ format-ethernet = "";
+ format-wifi = " {signalStrength}%";
+ format-disconnected = "";
+ tooltip-format = "{ifname} via {gwaddr}";
+ tooltip-format-wifi = "connected to {essid}";
+ tooltip-format-ethernet = "{ifname}";
+ tooltip-format-disconnected = "Disconnected";
+ };
+ "clock" = {
+ format = "{:%H:%M}";
+ format-alt = "{:%a %b %d %R}";
+ tooltip-format = "{calendar}";
+ calendar = {
+ mode = "year";
+ mode-mon-col = 3;
+ weeks-pos = "right";
+ on-scroll = 1;
+ on-click-right = "mode";
+ format = {
+ months = "{}";
+ days = "{}";
+ weeks = "W{}";
+ weekdays = "{}";
+ today = "{}";
+ };
+ actions = {
+ on-click-right = "mode";
+ on-click-forward = "tz_up";
+ on-click-backward = "tz_down";
+ on-scroll-up = "shift_up";
+ on-scroll-down = "shift_down";
+ };
+ };
+ };
+ };
+ };
+ };
+ };
+}
diff --git a/modules/hardware/pipewire.nix b/modules/hardware/pipewire.nix
new file mode 100644
index 0000000..406b94c
--- /dev/null
+++ b/modules/hardware/pipewire.nix
@@ -0,0 +1,23 @@
+{ pkgs, config, lib, ... }:
+
+with lib;
+let
+ cfg = config.modules.hardware.pipewire;
+in {
+ options.modules.hardware.pipewire = {
+ enable = mkEnableOption "Enable pipewire, a modern audio server";
+ };
+
+ config = mkIf cfg.enable {
+ sound.enable = true;
+ hardware.pulseaudio.enable = false;
+ security.rtkit.enable = true;
+ services.pipewire = {
+ enable = true;
+ alsa.enable = true;
+ alsa.support32Bit = true;
+ pulse.enable = true;
+ jack.enable = true;
+ };
+ };
+}
diff --git a/modules/software/dev/git.nix b/modules/software/dev/git.nix
new file mode 100644
index 0000000..76dd9e8
--- /dev/null
+++ b/modules/software/dev/git.nix
@@ -0,0 +1,51 @@
+{ pkgs, config, lib, ... }:
+
+with lib;
+let
+ cfg = config.modules.software.dev.git;
+in {
+ options.modules.software.dev.git = {
+ enable = mkEnableOption "Enable git. You know what git is";
+ };
+
+ config = mkIf cfg.enable {
+ hm.programs.git = {
+ enable = true;
+ package = pkgs.gitFull;
+
+ userName = ''Reid "reidlab"'';
+ userEmail = "reidlab325@gmail.com";
+
+ ignores = [
+ # OS related
+ ".DS_Store?"
+ ".DS_Store"
+ ".CFUserTextEncoding"
+ ".Trash"
+ ".Xauthority"
+ "thumbs.db"
+ "Thumbs.db"
+ "Icon?"
+ ];
+
+ aliases = {
+ ranked-authors = "!git authors | sort | uniq -c | sort -n";
+ emails = ''
+ !git log --format="%aE" | sort -u
+ '';
+ email-domains = ''
+ !git log --format="%aE" | awk -F'@' '{print $2}' | sort -u
+ '';
+ graph = ''
+ log --graph --color --pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%x20(%ce)%n%x20%s%n"
+ '';
+ };
+
+ extraConfig = {
+ push.autoSetupRemote = true;
+ pull.rebase = true;
+ init.defaltBranch = "main";
+ };
+ };
+ };
+}
diff --git a/modules/software/distractions/discord.nix b/modules/software/distractions/discord.nix
new file mode 100644
index 0000000..8dd2020
--- /dev/null
+++ b/modules/software/distractions/discord.nix
@@ -0,0 +1,43 @@
+{ lib, config, pkgs, ... }:
+
+with lib;
+let
+ cfg = config.modules.software.distractions.discord;
+in {
+ options.modules.software.distractions.discord = {
+ enable = mkEnableOption "Enable discord, a social messaging app";
+ armcord = mkEnableOption "Use armcord, an alternative discord client.";
+ };
+
+ config = mkIf cfg.enable (mkMerge [
+ (mkIf (!cfg.armcord) {
+ user.packages = let
+ flags =
+ [
+ "--flag-switches-begin"
+ "--flag-switches-end"
+ "--disable-gpu-memory-buffer-video-frames"
+ "--enable-accelerated-mjpeg-decode"
+ "--enable-accelerated-video"
+ "--enable-gpu-rasterization"
+ "--enable-native-gpu-memory-buffers"
+ "--enable-zero-copy"
+ "--ignore-gpu-blocklist"
+ "--disable-features=UseOzonePlatform"
+ "--enable-features=VaapiVideoDecoder"
+ ];
+ discord = (pkgs.discord-canary.override {
+ withOpenASAR = true;
+ withVencord = true;
+ }).overrideAttrs (old: {
+ preInstall = ''
+ gappsWrapperArgs=+("--add-flags" "${concatStringsSep " " flags}")
+ '';
+ });
+ in [ discord ];
+ })
+ (mkIf cfg.armcord {
+ user.packages = with pkgs; [ armcord ];
+ })
+ ]);
+}
\ No newline at end of file
diff --git a/modules/software/editors/micro.nix b/modules/software/editors/micro.nix
new file mode 100644
index 0000000..0618cf1
--- /dev/null
+++ b/modules/software/editors/micro.nix
@@ -0,0 +1,64 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+let
+ cfg = config.modules.software.editors.micro;
+in {
+ options.modules.software.editors.micro = {
+ enable = mkEnableOption "Enable micro, a simple CLI code editor";
+ };
+
+ config = let
+ schemeName = "generated";
+ in mkIf cfg.enable {
+ environment.variables.EDITOR = "micro";
+
+ hm.programs.micro = {
+ enable = true;
+ settings = {
+ autosu = true;
+ clipboard = "external";
+ savecursor = true;
+ scrollbar = true;
+ tabsize = 2;
+ tabstospaces = true;
+
+ colorScheme = schemeName;
+ };
+ };
+
+ hm.home.file.".config/micro/colorschemes/${schemeName}.micro".text = with config.colorScheme.palette; ''
+ color-link default "#${base05},#${base00}"
+ color-link comment "#${base03},#${base00}"
+ color-link identifier "#${base0D},#${base00}"
+ color-link constant "#${base0E},#${base00}"
+ color-link constant.string "#E6DB74,#${base00}"
+ color-link constant.string.char "#BDE6AD,#${base00}"
+ color-link statement "#${base08},#${base00}"
+ color-link symbol.operator "#${base08},#${base00}"
+ color-link preproc "#CB4B16,#${base00}"
+ color-link type "#${base0D},#${base00}"
+ color-link special "#${base0B},#${base00}"
+ color-link underlined "#D33682,#${base00}"
+ color-link error "bold #CB4B16,#${base00}"
+ color-link todo "bold #D33682,#${base00}"
+ color-link hlsearch "#${base00},#E6DB74"
+ color-link statusline "#${base00},#${base05}"
+ color-link tabbar "#${base00},#${base05}"
+ color-link indent-char "#505050,#${base00}"
+ color-link line-number "#AAAAAA,#${base01}"
+ color-link current-line-number "#AAAAAA,#${base00}"
+ color-link diff-added "#00AF00"
+ color-link diff-modified "#FFAF00"
+ color-link diff-deleted "#D70000"
+ color-link gutter-error "#CB4B16,#${base00}"
+ color-link gutter-warning "#E6DB74,#${base00}"
+ color-link cursor-line "#${base01}"
+ color-link color-column "#${base01}"
+ #No extended types; Plain brackets.
+ color-link type.extended "default"
+ #color-link symbol.brackets "default"
+ color-link symbol.tag "#${base0E},#${base00}"
+ '';
+ };
+}
diff --git a/modules/software/editors/vscode.nix b/modules/software/editors/vscode.nix
new file mode 100644
index 0000000..339bdd9
--- /dev/null
+++ b/modules/software/editors/vscode.nix
@@ -0,0 +1,59 @@
+{ config, pkgs, lib, ... }:
+
+with lib;
+let
+ cfg = config.modules.software.editors.vscode;
+in {
+ options.modules.software.editors.vscode = {
+ enable = mkEnableOption "Enable visual studio code, microsoft's gui code editor + IDE";
+ };
+
+ config = mkIf cfg.enable {
+ hm.programs.vscode = {
+ enable = true;
+ extensions = with pkgs.vscode-extensions; [
+ jnoortheen.nix-ide
+ oderwat.indent-rainbow
+ usernamehw.errorlens
+ ms-vsliveshare.vsliveshare
+ ];
+ mutableExtensionsDir = false;
+ enableExtensionUpdateCheck = false;
+ enableUpdateCheck = false;
+ userSettings = with config.modules.desktop.fonts.fonts; {
+ "editor.fontFamily" = "'${monospace.family}', monospace";
+ "editor.fontSize" = monospace.size + 3; # needed??
+
+ "terminal.integrated.fontFamily" = "\"${monospace.family}\"";
+ "terminal.integrated.fontSize" = monospace.size + 3; # needed??
+
+ "telemetry.telemetryLevel" = "off";
+
+ "editor.tabSize" = 4;
+ "editor.cursorSmoothCaretAnimation" = "on";
+
+ "window.dialogStyle" = "custom";
+ "window.titleBarStyle" = "custom";
+
+ "workbench.tips.enabled" = false;
+
+ "nix.enableLanguageServer" = true;
+ "nix.serverPath" = "${lib.getExe pkgs.nil}";
+
+ "security.workspace.trust.untrustedFiles" = "open";
+
+ "explorer.confirmDelete" = false;
+ "explorer.confirmDragAndDrop" = true;
+
+ "editor.smoothScrolling" = true;
+ "editor.wordWrap" = "on";
+ "editor.wrappingStrategy" = "advanced";
+ "editor.fontWeight" = "normal";
+ "editor.semanticHighlighting.enabled" = true;
+
+ # prevent vscode from modifying the terminal colors
+ "terminal.integrated.minimumContrastRatio" = 1;
+ };
+ };
+ };
+}
diff --git a/modules/software/system/fish.nix b/modules/software/system/fish.nix
new file mode 100644
index 0000000..6f816de
--- /dev/null
+++ b/modules/software/system/fish.nix
@@ -0,0 +1,30 @@
+{ config, lib, pkgs, inputs, ... }:
+
+with lib;
+let
+ cfg = config.modules.software.system.fish;
+ nix-colors-lib = inputs.nix-colors.lib.contrib { inherit pkgs; };
+in {
+ options.modules.software.system.fish = {
+ enable = mkEnableOption "Enable fish, the friendly interpreted shell";
+ };
+
+ config = mkIf cfg.enable {
+ user.packages = [ pkgs.grc ];
+
+ environment.systemPackages = with pkgs.fishPlugins; [ fzf-fish tide ];
+
+ users.defaultUserShell = pkgs.fish;
+ programs.fish.enable = true;
+ hm.programs.fish = let
+ colorScript = nix-colors-lib.shellThemeFromScheme { scheme = config.colorScheme; };
+ in {
+ enable = true;
+ plugins = [ { name = "grc"; src = pkgs.fishPlugins.grc.src; } ];
+ interactiveShellInit = ''
+ sh ${colorScript}
+ '';
+ # TODO: add fish greeting?
+ };
+ };
+}
diff --git a/modules/software/system/wezterm.nix b/modules/software/system/wezterm.nix
new file mode 100644
index 0000000..11dc643
--- /dev/null
+++ b/modules/software/system/wezterm.nix
@@ -0,0 +1,42 @@
+{ lib, config, ... }:
+
+with lib;
+let
+ cfg = config.modules.software.system.wezterm;
+in {
+ options.modules.software.system.wezterm = {
+ enable = mkEnableOption "Enable wezterm, a blazingly fast terminal emulator";
+ };
+
+ config = mkIf cfg.enable {
+ environment.variables.TERM = "wezterm";
+
+ hm.programs.wezterm = {
+ enable = true;
+ extraConfig = let
+ fonts = config.modules.desktop.fonts.fonts;
+ in ''
+ local wezterm = require 'wezterm'
+
+ local config = {}
+
+ config.font = wezterm.font '${fonts.monospaceBitmap.family}'
+ config.font_size = ${toString fonts.monospaceBitmap.size}
+ config.freetype_load_flags = 'MONOCHROME'
+ config.enable_wayland = false
+ config.color_scheme = 'Catppuccin Mocha'
+ config.use_fancy_tab_bar = false
+ config.use_resize_increments = true
+ config.initial_cols = 120
+ config.initial_rows = 40
+
+ config.window_frame = {
+ font = wezterm.font '${fonts.sans.family}',
+ font_size = ${toString fonts.sans.size}
+ }
+
+ return config
+ '';
+ };
+ };
+}
diff --git a/modules/user.nix b/modules/user.nix
index 86a57ed..005ba92 100644
--- a/modules/user.nix
+++ b/modules/user.nix
@@ -10,7 +10,7 @@ with lib.my;
config = {
user = rec {
name = "reidlab";
- description = "awesome guy";
+ description = "reid";
extraGroups = ["wheel" "input" "audio" "video" "storage"];
isNormalUser = true;
home = "/home/${name}";
@@ -22,8 +22,16 @@ with lib.my;
users.users.${config.user.name} = mkAliasDefinitions options.user;
home-manager.useUserPackages = true;
+ home-manager.useGlobalPkgs = true;
hm.home.username = config.user.name;
hm.home.homeDirectory = lib.mkForce config.user.home;
+
+ nix.settings = let
+ users = ["root" config.user.name];
+ in {
+ trusted-users = users;
+ allowed-users = users;
+ };
};
}
diff --git a/packages/atkinson-hyperlegible-pro/default.nix b/packages/atkinson-hyperlegible-pro/default.nix
new file mode 100644
index 0000000..2dfda78
--- /dev/null
+++ b/packages/atkinson-hyperlegible-pro/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenvNoCC, fetchFromGitHub }:
+
+stdenvNoCC.mkDerivation {
+ pname = "atkinson-hyperlegible-pro";
+ version = "1.5.1-unstable";
+
+ src = fetchFromGitHub {
+ owner = "jacobxperez";
+ repo = "atkinson-hyperlegible-pro";
+ rev = "2576e71d09f57eac8d5e7d9d42b9e7ce49f759e1";
+ hash = lib.fakeHash;
+ };
+
+ installPhase = ''
+ runHook preInstall
+
+ install -Dm644 -t $out/share/fonts/opentype fonts/otf/*
+
+ runHook postInstall
+ '';
+
+ meta = with lib; {
+ description = "Maintained version of Atkinson Hyperlegible";
+ homepage = "https://jacobxperez.github.io/atkinson-hyperlegible-pro/";
+ license = licenses.ofl;
+ platforms = platforms.all;
+ };
+}
\ No newline at end of file
diff --git a/packages/catppuccin-sddm-corners/default.nix b/packages/catppuccin-sddm-corners/default.nix
new file mode 100644
index 0000000..d0c15eb
--- /dev/null
+++ b/packages/catppuccin-sddm-corners/default.nix
@@ -0,0 +1,175 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+, writeText
+, config ? {}
+}:
+
+let
+ defaultConfig = {
+ General = {
+ ### GENERAL
+
+ # path to the wallpaper. you can drop files in backgrounds/ to use a relative path, or you can just use an absolute path.
+ Background="backgrounds/flatppuccin_macchiato.png";
+
+ # the font to use throughout the theme. use the name of the font family.
+ Font="Liga SFMono Nerd Font";
+
+ # the distance that stuff should be from the screen edge.
+ Padding="50";
+
+ # specify how round corners should be, or set to 0 to disable rounded corners.
+ CornerRadius="5";
+
+ # the font size used for everything excluding the date and time.
+ GeneralFontSize="9";
+
+ # this allows you to adjust the relative scale of UI elements. you should probably keep the value below 1.
+ LoginScale="0.175";
+
+ ### USER PICTURE
+
+ # the width of the outline around the user avatar. set to 0 to disable.
+ UserPictureBorderWidth="5";
+
+ # the color of the outline around the user avatar.
+ UserPictureBorderColor="#c0caf5";
+
+ # the color of the default, blank avatar. note that this isonly visible when you don't have a custom picture set.
+ UserPictureColor="#414868";
+
+ ### TEXT FIELD (USER AND PASSWORD)
+
+ # the color of the text field background for the user and password fields.
+ TextFieldColor="#414868";
+
+ # the color of the text inside the user and password fields.
+ TextFieldTextColor="#c0caf5";
+
+ # the color of the border around the currently selected text field.
+ TextFieldHighlightColor="#c0caf5";
+
+ # the border width of the currently selected text field. set to 0 to disable the border.
+ TextFieldHighlightWidth="3";
+
+ # the placeholder text shown in the user field when nothing is typed.
+ UserFieldBgText="User";
+
+ # the placeholder text shown in the password field when nothing is typed.
+ PasswordFieldBgText="Password";
+
+ ### LOGIN BUTTON
+
+ # the color of the login button text.
+ LoginButtonTextColor="#414868";
+
+ # the color of the login button background.
+ LoginButtonBgColor="#c0caf5";
+
+ # the text to be displayed on the login button.
+ LoginButtonText="Login";
+
+ ### POPUP (POWER, SESSION, AND USER)
+
+ # the background color of the popup. this applies to the power panel, session panel, and user panel.
+ PopupBgColor="#c0caf5";
+
+ # the color of the currently selected entry in the popup. this applies to the power panel, session panel, and user panel.
+ PopupHighlightColor="#414868";
+
+ # the color of the text for the currently selectedoption. only applies to session and user popups.
+ PopupHighlightedTextColor="#c0caf5";
+
+ ### SESSION BUTTON
+
+ # the color of the session button background.
+ SessionButtonColor="#c0caf5";
+
+ # the color of the icon inside the session button.
+ SessionIconColor="#414868";
+
+ ### POWER BUTTON
+
+ # the color of the power button background.
+ PowerButtonColor="#c0caf5";
+
+ # the color of the power button background.
+ PowerIconColor="#414868";
+
+ ### DATE
+
+ # the text color of the date.
+ DateColor="#c0caf5";
+
+ # the font size of the date.
+ DateSize="36";
+
+ # whether the date is bolded. accepts either `true` or `false`.
+ DateIsBold="false";
+
+ # whether the date is bolded. accepts either `true` or `false`.
+ DateOpacity="0.8";
+
+ # specify the formatting of the date.
+ DateFormat="dddd, MMMM d";
+
+ ### TIME
+
+ # the text color of the time.
+ TimeColor="#c0caf5";
+
+ # the font size of the time.
+ TimeSize="48";
+
+ # whether the time is bolded. accepts either `true` or `false`.
+ TimeIsBold="true";
+
+ # the opacity of the time text. set to 1 to disable transparency.
+ TimeOpacity="0.8";
+
+ # specify the formatting of the time.
+ TimeFormat="hh:mm AP";
+ };
+ };
+ mergedConfig = lib.attrsets.recursiveUpdate defaultConfig config;
+in stdenvNoCC.mkDerivation {
+ pname = "catppuccin-sddm-corners";
+ version = "unstable-2023-02-17";
+
+ src = fetchFromGitHub {
+ owner = "khaneliman";
+ repo = "catppuccin-sddm-corners";
+ rev = "7b7a86ee9a5a2905e7e6623d2af5922ce890ef79";
+ hash = "sha256-sTnt8RarNXz3RmYfmx4rD+nMlY8rr2n0EN3ntPzOurw=";
+ };
+
+ dontConfigure = true;
+ dontBuild = true;
+
+ installPhase = let
+ configFile = writeText "catppuccin-sddm-corners-theme-conf" (lib.generators.toINI {
+ # specifies how to format a key/value pair
+ mkKeyValue = lib.generators.mkKeyValueDefault {
+ mkValueString = v: ''"${builtins.toString v}"'';
+ } " = ";
+ } mergedConfig);
+ in ''
+ runHook preInstall
+
+ cp ${configFile} catppuccin/theme.conf
+
+ mkdir -p "$out/share/sddm/themes/"
+ cp -r catppuccin/ "$out/share/sddm/themes/catppuccin-sddm-corners"
+
+ runHook postInstall
+ '';
+
+ meta = {
+ description = "Soothing pastel theme for SDDM based on corners theme.";
+ homepage = "https://github.com/khaneliman/sddm-catppuccin-corners";
+ license = lib.licenses.mit;
+ maintainers = with lib.maintainers; [ khaneliman ];
+ platforms = lib.platforms.linux;
+ };
+}
diff --git a/readme.md b/readme.md
index f0b279f..f654a5c 100755
--- a/readme.md
+++ b/readme.md
@@ -6,9 +6,14 @@ nix flake config! this is just used on my personal computer
this flake is built upon a single user system for all hosts, enforced by [`modules/user.nix`](./modules/user.nix). this makes it alot easier to make moduels that use nixos and `home-manager`
+## hosts
+
+each host should have these files:
+ - `default.nix`, contains everything relating to the basic system
+ - `hardware.nix`, hardware configuration.
+
## todo
-- some weird perl error abt locales when building using doas - `keepEnv` might fix this
- move common config such as bootloader and networking settings to [`default.nix`](./default.nix)
-- leverage nixos-hardware
- flake-parts (hopefully we can merge the 2 repositories once we find a user solution)
+- GOD DAMNIT!!! fonts installed @ [here (line 76)](./modules/desktop/fonts.nix) dont fucking install???