2024-08-06 23:27:28 -07:00
# liminalOS
2024-07-12 00:40:21 -07:00
2024-08-11 15:05:42 -07:00
This is a repository that implements liminalOS, my personal Linux distribution
2025-01-16 17:10:06 -08:00
based on [NixOS ](https://nixos.org/ ). The most overengineered personal
computing environment, ever. Imagine having to `vim` into source code and
recompile an entire operating system to change a font. Yes, I use this on a
daily basis.
2024-08-16 06:57:58 -07:00
2024-12-26 00:46:15 -08:00
This repository exposes a NixOS module that declares the entire liminalOS
2024-12-25 21:54:50 -08:00
operating system. It aims to be an easy way to both set up a brand new system
with my opinionated configurations, and also inject into an existing NixOS
configuration.
2025-01-16 17:10:06 -08:00
My reference implementations of liminalOS on actual working systems are
available [here ](./reference ).
2024-12-25 21:54:50 -08:00
2024-12-26 00:46:15 -08:00
liminalOS is currently in a heavily experimental state, but it is used in
production every day!
2025-01-16 17:10:06 -08:00
You can try it with `nix flake init -t github:youwen5/liminalOS` , which will
create a sample configuration flake along with corresponding files. Keep in
mind you'll have to do a little bit of work in these files to get a working
system configuration. Some Nix knowledge is expected, but comments are there to
help!
2025-01-16 17:11:08 -08:00
```mermaid
2025-01-16 17:10:06 -08:00
flowchart TB
subgraph "Core System Layer"
NixOS["NixOS/Darwin Base"]
SysMod["System Modules"]:::sysmod
HM["Home Manager"]:::hm
end
subgraph "Platform Modules"
subgraph "Linux Modules"
LinuxCore["Linux Core"]:::linux
Desktop["Desktop Environment"]:::linux
Audio["Audio System"]:::linux
Gaming["Gaming Support"]:::linux
Graphics["Graphics"]:::linux
end
subgraph "Darwin Modules"
DarwinCore["Darwin Core"]:::darwin
Homebrew["Homebrew"]:::darwin
WM["Window Management"]:::darwin
end
end
subgraph "Home Manager Layer"
CommonMod["Common Modules"]:::hmmod
ShellEnv["Shell Environment"]:::hmmod
Tools["Essential Tools"]:::hmmod
subgraph "Platform-Specific HM"
LinuxHM["Linux Config"]:::linux
Theming["Linux Theming"]:::linux
Hyprland["Hyprland Config"]:::linux
DarwinHM["Darwin Config"]:::darwin
end
end
subgraph "Package Management"
Packages["Custom Packages"]:::pkg
Overlays["Overlays"]:::pkg
end
subgraph "Host Configuration"
RefHosts["Reference Hosts"]:::host
Templates["Host Templates"]:::host
end
subgraph "Build System"
Flake["Flake Entry Point"]:::build
Builder["Build System"]:::build
end
%% Relationships
NixOS --> SysMod
SysMod --> LinuxCore & DarwinCore
HM --> CommonMod
CommonMod --> ShellEnv & Tools
CommonMod --> LinuxHM & DarwinHM
LinuxHM --> Theming & Hyprland
DarwinCore --> Homebrew & WM
LinuxCore --> Desktop & Audio & Gaming & Graphics
Flake --> Builder
Builder --> RefHosts
Templates --> RefHosts
Packages --> Overlays
Overlays --> Builder
%% Click Events
click SysMod "https://github.com/youwen5/liminalOS/tree/main/modules"
click LinuxCore "https://github.com/youwen5/liminalOS/tree/main/modules/linux/core"
click DarwinCore "https://github.com/youwen5/liminalOS/tree/main/modules/darwin"
click HM "https://github.com/youwen5/liminalOS/tree/main/hm"
click CommonMod "https://github.com/youwen5/liminalOS/tree/main/hm/modules/common"
click ShellEnv "https://github.com/youwen5/liminalOS/tree/main/hm/modules/common/shellenv"
click Tools "https://github.com/youwen5/liminalOS/tree/main/hm/modules/common/essentials"
click Desktop "https://github.com/youwen5/liminalOS/tree/main/modules/linux/desktop-environment"
click Audio "https://github.com/youwen5/liminalOS/tree/main/modules/linux/audio"
click Gaming "https://github.com/youwen5/liminalOS/tree/main/modules/linux/gaming"
click Graphics "https://github.com/youwen5/liminalOS/tree/main/modules/linux/graphics"
click Homebrew "https://github.com/youwen5/liminalOS/blob/main/modules/darwin/homebrew.nix"
click WM "https://github.com/youwen5/liminalOS/blob/main/modules/darwin/yabai.nix"
click RefHosts "https://github.com/youwen5/liminalOS/tree/main/reference/hosts"
click Templates "https://github.com/youwen5/liminalOS/tree/main/templates/minimal"
click Packages "https://github.com/youwen5/liminalOS/tree/main/pkgs/by-name"
click Overlays "https://github.com/youwen5/liminalOS/tree/main/overlays"
click Theming "https://github.com/youwen5/liminalOS/tree/main/hm/modules/linux/theming"
click Hyprland "https://github.com/youwen5/liminalOS/tree/main/hm/modules/linux/desktop-environment/hyprland"
click Builder "https://github.com/youwen5/liminalOS/blob/main/lib/buildLiminalOS.nix"
click Flake "https://github.com/youwen5/liminalOS/blob/main/flake.nix"
%% Styling
classDef default fill:#f9f9f9,stroke:#333,stroke-width:2px;
classDef sysmod fill:#a8d1f0,stroke:#333;
classDef hm fill:#b8e6b8,stroke:#333;
classDef hmmod fill:#d1f0a8,stroke:#333;
classDef linux fill:#f0a8a8,stroke:#333;
classDef darwin fill:#f0d1a8,stroke:#333;
classDef pkg fill:#d1a8f0,stroke:#333;
classDef host fill:#a8f0d1,stroke:#333;
classDef build fill:#f0f0a8,stroke:#333;
```
2024-08-06 23:27:28 -07:00
2024-08-07 16:34:10 -07:00
## Hosts
2024-08-11 15:05:42 -07:00
The modules in liminalOS are designed to be utilized by a wide variety of
machine configurations, including via nix-darwin on macOS. To that end, modules
are organized by operating system (darwin vs. linux), architecture (x86_64 vs.
aarch-64), and form factor (desktop vs laptop). Anything that is agnostic of
these distinctions is considered a "common module" and allows configuration to
be shared between the various host types. This generally includes core programs
like CLI tools, the window manager, etc.
2024-08-07 16:34:10 -07:00
2024-08-11 15:05:42 -07:00
The [flake.nix ](/flake.nix ) currently contains my configuration for four hosts:
2024-08-07 16:34:10 -07:00
2024-08-07 16:37:06 -07:00
| Hostname | Description |
2024-08-11 14:58:34 -07:00
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
2024-08-07 16:37:06 -07:00
| "callisto" | a Macbook Pro M1 (2021) running under Asahi Linux. Imports the laptop module sets as well as the core NixOS module sets. |
| "demeter" | a custom desktop with an i7-13700KF and RTX 4080. Imports the desktop module, the core NixOS modules, and additionally the gaming module. |
| "phobos" | Macbook Pro M1 (2021) running macOS with nix-darwin. Imports the core home-manager module as well as some darwin-specific modules for window managers and the like. |
2024-08-11 15:05:42 -07:00
| "adrastea" | Razer Blade 14 (2021) with RTX 3070. Imports the laptop module, the core NixOS modules, and the gaming module. |
2024-08-07 16:34:10 -07:00
2024-08-11 15:05:42 -07:00
[^1]:
also known as GNU/Linux, GNU+Linux, Freedesktop/systemd/musl/busybox Linux,
Linux+friends, etc
2024-08-06 23:27:28 -07:00
2024-08-11 15:05:42 -07:00
[^2]:
although this is not actually how the converse works, the rigor-hungry
mathematicians reading can cry about it.
2024-07-12 00:40:21 -07:00
2024-12-25 21:54:50 -08:00
<!-- ## Keybinds -->
<!-- -->
<!-- Non - exhaustive. -->
<!-- -->
<!-- | Shortcut | Action | -->
<!-- | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | -->
<!-- | <kbd>Super</kbd> + <kbd>W</kbd> | Toggle floating | -->
<!-- | <kbd>Super</kbd> + <kbd>K</kbd> | Toggle layout | -->
<!-- | <kbd>Super</kbd> + <kbd>E</kbd> | Open Dolphin | -->
<!-- | <kbd>Super</kbd> + <kbd>T</kbd> | Open kitty | -->
<!-- | <kbd>Super</kbd> + <kbd>F</kbd> | Open librewolf | -->
<!-- | <kbd>Super</kbd> + <kbd>R</kbd> | Open pavucontrol | -->
<!-- | <kbd>Super</kbd> + <kbd>Space</kbd> | Open rofi | -->
<!-- | <kbd>Super</kbd> + <kbd>Backspace</kbd> | Open logout menu | -->
<!-- | <kbd>Super</kbd> + <kbd>L</kbd> | Screenshot region | -->
<!-- | <kbd>Super</kbd> + <kbd>H</kbd><kbd>J</kbd><kbd>K</kbd><kbd>L</kbd> | Move around | -->
<!-- | <kbd>Super</kbd> + <kbd>Ctrl</kbd> + <kbd>H</kbd><kbd>L</kbd> | Move workspaces | -->
<!-- | <kbd>Super</kbd> + <kbd>Alt</kbd> + <kbd>Ctrl</kbd> + <kbd>H</kbd><kbd>J</kbd><kbd>K</kbd><kbd>L</kbd> | Move windows around workspaces | -->
<!-- | <kbd>Super</kbd> + <kbd>Shift</kbd> + <kbd>Ctrl</kbd> + <kbd>H</kbd><kbd>J</kbd><kbd>K</kbd><kbd>L</kbd> | Move windows around | -->
<!-- | <kbd>Super</kbd> + <kbd>S</kbd> | Open Special Workspace | -->
<!-- | <kbd>Super</kbd> + <kbd>Enter</kbd> | Fullscreen Window | -->
<!-- | <kbd>Super</kbd> + <kbd>Alt</kbd> + <kbd>S</kbd> | Move Window to Special Workspace | -->