diff --git a/flake.lock b/flake.lock index 7e0959e..8e1531b 100644 --- a/flake.lock +++ b/flake.lock @@ -18,24 +18,6 @@ "type": "github" } }, - "flake-parts": { - "inputs": { - "nixpkgs-lib": "nixpkgs-lib" - }, - "locked": { - "lastModified": 1787559586, - "narHash": "sha256-onL0VLf9vPllmT0H/OlURIU5r5t5WIEl7t4tVNKT0Nw=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "9d0d87172c374f89da73c1cfe6d81ae62feac1f1", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, "fromYaml": { "flake": false, "locked": { @@ -86,21 +68,6 @@ "type": "github" } }, - "nixpkgs-lib": { - "locked": { - "lastModified": 1785031560, - "narHash": "sha256-OmshNvn2vupOFpYinLUu+1Dnpu4n7Q5N3ggGVNHpkUI=", - "owner": "nix-community", - "repo": "nixpkgs.lib", - "rev": "0e79af5e3d4dcfcd676ab5ba3f95d2e3352e078c", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "nixpkgs.lib", - "type": "github" - } - }, "nixpkgs_2": { "locked": { "lastModified": 1788039129, @@ -117,30 +84,13 @@ "type": "github" } }, - "nixpkgs_3": { - "locked": { - "lastModified": 1786719841, - "narHash": "sha256-QcpQOT0NQEFkI77t+YXPZqDJc35iIodG7zinieOwFUg=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "8be7bd0c83f12e2e3bbba07c9044d6fed9e66f7f", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "root": { "inputs": { "base16": "base16", - "flake-parts": "flake-parts", "home-manager": "home-manager", "nixpkgs": "nixpkgs_2", "tt-schemes": "tt-schemes", - "wrappers": "wrappers" + "tt-terminal": "tt-terminal" } }, "tt-schemes": { @@ -159,21 +109,19 @@ "type": "github" } }, - "wrappers": { - "inputs": { - "nixpkgs": "nixpkgs_3" - }, + "tt-terminal": { + "flake": false, "locked": { - "lastModified": 1787722691, - "narHash": "sha256-bWBt7v2FhgG6WTLgSi8nYGi1zXaTdA+vTdCRdvR2vcw=", - "owner": "BirdeeHub", - "repo": "nix-wrapper-modules", - "rev": "04ef216559b18214853879df862f493a9e6bb8cf", + "lastModified": 1786840953, + "narHash": "sha256-R5U9KnrG5cARf90nw5e33Z4A4svwLTRv9qbvFAiAaAY=", + "owner": "tinted-theming", + "repo": "tinted-terminal", + "rev": "993a33342b053b1830e4ccb82448455991dcfd54", "type": "github" }, "original": { - "owner": "BirdeeHub", - "repo": "nix-wrapper-modules", + "owner": "tinted-theming", + "repo": "tinted-terminal", "type": "github" } } diff --git a/flake.nix b/flake.nix index 6a4ad46..a596813 100644 --- a/flake.nix +++ b/flake.nix @@ -1,35 +1,59 @@ { inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - wrappers.url = "github:BirdeeHub/nix-wrapper-modules"; - flake-parts.url = "github:hercules-ci/flake-parts"; base16.url = "github:SenchoPens/base16.nix"; + home-manager.url = "github:nix-community/home-manager"; tt-schemes = { url = "github:tinted-theming/schemes"; flake = false; }; - home-manager.url = "github:nix-community/home-manager"; + tt-terminal = { + url = "github:tinted-theming/tinted-terminal"; + flake = false; + }; + }; outputs = { self, nixpkgs, - wrappers, - flake-parts, base16, home-manager, ... }@inputs: - flake-parts.lib.mkFlake { inherit inputs; } ( - let - theme = "catppuccin-mocha"; - in - { - imports = [ - wrappers.flakeModules.wrappers - (import ./hosts.nix { themeName = theme; }) + let + theme = "catppuccin-mocha"; + in + { + nixosConfigurations.nerv = nixpkgs.lib.nixosSystem { + specialArgs = { inherit inputs; }; + modules = [ + ./theme.nix + ({ pkgs, ... }: { + config.theming.theme = "catppuccin-mocha"; + config.theming.font = "Iosevka"; + config.theming.fontPackage = pkgs.iosevka; + }) + base16.nixosModule + ({ config, ... }: { scheme = "${config.theming.theme}"; }) + ./modules/hosts/nerv/configuration.nix + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.extraSpecialArgs = { inherit inputs; }; + imports = [ + ./modules/home.nix + ./modules/programs/emacs.nix + ./modules/programs/niri.nix + ./modules/programs/foot.nix + ./modules/programs/quickshell.nix + ./modules/programs/fuzzel.nix + ]; + } ]; + }; + + }; - } - ); } diff --git a/hosts.nix b/hosts.nix deleted file mode 100644 index e47bc07..0000000 --- a/hosts.nix +++ /dev/null @@ -1,28 +0,0 @@ -{themeName}: { inputs, config, self, ... }: -{ - flake.nixosConfigurations.nerv = inputs.nixpkgs.lib.nixosSystem { - specialArgs = { inherit inputs; }; - modules = [ - inputs.base16.nixosModule - { scheme = "${inputs.tt-schemes}/base16/${themeName}.yaml"; } - ./modules/hosts/nerv/configuration.nix - ./modules/home.nix - inputs.home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { inherit inputs; }; - } - { - imports = [ - (inputs.wrappers.lib.getInstallModule { - name = "emacs"; - value = inputs.wrappers.lib.wrapperModules.emacs; - }) - ./modules/programs/emacs/emacs.nix - ]; - - } - ]; - }; -} diff --git a/modules/home.nix b/modules/home.nix index e73ed4e..8dd2351 100644 --- a/modules/home.nix +++ b/modules/home.nix @@ -8,10 +8,37 @@ let in { home-manager.users.lucy = { + home.packages = with pkgs; [ + nixd + nixfmt + clang + kdePackages.qtdeclarative + ]; home.stateVersion = "26.05"; + home.pointerCursor = { + enable = true; + name = "macOS"; + package = pkgs.apple-cursor; + size = 24; + }; gtk = { enable = true; colorScheme = "dark"; + theme = { + name = "adw-gtk3-dark"; + package = pkgs.adw-gtk3; + }; + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + font = { + name = config.theming.font; + package = config.theming.fontPackage; + size = 12; + }; + cursorTheme.name = "macOS"; + cursorTheme.size = 24; gtk3.extraCss = '' @define-color theme_bg_color ${c.base00}; @define-color theme_fg_color ${c.base05}; @@ -52,5 +79,6 @@ in @define-color success_color ${c.base0B}; ''; }; + dconf.settings."org/gnome/desktop/interface".color-scheme = "prefer-dark"; }; } diff --git a/modules/hosts/nerv/#nerv.nix# b/modules/hosts/nerv/#nerv.nix# deleted file mode 100644 index 150d2b9..0000000 --- a/modules/hosts/nerv/#nerv.nix# +++ /dev/null @@ -1,9 +0,0 @@ -{ inputs, ... }: { - flake.nixosConfigurations.nerv = inputs.nixpkgs.lib.nixosSystem { - modules = [ - ./configuration.nix - - ]; - }; -} - \ No newline at end of file diff --git a/modules/hosts/nerv/.#nerv.nix b/modules/hosts/nerv/.#nerv.nix deleted file mode 120000 index 3242c7a..0000000 --- a/modules/hosts/nerv/.#nerv.nix +++ /dev/null @@ -1 +0,0 @@ -lucy@nerv.50314:1788169501 \ No newline at end of file diff --git a/modules/hosts/nerv/configuration.nix b/modules/hosts/nerv/configuration.nix index e7c84ea..da7f513 100644 --- a/modules/hosts/nerv/configuration.nix +++ b/modules/hosts/nerv/configuration.nix @@ -20,7 +20,10 @@ networking.networkmanager.enable = true; # enable flakes - nix.settings.experimental-features = [ "nix-command" "flakes" ]; + nix.settings.experimental-features = [ + "nix-command" + "flakes" + ]; # use proprietary nvidia drivers hardware.graphics.enable = true; @@ -39,6 +42,10 @@ i18n.defaultLocale = "en_US.UTF-8"; services.desktopManager.gnome.enable = true; services.displayManager.gdm.enable = true; + programs.niri = { + enable = true; + + }; services.xserver.xkb.layout = "us"; services.pipewire = { enable = true; @@ -62,6 +69,9 @@ git clang ]; + fonts.packages = [ + config.theming.fontPackage + ]; system.stateVersion = "26.05"; # Did you read the comment? } diff --git a/modules/programs/emacs.nix b/modules/programs/emacs.nix new file mode 100644 index 0000000..e79dfe4 --- /dev/null +++ b/modules/programs/emacs.nix @@ -0,0 +1,78 @@ +{ + config, + ... +}: +{ + home-manager.users.lucy.programs.emacs = { + enable = true; + extraPackages = + epkgs: with epkgs.melpaPackages; [ + corfu + cape + qml-mode + lua-mode + elcord + nix-mode + base16-theme + ]; + + extraConfig = '' + ;;; -*- lexical-binding: t; -*- + (setq make-backup-files nil) + (load-theme 'base16-${config.scheme.scheme-slug} t) + (use-package + corfu + :init + (setq + corfu-auto t + corfu-auto-delay 0.2) + (global-corfu-mode)) + + (setq tab-always-indent 'complete) + (use-package + cape + :bind ("C-c p" . cape-prefix-map) ;; Alternative key: M-, M-p, M-+ + :init (add-hook 'completion-at-point-functions #'cape-file)) + (setq corfu-auto-prefix 2) + (use-package qml-mode) + (use-package lua-mode) + (use-package elcord :init (elcord-mode)) + + (add-to-list + 'display-buffer-alist + '("\\*compilation\\*" (display-buffer-reuse-window + display-buffer-below-selected) + (window-height . 0.3))) + + + ;; remove useless shit and set default opts + (setq ring-bell-function 'ignore) + (menu-bar-mode -1) + (tool-bar-mode -1) + (setq display-line-numbers-type 'relative) + (global-display-line-numbers-mode +1) + (global-tab-line-mode 1) + (scroll-bar-mode -1) + (setq inhibit-splash-screen 1) + (setq custom-file "~/.emacs.d/custom.el") + (load custom-file 'noerror) + + + ;; lsp shit + (add-hook 'nix-mode-hook #'eglot-ensure) + (add-hook 'c-mode-hook #'eglot-ensure) + (add-hook 'qml-mode-hook #'eglot-ensure) + (with-eval-after-load 'eglot + (add-to-list 'eglot-server-programs '(nix-mode . ("nixd"))) + (add-to-list 'eglot-server-programs '(qml-mode . ("qmlls")))) + + ;; keybindings + (keymap-global-set "C-c f" 'eglot-format) + (keymap-global-set "C-c t" 'term) + (keymap-global-set "C-c c" 'compile) + (keymap-global-set "C-c k b" 'kill-current-buffer) + (keymap-global-set "C-c k w" 'kill-buffer-and-window) + (windmove-default-keybindings) + ''; + }; +} diff --git a/modules/programs/emacs/emacs.nix b/modules/programs/emacs/emacs.nix deleted file mode 100644 index 8d6e2b1..0000000 --- a/modules/programs/emacs/emacs.nix +++ /dev/null @@ -1,101 +0,0 @@ -{ - inputs, - lib, - config, - ... -}: -let - schemeName = config.scheme; -in -{ - wrappers.emacs = - { - pkgs, - wlib, - ... - }: - let - scheme = (pkgs.callPackage inputs.base16.lib { }).mkSchemeAttrs schemeName; - in - { - enable = true; - imports = [ - wlib.wrapperModules.emacs - ]; - emacsPackages = - epkgs: with epkgs.melpaPackages; [ - corfu - cape - qml-mode - lua-mode - elcord - nix-mode - base16-theme - ]; - - runtimePkgs = with pkgs; [ - nixd - nixfmt - qt6.qtdeclarative - ]; - constructFiles.early-init.content = lib.mkBefore ";;; -*- lexical-binding: t; -*-"; - configFile = '' - ;;; -*- lexical-binding: t; -*- - (setq make-backup-files nil) - (load-theme 'base16-${scheme.scheme-slug} t) - (use-package - corfu - :init - (setq - corfu-auto t - corfu-auto-delay 0.2) - (global-corfu-mode)) - - (setq tab-always-indent 'complete) - (use-package - cape - :bind ("C-c p" . cape-prefix-map) ;; Alternative key: M-, M-p, M-+ - :init (add-hook 'completion-at-point-functions #'cape-file)) - (setq corfu-auto-prefix 2) - (use-package qml-mode) - (use-package lua-mode) - (use-package elcord :init (elcord-mode)) - - (add-to-list - 'display-buffer-alist - '("\\*compilation\\*" (display-buffer-reuse-window - display-buffer-below-selected) - (window-height . 0.3))) - - - ;; remove useless shit and set default opts - (setq ring-bell-function 'ignore) - (menu-bar-mode -1) - (tool-bar-mode -1) - (setq display-line-numbers-type 'relative) - (global-display-line-numbers-mode +1) - (global-tab-line-mode 1) - (scroll-bar-mode -1) - (setq inhibit-splash-screen 1) - (setq custom-file "~/.emacs.d/custom.el") - (load custom-file 'noerror) - - - ;; lsp shit - (add-hook 'nix-mode-hook #'eglot-ensure) - (add-hook 'c-mode-hook #'eglot-ensure) - (add-hook 'qml-mode-hook #'eglot-ensure) - (with-eval-after-load 'eglot - (add-to-list 'eglot-server-programs '(nix-mode . ("nixd"))) - (add-to-list 'eglot-server-programs '(qml-mode . ("qmlls")))) - - ;; keybindings - (keymap-global-set "C-c f" 'eglot-format) - (keymap-global-set "C-c t" 'term) - (keymap-global-set "C-c c" 'compile) - (keymap-global-set "C-c k b" 'kill-current-buffer) - (keymap-global-set "C-c k w" 'kill-buffer-and-window) - (windmove-default-keybindings) - ''; - }; -} diff --git a/modules/programs/foot.nix b/modules/programs/foot.nix new file mode 100644 index 0000000..e063b36 --- /dev/null +++ b/modules/programs/foot.nix @@ -0,0 +1,47 @@ +{ + pkgs, + config, + inputs, + ... +}: +let + c = config.scheme; +in +{ + home-manager.users.lucy.programs.foot = { + enable = true; + settings = { + main = { + font = "${config.theming.font}:size=12"; + pad = "15x15"; + }; + + colors-dark = { + background = c.base00; + foreground = c.base05; + + regular0 = c.base00; + regular1 = c.base08; + regular2 = c.base0B; + regular3 = c.base0A; + regular4 = c.base0D; + regular5 = c.base0E; + regular6 = c.base0C; + regular7 = c.base05; + + bright0 = c.base03; + bright1 = c.base08; + bright2 = c.base0B; + bright3 = c.base0A; + bright4 = c.base0D; + bright5 = c.base0E; + bright6 = c.base0C; + bright7 = c.base07; + + selection-foreground = c.base00; + selection-background = c.base05; + }; + }; + }; + +} diff --git a/modules/programs/fuzzel.nix b/modules/programs/fuzzel.nix new file mode 100644 index 0000000..f490212 --- /dev/null +++ b/modules/programs/fuzzel.nix @@ -0,0 +1,24 @@ +{ config, ... }: +let + c = config.scheme.withHashtag; +in +{ + home-manager.users.lucy = { + programs.fuzzel = { + enable = true; + settings = { + main = { + font = "${config.theming.font}:size=12"; + }; + border.width = 2; + colors = { + background = "${c.base00}ff"; + text = "${c.base05}ff"; + match = "${c.base0D}ff"; + selection = "${c.base0D}ff"; + border = "${c.base0D}ff"; + }; + }; + }; + }; +} diff --git a/modules/programs/niri.nix b/modules/programs/niri.nix new file mode 100644 index 0000000..eb117e1 --- /dev/null +++ b/modules/programs/niri.nix @@ -0,0 +1,153 @@ +{ pkgs, config, ... }: +{ + home-manager.users.lucy.wayland.windowManager.niri = { + enable = true; + extraConfig = '' + prefer-no-csd + environment { + GTK_THEME "adw-gtk3-dark" + XDG_CURRENT_DESKTOP "niri" + XDG_SESSION_TYPE "wayland" + XDG_SESSION_DESKTOP "niri" + QT_QPA_PLATFORM "wayland;xcb" + OZONE_PLATFORM "wayland" + ELECTRON_OZONE_PLATFORM_HINT "auto" + } + cursor { + xcursor-size 24 + xcursor-theme "macOS" + } + input { + keyboard { + xkb { + layout "eu" + } + } + + touchpad { + tap + natural-scroll + } + + mouse { + accel-speed -0.4 + accel-profile "flat" + } + focus-follows-mouse max-scroll-amount="0%" + } + + output "PNP(BNQ) BenQ EX2710Q K6R04023019" { + mode "2560x1440@165.002" + scale 1 + transform "normal" + position x=1920 y=0 + } + output "Dell Inc. DELL P2317H 9KFDW6C533DB" { + position x=0 y=0 + } + + + layout { + gaps 16 + center-focused-column "never" + default-column-width { proportion 0.5; } + focus-ring { + off + } + border { + width 4 + active-color "${config.scheme.withHashtag.base0D}" + inactive-color "${config.scheme.withHashtag.base02}" + } + } + screenshot-path null + animations {} + window-rule { + geometry-corner-radius 16 + clip-to-geometry true + } + + binds { + Mod+return { spawn "foot"; } + Mod+space { spawn "fuzzel"; } + Mod+e { spawn "nautilus"; } + + XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+ -l 1.0"; } + XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-"; } + XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; } + XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; } + + XF86AudioPlay allow-when-locked=true { spawn-sh "playerctl play-pause"; } + XF86AudioStop allow-when-locked=true { spawn-sh "playerctl stop"; } + XF86AudioPrev allow-when-locked=true { spawn-sh "playerctl previous"; } + XF86AudioNext allow-when-locked=true { spawn-sh "playerctl next"; } + + XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "+10%"; } + XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "10%-"; } + + Mod+O repeat=false { toggle-overview; } + Mod+Q repeat=false { close-window; } + + Mod+Left { focus-column-left; } + Mod+Down { focus-window-down; } + Mod+Up { focus-window-up; } + Mod+Right { focus-column-right; } + Mod+H { focus-column-left; } + Mod+J { focus-window-down; } + Mod+K { focus-window-up; } + Mod+L { focus-column-right; } + Mod+Ctrl+Left { move-column-left; } + Mod+Ctrl+Down { move-window-down; } + Mod+Ctrl+Up { move-window-up; } + Mod+Ctrl+Right { move-column-right; } + Mod+Ctrl+H { move-column-left; } + Mod+Ctrl+J { move-window-down; } + Mod+Ctrl+K { move-window-up; } + mod+ctrl+l { move-column-right; } + + Mod+comma { focus-monitor-left; } + Mod+period { focus-monitor-right; } + + Mod+Shift+comma { move-column-to-monitor-left; } + Mod+Shift+period { move-column-to-monitor-right; } + + + Mod+Shift+WheelScrollDown { focus-column-right; } + Mod+Shift+WheelScrollUp { focus-column-left; } + Mod+1 { focus-workspace 1; } + Mod+2 { focus-workspace 2; } + Mod+3 { focus-workspace 3; } + Mod+4 { focus-workspace 4; } + Mod+5 { focus-workspace 5; } + Mod+6 { focus-workspace 6; } + Mod+7 { focus-workspace 7; } + Mod+8 { focus-workspace 8; } + Mod+9 { focus-workspace 9; } + Mod+Ctrl+1 { move-column-to-workspace 1; } + Mod+Ctrl+2 { move-column-to-workspace 2; } + Mod+Ctrl+3 { move-column-to-workspace 3; } + Mod+Ctrl+4 { move-column-to-workspace 4; } + Mod+Ctrl+5 { move-column-to-workspace 5; } + Mod+Ctrl+6 { move-column-to-workspace 6; } + Mod+Ctrl+7 { move-column-to-workspace 7; } + Mod+Ctrl+8 { move-column-to-workspace 8; } + Mod+Ctrl+9 { move-column-to-workspace 9; } + + Mod+BracketLeft { consume-or-expel-window-left; } + Mod+BracketRight { consume-or-expel-window-right; } + Mod+F { maximize-column; } + + Mod+Minus { set-column-width "-10%"; } + Mod+Equal { set-column-width "+10%"; } + + Mod+V { toggle-window-floating; } + Mod+Shift+S { screenshot; } + Alt+Shift+S { screenshot-screen; } + Alt+Ctrl+S { screenshot-window; } + Mod+Shift+q { quit; } + } + ''; + + }; + +} diff --git a/modules/programs/quickshell.nix b/modules/programs/quickshell.nix new file mode 100644 index 0000000..b601367 --- /dev/null +++ b/modules/programs/quickshell.nix @@ -0,0 +1,36 @@ +{ pkgs, config, ... }: +let + c = config.scheme.withHashtag; +in +{ + + home-manager.users.lucy = { + programs.quickshell.enable = true; + programs.quickshell.systemd.enable = true; + xdg.configFile."quickshell/Colors.js" = { + enable = true; + text = '' + const colors = { + base00: "${c.base00}", + base01: "${c.base01}", + base02: "${c.base02}", + base03: "${c.base03}", + base04: "${c.base04}", + base05: "${c.base05}", + base06: "${c.base06}", + base07: "${c.base07}", + base08: "${c.base08}", + base09: "${c.base09}", + base0A: "${c.base0A}", + base0B: "${c.base0B}", + base0C: "${c.base0C}", + base0D: "${c.base0D}", + base0E: "${c.base0E}", + base0F: "${c.base0F}", + } + ''; + force = true; + }; + + }; +} diff --git a/theme.nix b/theme.nix new file mode 100644 index 0000000..9d01887 --- /dev/null +++ b/theme.nix @@ -0,0 +1,12 @@ +{ lib, inputs, ...}: { + options.theming.theme = lib.mkOption { + type = lib.types.str; + apply = name: "${inputs.tt-schemes}/base16/${name}.yaml"; + }; + options.theming.font = lib.mkOption { + type = lib.types.str; + }; + options.theming.fontPackage = lib.mkOption { + type = lib.types.package; + }; +}