This commit is contained in:
Henry Sipp
2025-06-28 13:00:42 -05:00
parent 4355bb6607
commit cd4e9e7c0d
9 changed files with 72 additions and 219 deletions
+61
View File
@@ -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.
-41
View File
@@ -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"
];
};
};
}
Generated
+3 -3
View File
@@ -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": {
+1
View File
@@ -32,6 +32,7 @@
};
};
};
homeManagerModules = {
default = {
config,
+2 -143
View File
@@ -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;
};
};
};
}
+3 -26
View File
@@ -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;
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -1,4 +1,4 @@
{inputs, ...}: {
{
config,
pkgs,
...
-4
View File
@@ -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 = {