diff --git a/README.md b/README.md new file mode 100644 index 0000000..e711bc4 --- /dev/null +++ b/README.md @@ -0,0 +1,61 @@ +# Omarchy Nix + +Omarchy-nix is an opinionated NixOS flake to help you get started as fast as possible with NixOS and Hyprland. It is primarily reimplementation of [DHH's Omarchy](https://github.com/basecamp/omarchy) project - an opinionated Arch/Hyprland setup for modern web development. + + +## Quick Start + +To get started you'll first need to set up a fresh [NixOS](https://nixos.org/) install. Just download and create a bootable USB and you should be good to go. + + +Once ready, add this flake to your system configuration, you'll also need [home-manager](https://github.com/nix-community/home-manager) as well: + +```nix +{ + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; + omarchy-nix = { + url = "github:henrysipp/omarchy-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.home-manager.follows = "home-manager"; + }; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { nixpkgs, omarchy-nix, home-manager, ... }: { + nixosConfigurations.your-hostname = nixpkgs.lib.nixosSystem { + modules = [ + omarchy-nix.nixosModules.default + home-manager.nixosModules.home-manager #Add this import + { + # Configure omarchy + omarchy = { + full_name = "Your Name"; + email_address = "your.email@example.com"; + theme = "tokyo-night"; + }; + + home-manager = { + users.your-username = { + imports = [ omarchy-nix.homeManagerModules.default ]; # And this one + }; + }; + } + ]; + }; + }; +} +``` + +## Configuration Options + +I've specified some basic configuration options to help you get started with initial setup, as well as some simple overrides for common configuration settings I found I was modifying often. These are likely subject to change with future versions as I iron things out. + +Refer to [the root configuration](https://github.com/henrysipp/omarchy-nix/blob/main/config.nix) file for more information on what options are available. + +## License + +This project is released under the MIT License, same as the original Omarchy. \ No newline at end of file diff --git a/config.nix b/config.nix deleted file mode 100644 index c827bbb..0000000 --- a/config.nix +++ /dev/null @@ -1,41 +0,0 @@ -lib: { - omarchyOptions = { - full_name = lib.mkOption { - type = lib.types.str; - description = "Main user's full name"; - }; - email_address = lib.mkOption { - type = lib.types.str; - description = "Main user's email address"; - }; - theme = lib.mkOption { - type = lib.types.enum ["tokyo-night" "kanagawa" "catppuccin"]; - default = "tokyo-night"; - description = "Theme to use for Omarchy configuration"; - }; - primary_font = lib.mkOption { - type = lib.types.str; - default = "Liberation Sans 11"; - }; - vscode_settings = lib.mkOption { - type = lib.types.attrs; - default = {}; - }; - quickAppBindings = lib.mkOption { - type = lib.types.listOf lib.types.str; - description = "A list of single keystroke key bindings to launch common apps."; - default = [ - "SUPER, return, exec, $terminal" - "SUPER, F, exec, $fileManager" - "SUPER, B, exec, $browser" - "SUPER, M, exec, $music" - "SUPER, N, exec, $terminal -e nvim" - "SUPER, T, exec, $terminal -e btop" - "SUPER, D, exec, $terminal -e lazydocker" - "SUPER, G, exec, $messenger" - "SUPER, O, exec, obsidian -disable-gpu" - "SUPER, slash, exec, $passwordManager" - ]; - }; - }; -} diff --git a/flake.lock b/flake.lock index 06bcb68..ff61f20 100644 --- a/flake.lock +++ b/flake.lock @@ -94,11 +94,11 @@ ] }, "locked": { - "lastModified": 1750973805, - "narHash": "sha256-BZXgag7I0rnL/HMHAsBz3tQrfKAibpY2vovexl2lS+Y=", + "lastModified": 1751131846, + "narHash": "sha256-VqXwSsEpmQlVUK0Y6FZ4YQwB63zWWD6ziHgQW2zEiUA=", "owner": "nix-community", "repo": "home-manager", - "rev": "080e8b48b0318b38143d5865de9334f46d51fce3", + "rev": "da077f20db88a173629624a30380658840d377b3", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 76f8a5e..c9f94eb 100644 --- a/flake.nix +++ b/flake.nix @@ -32,6 +32,7 @@ }; }; }; + homeManagerModules = { default = { config, diff --git a/modules/home-manager/alacritty.nix b/modules/home-manager/alacritty.nix index e9b81b8..ade8d53 100644 --- a/modules/home-manager/alacritty.nix +++ b/modules/home-manager/alacritty.nix @@ -13,25 +13,13 @@ in { # Window settings window = { padding = { - x = 10; - y = 10; + x = 14; + y = 14; }; - dynamic_padding = true; decorations = "none"; opacity = 0.95; - blur = true; - startup_mode = "Windowed"; - title = "Alacritty"; - dynamic_title = true; }; - # Scrolling - scrolling = { - history = 10000; - multiplier = 3; - }; - - # Font configuration font = { normal = { family = cfg.primary_font; @@ -77,135 +65,6 @@ in { selection.background = theme.primary; }; - # // ( - # if theme ? orange - # then { - # indexed_colors = - # [ - # { - # index = 16; - # color = theme.orange; - # } - # ] - # ++ ( - # if theme ? rosewater - # then [ - # { - # index = 17; - # color = theme.rosewater; - # } - # ] - # else [] - # ) - # ++ ( - # if theme ? peach - # then [ - # { - # index = 18; - # color = theme.peach; - # } - # ] - # else [] - # ); - # } - # else {} - # ); - - # Bell - bell = { - animation = "EaseOutExpo"; - duration = 0; - color = theme.warning; - }; - - # Mouse - mouse = { - hide_when_typing = true; - bindings = [ - { - mouse = "Middle"; - action = "PasteSelection"; - } - ]; - }; - - # Key bindings - keyboard.bindings = [ - # Copy/Paste - { - key = "C"; - mods = "Control|Shift"; - action = "Copy"; - } - { - key = "V"; - mods = "Control|Shift"; - action = "Paste"; - } - # Search - { - key = "F"; - mods = "Control|Shift"; - action = "SearchForward"; - } - { - key = "B"; - mods = "Control|Shift"; - action = "SearchBackward"; - } - # Font size - { - key = "Plus"; - mods = "Control"; - action = "IncreaseFontSize"; - } - { - key = "Minus"; - mods = "Control"; - action = "DecreaseFontSize"; - } - { - key = "Key0"; - mods = "Control"; - action = "ResetFontSize"; - } - # New window - { - key = "Return"; - mods = "Control|Shift"; - action = "SpawnNewInstance"; - } - ]; - - # Cursor - cursor = { - style = { - shape = "Block"; - blinking = "Off"; - }; - unfocused_hollow = true; - thickness = 0.15; - }; - - # Live config reload - general.live_config_reload = true; - - # Shell - terminal.shell = { - program = "${pkgs.zsh}/bin/zsh"; - args = ["--login"]; - }; - - # Working directory - working_directory = "None"; - - # Debug - debug = { - render_timer = false; - persistent_logging = false; - log_level = "Warn"; - print_events = false; - }; }; }; } diff --git a/modules/home-manager/hyprland/looknfeel.nix b/modules/home-manager/hyprland/looknfeel.nix index 8235322..e3dea48 100644 --- a/modules/home-manager/hyprland/looknfeel.nix +++ b/modules/home-manager/hyprland/looknfeel.nix @@ -19,29 +19,22 @@ else hexToRgba theme.foreground "ff"; in { wayland.windowManager.hyprland.settings = { - # Refer to https://wiki.hyprland.org/Configuring/Variables/ - - # https://wiki.hyprland.org/Configuring/Variables/#general general = { gaps_in = 5; gaps_out = 10; border_size = 2; - # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors "col.active_border" = activeBorder; "col.inactive_border" = hexToRgba theme.surface_variant "aa"; - # Set to true enable resizing windows by clicking and dragging on borders and gaps resize_on_border = false; - # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on allow_tearing = false; layout = "dwindle"; }; - # https://wiki.hyprland.org/Configuring/Variables/#decoration decoration = { rounding = 0; @@ -52,7 +45,6 @@ in { color = hexToRgba theme.background "ee"; }; - # https://wiki.hyprland.org/Configuring/Variables/#blur blur = { enabled = true; size = 3; @@ -62,12 +54,10 @@ in { }; }; - # https://wiki.hyprland.org/Configuring/Variables/#animations animations = { enabled = true; # yes, please :) # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more - bezier = [ "easeOutQuint,0.23,1,0.32,1" "easeInOutCubic,0.65,0.05,0.36,1" @@ -94,29 +84,16 @@ in { ]; }; - # Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/ - # "Smart gaps" / "No gaps when only" - # uncomment all if you wish to use that. - # workspace = w[tv1], gapsout:0, gapsin:0 - # workspace = f[1], gapsout:0, gapsin:0 - # windowrule = bordersize 0, floating:0, onworkspace:w[tv1] - # windowrule = rounding 0, floating:0, onworkspace:w[tv1] - # windowrule = bordersize 0, floating:0, onworkspace:f[1] - # windowrule = rounding 0, floating:0, onworkspace:f[1] - - # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more dwindle = { - pseudotile = true; # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below - preserve_split = true; # You probably want this - force_split = 2; # Always split on the right + pseudotile = true; + preserve_split = true; + force_split = 2; }; - # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more master = { new_status = "master"; }; - # https://wiki.hyprland.org/Configuring/Variables/#misc misc = { disable_hyprland_logo = true; disable_splash_rendering = true; diff --git a/modules/home-manager/hyprland/windows.nix b/modules/home-manager/hyprland/windows.nix index ed6abc6..597d7d6 100644 --- a/modules/home-manager/hyprland/windows.nix +++ b/modules/home-manager/hyprland/windows.nix @@ -11,7 +11,7 @@ # Force chromium into a tile to deal with --app bug "tile, class:^(chromium)$" - # Just dash of opacity + # Just dash of transparency "opacity 0.97 0.9, class:.*" "opacity 1 0.97, class:^(chromium|google-chrome|google-chrome-unstable)$" "opacity 0.97 0.9, initialClass:^(chrome-.*-Default)$ # web apps" diff --git a/modules/home-manager/hyprlock.nix b/modules/home-manager/hyprlock.nix index 087aabf..605775a 100644 --- a/modules/home-manager/hyprlock.nix +++ b/modules/home-manager/hyprlock.nix @@ -1,4 +1,4 @@ -{inputs, ...}: { +{ config, pkgs, ... diff --git a/modules/nixos/system.nix b/modules/nixos/system.nix index ae90382..ee3dcbb 100644 --- a/modules/nixos/system.nix +++ b/modules/nixos/system.nix @@ -21,10 +21,6 @@ alsa.enable = true; pulse.enable = true; 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; }; services.greetd = {