Merge pull request #1 from youwen5/modules-refactor

Modules refactor
This commit is contained in:
Youwen Wu 2024-12-26 00:50:54 -08:00 committed by GitHub
commit 0729502090
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
95 changed files with 6735 additions and 1797 deletions

View file

@ -6,15 +6,27 @@ based on [NixOS](https://nixos.org/).
Time wasted writing Nix code:
![](https://wakatime.com/badge/user/018dc5b8-ba5a-4572-a38a-b526d1b28240/project/c59b3d5e-0c9c-4bd5-a752-e75522ab0cdc.svg) + [![wakatime](https://wakatime.com/badge/user/018dc5b8-ba5a-4572-a38a-b526d1b28240/project/de5e82f8-8a09-42cb-ae45-9c80f2ab5a41.svg)](https://wakatime.com/badge/user/018dc5b8-ba5a-4572-a38a-b526d1b28240/project/de5e82f8-8a09-42cb-ae45-9c80f2ab5a41)
These are essentially just my NixOS configuration files. I use flakes,
home-manager, `agenix`, all the buzzwords. But it sounds cool to have your own
OS! (and NixOS is essentially a purpose-built language and ecosystem to allow
you to build your own immutable operating system anyways.)
This repository exposes a NixOS module that declares the entire liminalOS
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.
Reference implementations of liminalOS on actual working systems is in
[./reference](./reference).
liminalOS is currently in a heavily experimental state, but it is used in
production every day!
You can try it with `nix flake init -t github:youwen5/liminalOS#liminalOS`,
which will create a sample configuration flake along with corresponding files.
Many have written at length about the virtues of NixOS and _declarative
configuration_ and _immutability_ and such. I doubt what I have to say is
particularly novel, but I'll leave a few thoughts about Nix and NixOS and why
they do things better anyways. In particular, instead of immediately evangelizing about the virtues of Nix, I'll first motivate the reasons for why I chose a tool with exactly its properties, based on my use case (but not to worry, the evangelizing will come later).
they do things better anyways. In particular, instead of immediately
evangelizing about the virtues of Nix, I'll first motivate the reasons for why
I chose a tool with exactly its properties, based on my use case (but not to
worry, the evangelizing will come later).
Essentially: allow me to introduce you to the
origins of [NixOS God
@ -83,13 +95,15 @@ configurations and applications seems incredibly unwieldy, through our usual
conception of how we interact with our operating systems.
The more obsessive system tweakers might try a dotfile manager like `chezmoi`
or GNU Stow. I have not tried these so I make no judgements on their utility for their intended purpose,
but generally these solutions miss a key feature: they provide the
configuration, but don't install the software. But the software and the
configuration are fundamentally tied together; these are not concerns to be
separated. If the software is installed, it almost always needs to be
configured anyways. If the configuration exists, the software should be
installed. These solutions may work well for managing configuration, but they have the same issue as before: you also need to install the software you're configuring!
or GNU Stow. I have not tried these so I make no judgements on their utility
for their intended purpose, but generally these solutions miss a key feature:
they provide the configuration, but don't install the software. But the
software and the configuration are fundamentally tied together; these are not
concerns to be separated. If the software is installed, it almost always needs
to be configured anyways. If the configuration exists, the software should be
installed. These solutions may work well for managing configuration, but they
have the same issue as before: you also need to install the software you're
configuring!
So, *nix hackers reach for things like [Ansible](https://www.ansible.com/), that
promise automatic configuration of entire systems. Though Ansible was designed
@ -102,7 +116,10 @@ which aren't expected to be as ephemeral as servers).
If you agree with the premises I've laid out up to this point, you might come
to the conclusion that I've made: to solve this issue, we need a solution that
does _all of it_. A unified tool for deploying software and managing systems.
And it must necessarily be declarative and reproducible, because that is the only way to sanely manage a system. Imagine working on a programming project where recompiling with the same source code would non-deterministically produce different results based on the environment!
And it must necessarily be declarative and reproducible, because that is the
only way to sanely manage a system. Imagine working on a programming project
where recompiling with the same source code would non-deterministically produce
different results based on the environment!
Well, [Nix](https://nixos.org/) is the _purely functional_ package manager
(i.e. declarative, reproducible), and NixOS is a Linux distribution that is
@ -159,8 +176,8 @@ versioning (via `git`), and rollbacks _for free_.
## Installation guide
TBD. May use `deploy-rs` or the in-house
[dartgun](https://github.com/youwen5/dartgun) tool for easy deployment.
Currently there is no streamlined installer. Please see [the reference
implementations](./reference) for an idea on how to set up a liminalOS system.
## FAQ
@ -180,9 +197,7 @@ Therefore, liminalOS is a Linux distribution. QED.[^2]
### Should I actually install this?
No. You should instead use the modules as configuration examples if you need
them as they are heavily customized for my needs, which are not the same as
yours.
Sure.
## Hosts
@ -211,25 +226,25 @@ The [flake.nix](/flake.nix) currently contains my configuration for four hosts:
although this is not actually how the converse works, the rigor-hungry
mathematicians reading can cry about it.
## 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 |
<!--## 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 |-->

View file

@ -2,15 +2,13 @@
## P1
- [ ] Massively refactor module system
- [x] Disable allowUnfree and atomically control everything using allowUnfreePredicate
- [ ] Decide what to do with easyeffects
## P2
- Implement custom newtab page
- Switch from waybar to eww
## Done
- [x] Add Nvidia-specific config options for Hyprland (blocked by P1)
- [x] Massively refactor module system
- [x] Move wallpapers to submodule
- [x] Move Neovim to submodule

View file

@ -124,17 +124,17 @@
"cpu-microcodes": {
"flake": false,
"locked": {
"lastModified": 1734191706,
"narHash": "sha256-fdS2hRAgWEukflu2eOpCXe3cVg0L0lcRqdxbLOiMZg0=",
"lastModified": 1734880358,
"narHash": "sha256-nLxzu0X1txVOu7LxadpOLL+EbcS6FCI/xrulsqglMg4=",
"owner": "platomav",
"repo": "CPUMicrocodes",
"rev": "bebd9ed9a3c3c21996eb77373d3408296b0b9d3d",
"rev": "9953c622cc5555b88cb73f042a78bbc8e0edc587",
"type": "github"
},
"original": {
"owner": "platomav",
"repo": "CPUMicrocodes",
"rev": "bebd9ed9a3c3c21996eb77373d3408296b0b9d3d",
"rev": "9953c622cc5555b88cb73f042a78bbc8e0edc587",
"type": "github"
}
},
@ -395,11 +395,11 @@
]
},
"locked": {
"lastModified": 1734622215,
"narHash": "sha256-OOfI0XhSJGHblfdNDhfnn8QnZxng63rWk9eeJ2tCbiI=",
"lastModified": 1735053786,
"narHash": "sha256-Gm+0DcbUS338vvkwyYWms5jsWlx8z8MeQBzcnIDuIkw=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "1395379a7a36e40f2a76e7b9936cc52950baa1be",
"rev": "35b98d20ca8f4ca1f6a2c30b8a2c8bb305a36d84",
"type": "github"
},
"original": {
@ -432,11 +432,11 @@
"homebrew-cask": {
"flake": false,
"locked": {
"lastModified": 1734689278,
"narHash": "sha256-P0pbalUNSGxqal9BkE2lY+lzTXVRkCl7kSPFGMLG+F0=",
"lastModified": 1735197978,
"narHash": "sha256-IyRULXbkFFVGhOmds9m+C9mDA//S2RkI4X0bWAsStJs=",
"owner": "homebrew",
"repo": "homebrew-cask",
"rev": "74758b1c17c30a7a770ae83273c3e7320744fc5b",
"rev": "d09f0821745ef07e44475831752463736fa1ff0d",
"type": "github"
},
"original": {
@ -448,11 +448,11 @@
"homebrew-core": {
"flake": false,
"locked": {
"lastModified": 1734686007,
"narHash": "sha256-g3c82plQuphjH9cZgDcgdoFLVdsaKvgTa0+lpVHfBD0=",
"lastModified": 1735199084,
"narHash": "sha256-aJkGLhmz5ucc1BFfAbIWANzd8fiLoCu0aOrnMoLypSQ=",
"owner": "homebrew",
"repo": "homebrew-core",
"rev": "0e39b9bf27c1fc0d4da71971e7a056871e00b358",
"rev": "b477cfe34c1dcae78eb43b7ecd0d89b854719f1e",
"type": "github"
},
"original": {
@ -530,11 +530,11 @@
},
"nix-flatpak": {
"locked": {
"lastModified": 1734128415,
"narHash": "sha256-HLwdVNxpuTsLlM3tCkpbQU6yCehdgf3kOS1G2SDlkzY=",
"lastModified": 1734864618,
"narHash": "sha256-8SCTJhDH1fdNGGFhuGStIqbO7vwUKQokgQu6nQlQagY=",
"owner": "gmodena",
"repo": "nix-flatpak",
"rev": "8bdc2540da516006d07b04019eb57ae0781a04b3",
"rev": "13be795cac27df7044a425c0b2de3a42b10ddb18",
"type": "github"
},
"original": {
@ -573,15 +573,15 @@
]
},
"locked": {
"lastModified": 1734234111,
"narHash": "sha256-icEMqBt4HtGH52PU5FHidgBrNJvOfXH6VQKNtnD1aw8=",
"owner": "nix-community",
"lastModified": 1735182763,
"narHash": "sha256-S2zkij+fcLpWOM3IfyThOoypBVe1c0pWW2w9cRBdFio=",
"owner": "marienz",
"repo": "nix-index-database",
"rev": "311d6cf3ad3f56cb051ffab1f480b2909b3f754d",
"rev": "0a961f691c4da1e7edc0c23afd6e8d6765499ce0",
"type": "github"
},
"original": {
"owner": "nix-community",
"owner": "marienz",
"repo": "nix-index-database",
"type": "github"
}
@ -656,11 +656,11 @@
},
"nixpkgs_2": {
"locked": {
"lastModified": 1734424634,
"narHash": "sha256-cHar1vqHOOyC7f1+tVycPoWTfKIaqkoe1Q6TnKzuti4=",
"lastModified": 1734649271,
"narHash": "sha256-4EVBRhOjMDuGtMaofAIqzJbg4Ql7Ai0PSeuVZTHjyKQ=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "d3c42f187194c26d9f0309a8ecc469d6c878ce33",
"rev": "d70bd19e0a38ad4790d3913bf08fcbfc9eeca507",
"type": "github"
},
"original": {
@ -835,11 +835,11 @@
]
},
"locked": {
"lastModified": 1734668189,
"narHash": "sha256-LpqK4EQSzv/UDlIognrWRfvaUu6i14i3MDAOKJjlWzY=",
"lastModified": 1735186564,
"narHash": "sha256-PQIAL/dODi9HroSaW/4nqWQe2CSTgxRYS+XiYPo1FhA=",
"owner": "Gerg-L",
"repo": "spicetify-nix",
"rev": "b7f569e0d97a66d256b93fd88f9e14c5d81d1972",
"rev": "112da8f6b8a3365cf89d5c5b6aaa02ba249373ff",
"type": "github"
},
"original": {
@ -865,11 +865,11 @@
"tinted-tmux": "tinted-tmux"
},
"locked": {
"lastModified": 1734531336,
"narHash": "sha256-BWwJTAiWmZudUdUbyets7e3zQfjvZYtkU51blBnUBjw=",
"lastModified": 1735151068,
"narHash": "sha256-sJ1/y4aXAZ22trJjY+nH/bJ+pydaDKf3wZtafM+Yjcs=",
"owner": "danth",
"repo": "stylix",
"rev": "a2d66f25478103ac9b4adc6d6713794f7005221e",
"rev": "079fecebad5f616561726359c89cedd811c8a722",
"type": "github"
},
"original": {
@ -993,11 +993,11 @@
"cpu-microcodes": "cpu-microcodes"
},
"locked": {
"lastModified": 1734353399,
"narHash": "sha256-d2Pc1JUcwRRI5nt5Jk5+teIjhLhUaq8i4r2FGuE5/bE=",
"lastModified": 1734918967,
"narHash": "sha256-2BoHRzShQYseyY1eNlHAlFLGZVJqWbCnW3F4BZMWyiU=",
"owner": "e-tho",
"repo": "ucodenix",
"rev": "a70edcafd9a93b8df1d32e664de921669420024e",
"rev": "e672b17a0991427328efbbca8dc88ea855888709",
"type": "github"
},
"original": {
@ -1103,15 +1103,14 @@
"nixpkgs"
],
"zen-browser-aarch64": "zen-browser-aarch64",
"zen-browser-generic": "zen-browser-generic",
"zen-browser-specific": "zen-browser-specific"
"zen-browser-x86_64": "zen-browser-x86_64"
},
"locked": {
"lastModified": 1734667644,
"narHash": "sha256-vluyzRt6RikEn78Yk0t7Qd96iZZfyRBt4+ESI0mtlhk=",
"lastModified": 1735099614,
"narHash": "sha256-FCQFeOhVg/SNOCdryvxVd/5eLqwXwVr6/48Xyh7wpwU=",
"owner": "youwen5",
"repo": "zen-browser-flake",
"rev": "8c8af380bf45b42ae14b2f6d5252be3627332f23",
"rev": "3e4af3607e303a88169782471a082857a3e80162",
"type": "github"
},
"original": {
@ -1123,40 +1122,27 @@
"zen-browser-aarch64": {
"flake": false,
"locked": {
"lastModified": 1734641206,
"narHash": "sha256-F5FwGqAgL4kfEy5rNWvofRQl8SH0udQvEIMhysRMDgs=",
"lastModified": 1735043335,
"narHash": "sha256-nuGSRzwBloFwgNCIbc5xv3vGkiHQxzOQr4FUX4Cip7Y=",
"type": "tarball",
"url": "https://github.com/zen-browser/desktop/releases/download/1.0.2-b.3/zen.linux-aarch64.tar.bz2"
"url": "https://github.com/zen-browser/desktop/releases/download/1.0.2-b.5/zen.linux-aarch64.tar.bz2"
},
"original": {
"type": "tarball",
"url": "https://github.com/zen-browser/desktop/releases/download/1.0.2-b.3/zen.linux-aarch64.tar.bz2"
"url": "https://github.com/zen-browser/desktop/releases/download/1.0.2-b.5/zen.linux-aarch64.tar.bz2"
}
},
"zen-browser-generic": {
"zen-browser-x86_64": {
"flake": false,
"locked": {
"lastModified": 1734646830,
"narHash": "sha256-slIWuEWSV9PK1JTr6UKKC+VP4oLNaczwkxkYiqcjZM8=",
"lastModified": 1735049411,
"narHash": "sha256-sS9phyr97WawxB2AZAwcXkvO3xAmv8k4C8b8Qw364PY=",
"type": "tarball",
"url": "https://github.com/zen-browser/desktop/releases/download/1.0.2-b.3/zen.linux-generic.tar.bz2"
"url": "https://github.com/zen-browser/desktop/releases/download/1.0.2-b.5/zen.linux-x86_64.tar.bz2"
},
"original": {
"type": "tarball",
"url": "https://github.com/zen-browser/desktop/releases/download/1.0.2-b.3/zen.linux-generic.tar.bz2"
}
},
"zen-browser-specific": {
"flake": false,
"locked": {
"lastModified": 1734645803,
"narHash": "sha256-zAo93sHeB8cTW2JBAqxx0wo3CANcxCgjEcTQgbDeWT4=",
"type": "tarball",
"url": "https://github.com/zen-browser/desktop/releases/download/1.0.2-b.3/zen.linux-specific.tar.bz2"
},
"original": {
"type": "tarball",
"url": "https://github.com/zen-browser/desktop/releases/download/1.0.2-b.3/zen.linux-specific.tar.bz2"
"url": "https://github.com/zen-browser/desktop/releases/download/1.0.2-b.5/zen.linux-x86_64.tar.bz2"
}
}
},

View file

@ -80,7 +80,7 @@
stylix.url = "github:danth/stylix";
nix-index-database = {
url = "github:nix-community/nix-index-database";
url = "github:marienz/nix-index-database";
inputs.nixpkgs.follows = "nixpkgs";
};
@ -106,6 +106,7 @@
nixpkgs,
nix-darwin,
flake-parts,
self,
...
}:
let
@ -115,25 +116,30 @@
systems = [
"x86_64-linux"
"aarch64-linux"
"aarch64-darwin"
# "aarch64-darwin"
# aarch64-darwin is currently disabled due to lack of maintenance
];
flake = {
nixosConfigurations = {
demeter = buildLiminalOS {
inherit inputs nixpkgs;
systemModule = ./hosts/demeter;
demeter = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs self;
};
modules = [
./reference/hosts/demeter
];
};
callisto = buildLiminalOS {
inherit nixpkgs inputs;
systemModule = ./hosts/callisto;
systemModule = ./reference/hosts/callisto;
};
adrastea = buildLiminalOS {
inherit inputs nixpkgs;
systemModule = ./hosts/adrastea;
systemModule = ./reference/hosts/adrastea;
};
cassini = buildLiminalOS {
inherit inputs nixpkgs;
systemModule = ./hosts/cassini;
systemModule = ./reference/hosts/cassini;
};
};
darwinConfigurations.phobos = nix-darwin.lib.darwinSystem {
@ -144,9 +150,60 @@
./hosts/phobos
];
};
nixosModules = rec {
default = liminalOS;
liminalOS = {
imports = [
inputs.nix-flatpak.nixosModules.nix-flatpak
inputs.home-manager.nixosModules.home-manager
inputs.nixos-wsl.nixosModules.default
inputs.stylix.nixosModules.stylix
./modules/default.nix
./overlays
(
{ pkgs, ... }:
{
home-manager.extraSpecialArgs = {
spicepkgs = inputs.spicetify.legacyPackages.${pkgs.system};
inherit inputs self;
};
nixpkgs.overlays = [
(final: prev: {
zen-browser = inputs.zen-browser.packages.${pkgs.system}.default;
})
];
}
)
];
};
};
homeManagerModules = rec {
default = liminalOS;
liminalOS = {
imports = [
inputs.nix-index-database.hmModules.nix-index
inputs.spicetify.homeManagerModules.default
./hm/modules/default.nix
];
};
};
templates = rec {
liminalOS = {
path = ./templates/liminalOS;
description = "Barebones configuration of liminalOS";
};
default = liminalOS;
};
};
perSystem =
{ pkgs, system, ... }:
{
pkgs,
system,
...
}:
{
formatter = pkgs.nixfmt-rfc-style;

25
hm/default.nix Normal file
View file

@ -0,0 +1,25 @@
{
inputs,
config,
lib,
...
}:
let
cfg = config.liminalOS;
in
{
options.liminalOS.integrateHomeManager = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
description = ''
Whether to activate home manager with default options. Keep in mind you still have to import the liminalOS home-manager module.
'';
};
config.home-manager = lib.mkIf cfg.integrateHomeManager {
useGlobalPkgs = true;
useUserPackages = true;
backupFileExtension = "backup";
extraSpecialArgs = { inherit inputs; };
};
}

View file

@ -0,0 +1,10 @@
{
imports = [ ./shellenv ];
# Let home Manager install and manage itself.
programs.home-manager.enable = true;
home.file.".essentials" = {
source = ./essentials;
recursive = true;
};
}

View file

@ -0,0 +1 @@
This place contains all of the stuff that is too hard or unwieldy to manage fully with nix, but is still useful to have ready on every system.

View file

@ -0,0 +1 @@
{"locale":"en","widget/QmFu0MVUS_uo":null,"widget/cMOmcy4ZqrjS":null,"widget/i54ELqP74_Sv":null,"widget/B_kz3lJkUxlp":null,"widget/Yvubo6Zu9lT8":null,"widget/MHcdYwMetd1i":null,"timeZone":null,"widget/Dj61R7yvYklL":null,"data/He0QCGvD65VV":{"messages":["There is no system but GNU, and Linux is one of its kernels."]},"widget/RuC5niQwKdxR":null,"widget/LCUpMUdJn0Yf":null,"widget/yJ9fL4n4XbdH":null,"widget/FkVDvMgaeXIG":null,"widget/L8ulAGK5O_0u":{"id":"L8ulAGK5O_0u","key":"widget/literature-clock","order":1,"display":{"position":"middleCentre","fontFamily":"Lora"}},"data/default-unsplash":{"by":"topics","collections":"","featured":false,"paused":false,"search":"","topics":"xHxYTMHLgOc","timeout":900},"data/y8f2hoHcUia3":{"columns":3,"links":[{"url":"https://github.com/","icon":"github"},{"url":"https://www.youtube.com/","icon":"youtube"},{"url":"https://github.com/youwen5","icon":"user"}],"visible":true,"linkOpenStyle":false},"widget/sqbQm1Apn-Ad":null,"widget/1SHRYajLSARQ":{"id":"1SHRYajLSARQ","key":"widget/weather","order":0,"display":{"position":"topCentre","fontSize":26,"fontFamily":"Lora"}},"widget/He0QCGvD65VV":{"id":"He0QCGvD65VV","key":"widget/message","order":5,"display":{"position":"bottomCentre","fontFamily":"Lora","fontWeight":400}},"widget/y8f2hoHcUia3":{"id":"y8f2hoHcUia3","key":"widget/links","order":4,"display":{"position":"middleCentre"}},"widget/KNX14ZQq5_lc":{"id":"KNX14ZQq5_lc","key":"widget/css","order":2,"display":{"position":"middleCentre","fontFamily":""}},"widget/rOHrlmChb_Sp":null,"data/KNX14ZQq5_lc":{"input":"\n.Widget .LiteratureClock {\n padding: 20px;\n background-color: rgba(0,0,0,0.1);\n border-radius: 20px;\n backdrop-filter: blur(4px);\n font-size: 1.2em;\n max-width: 800px;\n}\n\n.Widget .Message {\n margin-bottom: 60px;\n}\n\n\n.Widget {\n user-select: none;\n}\n\n.Widget .Weather {\n padding: 20px;\n}\n\n.Widget .Links {\n margin-top: 40px;\n}\n.Widget .Links a:hover {\n scale: 1.15;\n}"},"background":{"id":"default-unsplash","key":"background/unsplash","display":{"luminosity":-0.2,"blur":0}},"widget/default-time":null,"widget/default-greeting":null,"focus":false,"data/1SHRYajLSARQ":{"showDetails":false,"units":"us","latitude":34.4133,"longitude":-119.861,"name":"Isla Vista"},"version":3}

View file

@ -0,0 +1,617 @@
{
"settings": {
"autoUpdate": true,
"autoUpdateNotification": true,
"useQuickCss": true,
"themeLinks": [
"https://raw.githubusercontent.com/catppuccin/discord/main/themes/macchiato.theme.css"
],
"enabledThemes": [
"stylix.theme.css"
],
"enableReactDevtools": false,
"frameless": false,
"transparent": false,
"winCtrlQ": false,
"disableMinSize": false,
"winNativeTitleBar": false,
"plugins": {
"ChatInputButtonAPI": {
"enabled": false
},
"CommandsAPI": {
"enabled": true
},
"MemberListDecoratorsAPI": {
"enabled": false
},
"MessageAccessoriesAPI": {
"enabled": true
},
"MessageDecorationsAPI": {
"enabled": false
},
"MessageEventsAPI": {
"enabled": true
},
"MessagePopoverAPI": {
"enabled": false
},
"MessageUpdaterAPI": {
"enabled": false
},
"ServerListAPI": {
"enabled": true
},
"UserSettingsAPI": {
"enabled": true
},
"AlwaysAnimate": {
"enabled": false
},
"AlwaysTrust": {
"enabled": true,
"domain": true,
"file": true
},
"AnonymiseFileNames": {
"enabled": true,
"anonymiseByDefault": true,
"method": 0,
"randomisedLength": 7
},
"AppleMusicRichPresence": {
"enabled": false
},
"WebRichPresence (arRPC)": {
"enabled": false
},
"AutomodContext": {
"enabled": false
},
"BANger": {
"enabled": false
},
"BetterFolders": {
"enabled": true,
"sidebar": true,
"showFolderIcon": 1,
"keepIcons": false,
"closeAllHomeButton": false,
"closeAllFolders": false,
"forceOpen": false,
"sidebarAnim": true
},
"BetterGifAltText": {
"enabled": false
},
"BetterGifPicker": {
"enabled": false
},
"BetterNotesBox": {
"enabled": false
},
"BetterRoleContext": {
"enabled": false
},
"BetterRoleDot": {
"enabled": true,
"bothStyles": false,
"copyRoleColorInProfilePopout": false
},
"BetterSessions": {
"enabled": true,
"backgroundCheck": false
},
"BetterSettings": {
"enabled": false,
"disableFade": true,
"eagerLoad": true
},
"BetterUploadButton": {
"enabled": false
},
"BiggerStreamPreview": {
"enabled": false
},
"BlurNSFW": {
"enabled": false
},
"CallTimer": {
"enabled": true
},
"ClearURLs": {
"enabled": true
},
"ClientTheme": {
"enabled": false
},
"ColorSighted": {
"enabled": false
},
"ConsoleJanitor": {
"enabled": false
},
"ConsoleShortcuts": {
"enabled": false
},
"CopyEmojiMarkdown": {
"enabled": false
},
"CopyUserURLs": {
"enabled": true
},
"CrashHandler": {
"enabled": true
},
"CtrlEnterSend": {
"enabled": false
},
"CustomRPC": {
"enabled": false
},
"CustomIdle": {
"enabled": false
},
"Dearrow": {
"enabled": false
},
"Decor": {
"enabled": false
},
"DisableCallIdle": {
"enabled": false
},
"DontRoundMyTimestamps": {
"enabled": false
},
"EmoteCloner": {
"enabled": false
},
"Experiments": {
"enabled": false
},
"F8Break": {
"enabled": false
},
"FakeNitro": {
"enabled": false
},
"FakeProfileThemes": {
"enabled": false
},
"FavoriteEmojiFirst": {
"enabled": false
},
"FavoriteGifSearch": {
"enabled": false
},
"FixCodeblockGap": {
"enabled": false
},
"FixSpotifyEmbeds": {
"enabled": false
},
"FixYoutubeEmbeds": {
"enabled": false
},
"ForceOwnerCrown": {
"enabled": false
},
"FriendInvites": {
"enabled": false
},
"FriendsSince": {
"enabled": false
},
"GameActivityToggle": {
"enabled": false
},
"GifPaste": {
"enabled": false
},
"GreetStickerPicker": {
"enabled": false
},
"HideAttachments": {
"enabled": false
},
"iLoveSpam": {
"enabled": false
},
"IgnoreActivities": {
"enabled": false
},
"ImageLink": {
"enabled": false
},
"ImageZoom": {
"enabled": false
},
"ImplicitRelationships": {
"enabled": false
},
"InvisibleChat": {
"enabled": false
},
"KeepCurrentChannel": {
"enabled": false
},
"LastFMRichPresence": {
"enabled": false
},
"LoadingQuotes": {
"enabled": false
},
"MaskedLinkPaste": {
"enabled": false
},
"MemberCount": {
"enabled": false
},
"MessageClickActions": {
"enabled": false
},
"MessageLatency": {
"enabled": false
},
"MessageLinkEmbeds": {
"enabled": false
},
"MessageLogger": {
"enabled": false
},
"MessageTags": {
"enabled": false
},
"MoreCommands": {
"enabled": false
},
"MoreKaomoji": {
"enabled": false
},
"MoreUserTags": {
"enabled": false
},
"Moyai": {
"enabled": false
},
"MutualGroupDMs": {
"enabled": false
},
"NewGuildSettings": {
"enabled": false
},
"NoBlockedMessages": {
"enabled": false
},
"NoDefaultHangStatus": {
"enabled": false
},
"NoDevtoolsWarning": {
"enabled": false
},
"NoF1": {
"enabled": false
},
"NoMosaic": {
"enabled": false
},
"NoOnboardingDelay": {
"enabled": false
},
"NoPendingCount": {
"enabled": false
},
"NoProfileThemes": {
"enabled": false
},
"NoReplyMention": {
"enabled": false
},
"NoScreensharePreview": {
"enabled": false
},
"NoServerEmojis": {
"enabled": false
},
"NoTypingAnimation": {
"enabled": false
},
"NoUnblockToJump": {
"enabled": false
},
"NormalizeMessageLinks": {
"enabled": false
},
"NotificationVolume": {
"enabled": false
},
"NSFWGateBypass": {
"enabled": false
},
"OnePingPerDM": {
"enabled": false
},
"oneko": {
"enabled": false
},
"OpenInApp": {
"enabled": false
},
"OverrideForumDefaults": {
"enabled": false
},
"PartyMode": {
"enabled": false
},
"PauseInvitesForever": {
"enabled": false
},
"PermissionFreeWill": {
"enabled": false
},
"PermissionsViewer": {
"enabled": false
},
"petpet": {
"enabled": false
},
"PictureInPicture": {
"enabled": false
},
"PinDMs": {
"enabled": false
},
"PlainFolderIcon": {
"enabled": false
},
"PlatformIndicators": {
"enabled": false
},
"PreviewMessage": {
"enabled": false
},
"QuickMention": {
"enabled": false
},
"QuickReply": {
"enabled": false
},
"ReactErrorDecoder": {
"enabled": false
},
"ReadAllNotificationsButton": {
"enabled": true
},
"RelationshipNotifier": {
"enabled": false
},
"ReplaceGoogleSearch": {
"enabled": false
},
"ReplyTimestamp": {
"enabled": false
},
"RevealAllSpoilers": {
"enabled": false
},
"ReverseImageSearch": {
"enabled": false
},
"ReviewDB": {
"enabled": false
},
"RoleColorEverywhere": {
"enabled": false
},
"SecretRingToneEnabler": {
"enabled": false
},
"Summaries": {
"enabled": false
},
"SendTimestamps": {
"enabled": false
},
"ServerInfo": {
"enabled": false
},
"ServerListIndicators": {
"enabled": false
},
"ShikiCodeblocks": {
"enabled": false
},
"ShowAllMessageButtons": {
"enabled": false
},
"ShowConnections": {
"enabled": false
},
"ShowHiddenChannels": {
"enabled": true,
"showMode": 0,
"hideUnreads": true
},
"ShowHiddenThings": {
"enabled": true,
"showTimeouts": true,
"showInvitesPaused": true,
"showModView": true,
"disableDiscoveryFilters": true,
"disableDisallowedDiscoveryFilters": true
},
"ShowMeYourName": {
"enabled": false
},
"ShowTimeoutDuration": {
"enabled": false
},
"SilentMessageToggle": {
"enabled": false
},
"SilentTyping": {
"enabled": false
},
"SortFriendRequests": {
"enabled": false
},
"SpotifyControls": {
"enabled": true,
"hoverControls": false
},
"SpotifyCrack": {
"enabled": false
},
"SpotifyShareCommands": {
"enabled": false
},
"StartupTimings": {
"enabled": false
},
"StreamerModeOnStream": {
"enabled": false
},
"SuperReactionTweaks": {
"enabled": false
},
"TextReplace": {
"enabled": false
},
"ThemeAttributes": {
"enabled": false
},
"TimeBarAllActivities": {
"enabled": false
},
"Translate": {
"enabled": false
},
"TypingIndicator": {
"enabled": false
},
"TypingTweaks": {
"enabled": false
},
"Unindent": {
"enabled": false
},
"UnlockedAvatarZoom": {
"enabled": false
},
"UnsuppressEmbeds": {
"enabled": false
},
"UserVoiceShow": {
"enabled": false
},
"USRBG": {
"enabled": false
},
"ValidReply": {
"enabled": false
},
"ValidUser": {
"enabled": false
},
"VoiceChatDoubleClick": {
"enabled": false
},
"VcNarrator": {
"enabled": false
},
"VencordToolbox": {
"enabled": false
},
"ViewIcons": {
"enabled": false
},
"ViewRaw": {
"enabled": false
},
"VoiceDownload": {
"enabled": false
},
"VoiceMessages": {
"enabled": false
},
"WebKeybinds": {
"enabled": true
},
"WebScreenShareFixes": {
"enabled": true
},
"WhoReacted": {
"enabled": false
},
"XSOverlay": {
"enabled": false
},
"NoTrack": {
"enabled": true,
"disableAnalytics": true
},
"WebContextMenus": {
"enabled": true,
"addBack": true
},
"Settings": {
"enabled": true,
"settingsLocation": "aboveNitro"
},
"SupportHelper": {
"enabled": true
},
"YoutubeAdblock": {
"enabled": true
},
"AlwaysExpandRoles": {
"enabled": false
},
"FullSearchContext": {
"enabled": false
},
"UserMessagesPronouns": {
"enabled": false
},
"DynamicImageModalAPI": {
"enabled": false
},
"AccountPanelServerProfile": {
"enabled": false
},
"CopyFileContents": {
"enabled": false
},
"FixImagesQuality": {
"enabled": false
},
"MentionAvatars": {
"enabled": false
},
"NoMaskedUrlPaste": {
"enabled": false
},
"StickerPaste": {
"enabled": false
},
"VolumeBooster": {
"enabled": false
}
},
"notifications": {
"timeout": 5000,
"position": "bottom-right",
"useNative": "not-focused",
"logLimit": 50
},
"cloud": {
"authenticated": false,
"url": "https://api.vencord.dev/",
"settingsSync": false,
"settingsSyncVersion": 1730351821316
}
},
"quickCss": ""
}

View file

@ -0,0 +1,210 @@
{
config,
lib,
pkgs,
osConfig,
...
}:
let
cfg = config.liminalOS;
in
{
imports = [
./fastfetch
];
options.liminalOS.shellEnv = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether to set up a CLI development environment.
'';
};
};
config = lib.mkIf cfg.shellEnv.enable {
programs.bash.enable = true;
programs.nushell = {
enable = true;
configFile.text = ''
$env.config = {
edit_mode: vi,
show_banner: false
}
'';
};
programs.fzf = {
enable = true;
};
programs.git = {
enable = true;
userName = lib.mkDefault "liminalOS user";
userEmail = lib.mkDefault "liminalOS@localhost";
delta.enable = true;
maintenance.enable = true;
extraConfig = {
init.defaultBranch = "main";
safe.directory = lib.mkIf (
osConfig.liminalOS.flakeLocation != null
) osConfig.liminalOS.flakeLocation;
};
};
home.packages = [ pkgs.git-absorb ];
programs.lazygit = {
enable = true;
settings = {
git.paging = {
colorArg = "always";
pager = "delta --dark --paging=never";
};
};
};
programs.bat.enable = true;
programs.ripgrep.enable = true;
programs.readline = {
enable = true;
extraConfig = "set editing-mode vi";
};
programs.zoxide = {
enable = true;
enableFishIntegration = true;
enableNushellIntegration = true;
enableBashIntegration = true;
};
programs.gh = {
enable = true;
};
programs.starship = {
enable = true;
enableFishIntegration = true;
enableBashIntegration = true;
enableNushellIntegration = true;
};
home.file.".config/starship.toml".text = builtins.readFile ./jetpack.toml;
programs.direnv = {
enable = true;
nix-direnv.enable = true;
config.global.hide_env_diff = true;
};
programs.fish = {
enable = true;
shellAliases = {
ls = "eza -l --icons=auto";
neofetch = "${pkgs.fastfetch}/bin/fastfetch";
};
interactiveShellInit = ''
fish_vi_key_bindings
set -g fish_greeting
'';
plugins = [
{
name = "autopair";
src = pkgs.fetchFromGitHub {
owner = "jorgebucaran";
repo = "autopair.fish";
rev = "4d1752ff5b39819ab58d7337c69220342e9de0e2";
hash = "sha256-qt3t1iKRRNuiLWiVoiAYOu+9E7jsyECyIqZJ/oRIT1A=";
};
}
{
name = "fzf";
src = pkgs.fetchFromGitHub {
owner = "PatrickF1";
repo = "fzf.fish";
rev = "8920367cf85eee5218cc25a11e209d46e2591e7a";
hash = "sha256-T8KYLA/r/gOKvAivKRoeqIwE2pINlxFQtZJHpOy9GMM=";
};
}
{
name = "sponge";
src = pkgs.fetchFromGitHub {
owner = "meaningful-ooo";
repo = "sponge";
rev = "384299545104d5256648cee9d8b117aaa9a6d7be";
hash = "sha256-MdcZUDRtNJdiyo2l9o5ma7nAX84xEJbGFhAVhK+Zm1w=";
};
}
{
name = "done";
src = pkgs.fetchFromGitHub {
owner = "franciscolourenco";
repo = "done";
rev = "eb32ade85c0f2c68cbfcff3036756bbf27a4f366";
hash = "sha256-DMIRKRAVOn7YEnuAtz4hIxrU93ULxNoQhW6juxCoh4o=";
};
}
];
};
programs.nix-index = {
enable = true;
enableBashIntegration = true;
enableFishIntegration = true;
};
programs.nix-index-database.comma.enable = true;
programs.fd.enable = true;
programs.btop = {
enable = true;
settings = {
vim_keys = true;
theme_background = false;
};
};
programs.eza = {
enable = true;
enableFishIntegration = true;
enableBashIntegration = true;
git = true;
};
programs.yazi = {
enable = true;
enableBashIntegration = true;
enableFishIntegration = true;
plugins = {
mediainfo = pkgs.fetchFromGitHub {
owner = "Ape";
repo = "mediainfo.yazi";
rev = "c69314e80f5b45fe87a0e06a10d064ed54110439";
hash = "sha256-8xdBPdKSiwB7iRU8DJdTHY+BjfR9D3FtyVtDL9tNiy4=";
};
};
settings = {
plugin = {
prepend_previewers = [
{
mime = "{image,audio,video}/*";
run = "mediainfo";
}
{
mime = "application/x-subrip";
run = "mediainfo";
}
];
};
};
};
programs.zathura.enable = true;
};
}

View file

@ -0,0 +1,81 @@
{
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
"display": {
"separator": " "
},
"modules": [
"break",
"break",
"break",
"break",
"break",
{
"type": "title",
"keyWidth": 10
},
"break",
{
"type": "os",
"key": " ",
"keyColor": "34",
"format": "{3} on {12}"
},
{
"type": "kernel",
"key": " ",
"keyColor": "34"
},
{
"type": "packages",
"key": " ",
"keyColor": "34"
},
{
"type": "shell",
"key": " ",
"keyColor": "34"
},
{
"type": "terminal",
"key": " ",
"keyColor": "34"
},
{
"type": "wm",
"key": " ",
"keyColor": "34"
},
{
"type": "CPU",
"key": " ",
"keyColor": "34"
},
{
"type": "GPU",
"key": "󰍹 ",
"keyColor": "34"
},
{
"type": "uptime",
"key": " ",
"keyColor": "34"
},
{
"type": "media",
"key": "󰝚 ",
"keyColor": "34"
},
{
"type": "player",
"key": " ",
"keyColor": "34"
},
"break",
{
"type": "custom",
"format": "\u001b[90m \u001b[31m \u001b[32m \u001b[33m \u001b[34m \u001b[35m \u001b[36m \u001b[37m "
},
"break",
"break"
]
}

View file

@ -0,0 +1,39 @@
{ config, lib, ... }:
let
fastfetchConfig = builtins.fromJSON (builtins.readFile ./config.json);
cfg = config.liminalOS.shellEnv.fastfetch;
in
{
options.liminalOS.shellEnv.fastfetch = {
enable = lib.mkOption {
type = lib.types.bool;
default = config.liminalOS.shellEnv.enable;
description = ''
Whether to set up and configure fastfetch.
'';
};
useKittyImage = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
description = ''
Whether to use the kitty image protocol.
'';
};
};
config.programs.fastfetch = lib.mkIf cfg.enable {
enable = true;
settings = (
fastfetchConfig
// {
logo = {
height = 18;
padding = {
top = 2;
};
type = if cfg.useKittyImage then "kitty" else "auto";
source = lib.mkIf cfg.useKittyImage ./nixos-logo.png;
};
}
);
};
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View file

@ -0,0 +1,315 @@
# version: 1.0.0
add_newline = false
continuation_prompt = "[▸▹ ](dimmed white)"
format = """( $nix_shell$container$fill$git_metrics\n)$cmd_duration\
$hostname\
$localip\
$shlvl\
$shell\
$env_var\
$jobs\
$sudo\
$username\
$character"""
right_format = """
$singularity\
$kubernetes\
$directory\
$vcsh\
$fossil_branch\
$git_branch\
$git_commit\
$git_state\
$git_status\
$hg_branch\
$pijul_channel\
$docker_context\
$package\
$c\
$cmake\
$cobol\
$daml\
$dart\
$deno\
$dotnet\
$elixir\
$elm\
$erlang\
$fennel\
$golang\
$guix_shell\
$haskell\
$haxe\
$helm\
$java\
$julia\
$kotlin\
$gradle\
$lua\
$nim\
$nodejs\
$ocaml\
$opa\
$perl\
$php\
$pulumi\
$purescript\
$python\
$raku\
$rlang\
$red\
$ruby\
$rust\
$scala\
$solidity\
$swift\
$terraform\
$vlang\
$vagrant\
$zig\
$buf\
$conda\
$meson\
$spack\
$memory_usage\
$aws\
$gcloud\
$openstack\
$azure\
$crystal\
$custom\
$status\
$os\
$battery\
$time"""
[fill]
symbol = ' '
[character]
format = "$symbol "
success_symbol = "[◎](bold italic bright-yellow)"
error_symbol = "[○](italic purple)"
vimcmd_symbol = "[■](italic dimmed green)"
# not supported in zsh
vimcmd_replace_one_symbol = "◌"
vimcmd_replace_symbol = "□"
vimcmd_visual_symbol = "▼"
[env_var.VIMSHELL]
format = "[$env_value]($style)"
style = 'green italic'
[sudo]
format = "[$symbol]($style)"
style = "bold italic bright-purple"
symbol = "⋈┈"
disabled = false
[username]
style_user = "bright-yellow bold italic"
style_root = "purple bold italic"
format = "[⭘ $user]($style) "
disabled = false
show_always = false
[directory]
home_symbol = "⌂"
truncation_length = 2
truncation_symbol = "□ "
read_only = " ◈"
use_os_path_sep = true
style = "italic blue"
format = '[$path]($style)[$read_only]($read_only_style)'
repo_root_style = 'bold blue'
repo_root_format = '[$before_root_path]($before_repo_root_style)[$repo_root]($repo_root_style)[$path]($style)[$read_only]($read_only_style) [△](bold bright-blue)'
[cmd_duration]
format = "[◄ $duration ](italic white)"
[jobs]
format = "[$symbol$number]($style) "
style = "white"
symbol = "[▶](blue italic)"
[localip]
ssh_only = true
format = " ◯[$localipv4](bold magenta)"
disabled = false
[time]
disabled = false
format = "[ $time]($style)"
time_format = "%R"
utc_time_offset = "local"
style = "italic dimmed white"
[battery]
format = "[ $percentage $symbol]($style)"
full_symbol = "█"
charging_symbol = "[↑](italic bold green)"
discharging_symbol = "↓"
unknown_symbol = "░"
empty_symbol = "▃"
[[battery.display]]
threshold = 20
style = "italic bold red"
[[battery.display]]
threshold = 60
style = "italic dimmed bright-purple"
[[battery.display]]
threshold = 70
style = "italic dimmed yellow"
[git_branch]
format = " [$branch(:$remote_branch)]($style)"
symbol = "[△](bold italic bright-blue)"
style = "italic bright-blue"
truncation_symbol = "⋯"
truncation_length = 11
ignore_branches = ["main", "master"]
only_attached = true
[git_metrics]
format = '([▴$added]($added_style))([▿$deleted]($deleted_style))'
added_style = 'italic dimmed green'
deleted_style = 'italic dimmed red'
ignore_submodules = true
disabled = false
[git_status]
style = "bold italic bright-blue"
format = "([⎪$ahead_behind$staged$modified$untracked$renamed$deleted$conflicted$stashed⎥]($style))"
conflicted = "[◪◦](italic bright-magenta)"
ahead = "[▴│[${count}](bold white)│](italic green)"
behind = "[▿│[${count}](bold white)│](italic red)"
diverged = "[◇ ▴┤[${ahead_count}](regular white)│▿┤[${behind_count}](regular white)│](italic bright-magenta)"
untracked = "[◌◦](italic bright-yellow)"
stashed = "[◃◈](italic white)"
modified = "[●◦](italic yellow)"
staged = "[▪┤[$count](bold white)│](italic bright-cyan)"
renamed = "[◎◦](italic bright-blue)"
deleted = "[✕](italic red)"
[deno]
format = " [deno](italic) [∫ $version](green bold)"
version_format = "${raw}"
[lua]
format = " [lua](italic) [${symbol}${version}]($style)"
version_format = "${raw}"
symbol = "⨀ "
style = "bold bright-yellow"
[nodejs]
format = " [node](italic) [◫ ($version)](bold bright-green)"
version_format = "${raw}"
detect_files = ["package-lock.json", "yarn.lock"]
detect_folders = ["node_modules"]
detect_extensions = []
[python]
format = " [py](italic) [${symbol}${version}]($style)"
symbol = "[⌉](bold bright-blue)⌊ "
version_format = "${raw}"
style = "bold bright-yellow"
[ruby]
format = " [rb](italic) [${symbol}${version}]($style)"
symbol = "◆ "
version_format = "${raw}"
style = "bold red"
[rust]
format = " [rs](italic) [$symbol$version]($style)"
symbol = "⊃ "
version_format = "${raw}"
style = "bold red"
[package]
format = " [pkg](italic dimmed) [$symbol$version]($style)"
version_format = "${raw}"
symbol = "◨ "
style = "dimmed yellow italic bold"
[swift]
format = " [sw](italic) [${symbol}${version}]($style)"
symbol = "◁ "
style = "bold bright-red"
version_format = "${raw}"
[aws]
disabled = true
format = " [aws](italic) [$symbol $profile $region]($style)"
style = "bold blue"
symbol = "▲ "
[buf]
symbol = "■ "
format = " [buf](italic) [$symbol $version $buf_version]($style)"
[c]
symbol = " "
format = " [$symbol($version(-$name))]($style)"
[conda]
symbol = "◯ "
format = " conda [$symbol$environment]($style)"
[dart]
symbol = "◁◅ "
format = " dart [$symbol($version )]($style)"
[docker_context]
symbol = "◧ "
format = " docker [$symbol$context]($style)"
[elixir]
symbol = "△ "
format = " exs [$symbol $version OTP $otp_version ]($style)"
[elm]
symbol = "◩ "
format = " elm [$symbol($version )]($style)"
[golang]
symbol = "∩ "
format = " go [$symbol($version )]($style)"
[haskell]
symbol = "❯λ "
format = " hs [$symbol($version )]($style)"
[java]
symbol = " "
format = " java [${symbol}(${version} )]($style)"
[julia]
symbol = "◎ "
format = " jl [$symbol($version )]($style)"
[memory_usage]
symbol = "▪▫▪ "
format = " mem [${ram}( ${swap})]($style)"
[nim]
symbol = "▴▲▴ "
format = " nim [$symbol($version )]($style)"
[nix_shell]
style = 'bold italic dimmed blue'
symbol = '󱄅'
format = '[$symbol nix⎪$state⎪]($style) [$name](italic dimmed white)'
impure_msg = '[⌽](bold dimmed red)'
pure_msg = '[⌾](bold dimmed green)'
unknown_msg = '[◌](bold dimmed ellow)'
[spack]
symbol = "◇ "
format = " spack [$symbol$environment]($style)"

View file

@ -0,0 +1,81 @@
{
inputs,
config,
pkgs,
...
}:
{
home.username = "youwen";
home.homeDirectory = "/Users/youwen";
# link the configuration file in current directory to the specified location in home directory
# home.file.".config/i3/wallpaper.jpg".source = ./wallpaper.jpg;
# link all files in `./scripts` to `~/.config/i3/scripts`
# home.file.".config/i3/scripts" = {
# source = ./scripts;
# recursive = true; # link recursively
# executable = true; # make all files executable
# };
# encode the file content in nix configuration file directly
# home.file.".xxx".text = ''
# xxx
# '';
# Packages that should be installed to the user profile.
home.packages = with pkgs; [
neofetch
# archives
zip
xz
unzip
p7zip
# utils
nurl # helps fetch git data for nixpkgs
# nix related
#
# it provides the command `nom` works just like `nix`
# with more details log output
nix-output-monitor
];
programs.git.extraConfig.commit.gpgsign = "false";
programs.oh-my-posh.enableZshIntegration = true;
programs.bash.enable = true;
programs.zsh.enable = true;
programs.kitty = {
enable = true;
theme = "Tokyo Night";
font.name = "CaskaydiaCove Nerd Font";
settings = {
font_size = 13;
window_padding_width = "8 8 0";
confirm_os_window_close = -1;
shell_integration = "enabled";
enable_audio_bell = "no";
background_opacity = "0.8";
hide_window_decorations = "titlebar-only";
background_blur = 32;
};
};
# This value determines the home Manager release that your
# configuration is compatible with. This helps avoid breakage
# when a new home Manager release introduces backwards
# incompatible changes.
home.stateVersion = "24.05";
#
# You can update home Manager without changing this value. See
# the home Manager release notes for a list of state version
# changes in each release.
# Let home Manager install and manage itself.
programs.home-manager.enable = true;
}

6
hm/modules/default.nix Normal file
View file

@ -0,0 +1,6 @@
{
imports = [
./common
./linux
];
}

45
hm/modules/linux/default.nix Executable file
View file

@ -0,0 +1,45 @@
{
pkgs,
lib,
config,
...
}:
{
imports = [
./var/easyeffects
./programs
./spicetify
./desktop-environment
./theming
./platform-tweaks
];
programs.fish.functions = lib.mkIf config.liminalOS.programs.enable {
# rebuild = ''doas nixos-rebuild --flake ~/.config/liminalOS\#${osConfig.networking.hostName} switch &| nom'';
# os-test = ''doas nixos-rebuild --flake ~/.config/liminalOS\#${osConfig.networking.hostName} test &| nom'';
# nixos-update = ''
# cd ~/.config/liminalOS
# nix flake update --commit-lock-file
# doas nixos-rebuild --flake ~/.config/liminalOS\#${osConfig.networking.hostName} switch &| nom
# '';
nh = {
# wrapper for nh as it doesn't work with `doas`
body = ''
if count $argv > /dev/null
if contains -- os $argv or contains -- clean $argv
doas ${pkgs.nh}/bin/nh $argv -R
else
${pkgs.nh}/bin/nh $argv
end
else
${pkgs.nh}/bin/nh
end
'';
};
spt = "${pkgs.spotify-player}/bin/spotify_player";
};
home.file = lib.mkIf config.liminalOS.programs.enable {
".config/vesktop/settings.json".source = config.lib.file.mkOutOfStoreSymlink ./var/settings.json;
};
}

View file

@ -0,0 +1,23 @@
{
osConfig,
config,
lib,
...
}:
{
imports = [
./hyprland
./waybar
./swaync.nix
];
options.liminalOS.desktop = {
enable = lib.mkOption {
type = lib.types.bool;
default = osConfig.liminalOS.desktop.enable;
description = ''
Whether to enable the default configuration for the userland portions of the liminalOS desktop environment.
'';
};
};
}

View file

@ -0,0 +1,395 @@
{
pkgs,
config,
lib,
osConfig,
...
}:
let
cfg = config.liminalOS.desktop.hyprland;
in
{
options.liminalOS.desktop.hyprland = {
enable = lib.mkOption {
type = lib.types.bool;
default = config.liminalOS.desktop.enable;
description = ''
Whether to enable and rice Hyprland as well as some basic desktop utilities.
'';
};
applyGtkFix = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
description = ''
Whether to set GSK_RENDERER environment variable to stop GTK apps from crashing.
'';
};
idleDaemon.enable = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
description = ''
Whether to setup and enable Hypridle with some defaults to automatically lock the screen and suspend after idling.
'';
};
screenlocker.enable = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
description = ''
Whether to set up Hyprlock for screen locking.
'';
};
};
config = lib.mkIf cfg.enable {
home.packages =
with pkgs;
[
wl-clipboard
libsForQt5.qtstyleplugin-kvantum
libsForQt5.qt5ct
papirus-icon-theme
libsForQt5.qt5ct
hyprland-qtutils
]
++ (lib.optionals (!osConfig.liminalOS.theming.enable) [
pkgs.bibata-cursors
]);
wayland.windowManager.hyprland = {
enable = true;
settings = {
"$mod" = "SUPER";
"$Left" = "H";
"$Right" = "L";
"$Up" = "K";
"$Down" = "J";
env =
(lib.optionals cfg.applyGtkFix [
"GSK_RENDERER,gl"
])
++ (lib.optionals (config.liminalOS.formFactor == "laptop" && !osConfig.liminalOS.theming.enable) [
"HYPRCURSOR_THEME,Bibata-Modern-Ice"
"HYPRCURSOR_SIZE,24"
"XCURSOR_THEME,Bibata-Modern-Ice"
"XCURSOR_SIZE,24"
])
++ (lib.optionals (config.liminalOS.formFactor == "desktop" && !osConfig.liminalOS.theming.enable) [
"HYPRCURSOR_THEME,Bibata-Modern-Ice"
"HYPRCURSOR_SIZE,26"
"XCURSOR_THEME,Bibata-Modern-Ice"
"XCURSOR_SIZE,26"
]);
bind =
[
# Window actions
"$mod, Q, killactive"
"$mod, W, togglefloating"
"$mod, V, togglesplit"
"$mod, Return, fullscreen"
# Move around
"$mod, $Left, movefocus, l"
"$mod, $Right, movefocus, r"
"$mod, $Up, movefocus, u"
"$mod, $Down, movefocus, d"
"$mod, D, workspace, previous"
"$mod, 1, workspace, 1"
"$mod+Ctrl, H, workspace, 1"
"$mod, 2, workspace, 2"
"$mod+Ctrl, J, workspace, 2"
"$mod, 3, workspace, 3"
"$mod+Ctrl, K, workspace, 3"
"$mod, 4, workspace, 4"
"$mod+Ctrl, L, workspace, 4"
"$mod, 5, workspace, 5"
"$mod+Ctrl, semicolon, workspace, 5"
"$mod, 6, workspace, 6"
"$mod+Ctrl, apostrophe, workspace, 6"
"$mod, 7, workspace, 7"
"$mod+Ctrl, U, workspace, 7"
"$mod, 8, workspace, 8"
"$mod+Ctrl, I, workspace, 8"
"$mod, 9, workspace, 9"
"$mod+Ctrl, O, workspace, 9"
"$mod, 0, workspace, 10"
"$mod+Ctrl, P, workspace, 10"
# Move active window to a workspace with mainMod + SHIFT + [0-9]
"$mod+Shift, 1, movetoworkspace, 1"
"$mod+Ctrl+Shift, H, movetoworkspace, 1"
"$mod+Shift, 2, movetoworkspace, 2"
"$mod+Ctrl+Shift, J, movetoworkspace, 2"
"$mod+Shift, 3, movetoworkspace, 3"
"$mod+Ctrl+Shift, K, movetoworkspace, 3"
"$mod+Shift, 4, movetoworkspace, 4"
"$mod+Ctrl+Shift, L, movetoworkspace, 4"
"$mod+Shift, 5, movetoworkspace, 5"
"$mod+Ctrl+Shift, semicolon, movetoworkspace, 5"
"$mod+Shift, 6, movetoworkspace, 6"
"$mod+Ctrl+Shift, apostrophe, movetoworkspace, 6"
"$mod+Shift, 7, movetoworkspace, 7"
"$mod+Ctrl+Shift, U, movetoworkspace, 7"
"$mod+Shift, 8, movetoworkspace, 8"
"$mod+Ctrl+Shift, I, movetoworkspace, 8"
"$mod+Shift, 9, movetoworkspace, 9"
"$mod+Ctrl+Shift, O, movetoworkspace, 9"
"$mod+Shift, 0, movetoworkspace, 10"
"$mod+Ctrl+Shift, P, movetoworkspace, 10"
# Special workspace
"$mod, S, togglespecialworkspace"
"$mod+Alt, S, movetoworkspacesilent, special"
# Move windows around
"$mod+Shift, $Left, movewindow, l"
"$mod+Shift, $Right, movewindow, r"
"$mod+Shift, $Up, movewindow, u"
"$mod+Shift, $Down, movewindow, d"
"$mod+Ctrl, bracketright, movetoworkspace, r+1"
"$mod+Ctrl, bracketleft, movetoworkspace, r-1"
"$mod, bracketright, workspace, r+1"
"$mod, bracketleft, workspace, r-1"
# Utilities
"$mod, Space, exec, pkill -x rofi || rofi -show drun" # Run rofi application launcher
"$mod, G, exec, pkill -x rofi || rofi -show window" # Run rofi window switcher
''$mod, P, exec, ${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)" - | ${pkgs.swappy}/bin/swappy -f -'' # Screenshot
''$mod+Shift, P, exec, ${pkgs.grim}/bin/grim - | ${pkgs.swappy}/bin/swappy -f -'' # Screenshot
"$mod, Backspace, exec, pkill -x wlogout || wlogout" # show logout menu
"$mod, Z, exec, loginctl lock-session"
# Media controls
",XF86AudioMute, exec, ${pkgs.pamixer}/bin/pamixer -t"
",XF86AudioPlay, exec, ${pkgs.playerctl}/bin/playerctl --player=%any,firefox play-pause"
",XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl --player=%any,firefox next"
",XF86AudioRewind, exec, ${pkgs.playerctl}/bin/playerctl --player=%any,firefox previous"
]
++ (lib.optionals config.liminalOS.programs.zen.enable [
"$mod, F, exec, zen"
])
++ (lib.optionals config.liminalOS.desktop.swaync.enable [
"$mod, N, exec, sleep 0.1 && ${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw"
])
++ (lib.optionals config.liminalOS.programs.enable [
# Application Keybinds
"$mod, R, exec, ${pkgs.pavucontrol}/bin/pavucontrol -t 3" # open pavucontrol on 'outputs' tab
"$mod, T, exec, ${pkgs.kitty}/bin/kitty"
"$mod, E, exec, ${pkgs.xfce.thunar}/bin/thunar"
"$mod, M, exec, ${pkgs.thunderbird}/bin/thunderbird"
]);
bindm = [
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
];
bindel = [
",XF86MonBrightnessDown, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 5%-"
",XF86MonBrightnessUp, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 5%+"
",XF86AudioRaiseVolume, exec, ${pkgs.pamixer}/bin/pamixer -i 5"
",XF86AudioLowerVolume, exec, ${pkgs.pamixer}/bin/pamixer -d 5"
];
binde = [
# Resize windows
"$mod+Alt, $Right, resizeactive, 30 0"
"$mod+Alt, $Left, resizeactive, -30 0"
"$mod+Alt, $Up, resizeactive, 0 -30"
"$mod+Alt, $Down, resizeactive, 0 30"
];
windowrulev2 = import ./windowrulev2.nix;
layerrule = [
"blur,rofi"
"ignorezero,rofi"
"animation slide bottom 0.2 0.2 wind,rofi"
"blur,notifications"
"ignorezero,notifications"
"blur,swaync-notification-window"
"animation slide right 0.5 0.5,swaync-control-center"
"animation slide right 0.5 0.5,notifications"
"animation slide right 0.5 0.5,swaync-notification-window"
"ignorezero,swaync-notification-window"
"blur,swaync-control-center"
"ignorezero,swaync-control-center"
"blur,logout_dialog"
];
dwindle = {
pseudotile = "yes";
preserve_split = "yes";
};
animations = {
enabled = "yes";
bezier = [
"wind, 0.05, 0.9, 0.1, 1.05"
"winIn, 0.1, 1.1, 0.1, 1.1"
"winOut, 0.3, -0.3, 0, 1"
"liner, 1, 1, 1, 1"
];
animation = [
"windows, 1, 6, wind, slide"
"windowsIn, 1, 6, winIn, slide"
"windowsOut, 1, 5, winOut, slide"
"windowsMove, 1, 5, wind, slide"
# "border, 1, 1, liner"
# "borderangle, 1, 30, liner, loop"
"fade, 1, 10, default"
"workspaces, 1, 5, wind"
# "layers, 1, 8, default, slide"
];
};
general = {
gaps_in = "3";
gaps_out = "8";
border_size = "2";
# the dot is a hyprland name, not nix syntax, so we escape it
"col.active_border" = pkgs.lib.mkForce "rgba(ca9ee6ff) rgba(f2d5cfff) 45deg";
"col.inactive_border" = pkgs.lib.mkForce "rgba(b4befecc) rgba(6c7086cc) 45deg";
layout = "dwindle";
resize_on_border = "true";
};
misc = {
disable_hyprland_logo = true;
disable_splash_rendering = true;
};
cursor = {
hide_on_key_press = true;
};
decoration = {
rounding = "10";
dim_special = "0.3";
blur = {
enabled = "yes";
size = "6";
passes = "3";
new_optimizations = "on";
ignore_opacity = "on";
xray = "false";
special = true;
};
shadow = {
enabled = false;
};
};
input = {
sensitivity = if config.liminalOS.formFactor == "laptop" then "0.0" else "-0.65";
};
};
};
wayland.windowManager.hyprland.settings.input.touchpad =
lib.mkIf (config.liminalOS.formFactor == "laptop")
{
natural_scroll = true;
disable_while_typing = true;
clickfinger_behavior = true;
tap-to-click = false;
scroll_factor = 0.15;
};
services.hyprpaper.enable = true;
programs.wlogout.enable = true;
programs.rofi = {
enable = true;
package = pkgs.rofi-wayland;
# theme = "gruvbox-dark";
terminal = "${pkgs.kitty}/bin/kitty";
extraConfig = {
modi = "window,drun,ssh,combi,filebrowser,recursivebrowser";
display-drun = " 󰘧 ";
combi-modi = "window,drun,ssh";
run-shell-command = "{terminal} -e {cmd}";
sidebar-mode = true;
background-color = "transparent";
sorting = "fuzzy";
};
};
programs.hyprlock = lib.mkIf cfg.screenlocker.enable {
enable = true;
settings = {
general = {
hide_cursor = true;
grace = 1;
};
background = {
monitor = "";
path = "/tmp/__hyprlock-monitor-screenshot.png";
blur_passes = 3;
blur_size = 7;
noise = 0.0117;
contrast = 0.8916;
brightness = 0.8172;
vibrancy = 0.1696;
vibrancy_darkness = 0.0;
};
input-field = {
monitor = "";
size = "200, 50";
outline_thickness = 3;
dots_size = 0.33;
dots_spacing = 0.15;
dots_center = false;
dots_rounding = -1;
outer_color = "rgb(151515)";
inner_color = "rgb(200, 200, 200)";
font_color = "rgb(10, 10, 10)";
fade_on_empty = true;
fade_timeout = 1000;
placeholder_text = "<i>Input Password...</i>";
hide_input = false;
rounding = -1;
check_color = "rgb(204, 136, 34)";
fail_color = "rgb(204, 34, 34)";
fail_text = "<i>$FAIL <b>($ATTEMPTS)</b></i>";
fail_timeout = 2000;
fail_transition = 300;
capslock_color = -1;
numlock_color = -1;
bothlock_color = -1;
invert_numlock = false;
swap_font_color = false;
position = "0, -20";
halign = "center";
valign = "center";
};
};
};
services.hypridle = lib.mkIf cfg.idleDaemon.enable {
enable = true;
settings = {
general = {
lock_cmd = "pidof hyprlock || ${pkgs.grim}/bin/grim -o ${config.programs.hyprlock.settings.background.monitor} /tmp/__hyprlock-monitor-screenshot.png && ${pkgs.hyprlock}/bin/hyprlock"; # avoid starting multiple hyprlock instances.
before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
after_sleep_cmd = "hyprctl dispatch dpms on"; # to avoid having to press a key twice to turn on the display.
};
listener = [
{
timeout = 1500;
on-timeout = "loginctl lock-session";
}
{
timeout = 330; # 5.5min
on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed
on-resume = "hyprctl dispatch dpms on"; # screen on when activity is detected after timeout has fired.
}
{
timeout = 1800;
on-timeout = "systemctl suspend";
}
];
};
};
};
}

View file

@ -0,0 +1,86 @@
[
"opacity 0.90 0.90,class:^(librewolf)$"
"opacity 0.90 0.90,class:^(floorp)$"
"opacity 0.90 0.90,class:^(zen-alpha)$"
"opacity 0.90 0.90,class:^(zen-beta)$"
"opacity 0.90 0.90,class:^(Brave-browser)$"
"opacity 0.80 0.80,class:^(Steam)$"
"opacity 0.80 0.80,class:^(steam)$"
"opacity 0.80 0.80,class:^(steamwebhelper)$"
"opacity 0.80 0.80,class:^(Spotify)$"
"opacity 0.80 0.80,initialTitle:^(Spotify Premium)$"
"opacity 0.80 0.80,initialTitle:^(Spotify Free)$"
"opacity 0.80 0.80,class:^(code-oss)$"
"opacity 0.80 0.80,class:^(Code)$"
"opacity 0.80 0.80,class:^(code-url-handler)$"
"opacity 0.80 0.80,class:^(code-insiders-url-handler)$"
"opacity 0.80 0.80,class:^(kitty)$"
"opacity 0.80 0.80,class:^(neovide)$"
"opacity 0.80 0.80,class:^(org.kde.dolphin)$"
"opacity 0.80 0.80,class:^(thunar)$"
"opacity 0.80 0.80,class:^(org.kde.ark)$"
"opacity 0.80 0.80,class:^(nwg-look)$"
"opacity 0.80 0.80,class:^(qt5ct)$"
"opacity 0.80 0.80,class:^(qt6ct)$"
"opacity 0.80 0.80,class:^(kvantummanager)$"
"opacity 0.80 0.80,class:^(waypaper)$"
"opacity 0.80 0.80,class:^(org.pulseaudio.pavucontrol)$"
"opacity 0.80 0.80,class:^(com.github.wwmm.easyeffects)$"
"opacity 0.80 0.80,class:^(thunderbird)$"
"opacity 0.90 0.90,class:^(com.github.rafostar.Clapper)$ # Clapper-Gtk"
"opacity 0.80 0.80,class:^(com.github.tchx84.Flatseal)$ # Flatseal-Gtk"
"opacity 0.80 0.80,class:^(hu.kramo.Cartridges)$ # Cartridges-Gtk"
"opacity 0.80 0.80,class:^(com.obsproject.Studio)$ # Obs-Qt"
"opacity 0.80 0.80,class:^(gnome-boxes)$ # Boxes-Gtk"
"opacity 0.80 0.80,class:^(discord)$ # Discord-Electron"
"opacity 0.80 0.80,class:^(vesktop)$ # Vesktop-Electron"
"opacity 0.80 0.80,class:^(ArmCord)$ # ArmCord-Electron"
"opacity 0.80 0.80,class:^(app.drey.Warp)$ # Warp-Gtk"
"opacity 0.80 0.80,class:^(net.davidotek.pupgui2)$ # ProtonUp-Qt"
"opacity 0.80 0.80,class:^(yad)$ # Protontricks-Gtk"
"opacity 0.80 0.80,class:^(signal)$ # Signal-Gtk"
"opacity 0.80 0.80,class:^(io.github.alainm23.planify)$ # planify-Gtk"
"opacity 0.80 0.80,class:^(io.gitlab.theevilskeleton.Upscaler)$ # Upscaler-Gtk"
"opacity 0.80 0.80,class:^(com.github.unrud.VideoDownloader)$ # VideoDownloader-Gtk"
"opacity 0.80 0.80,class:^(lutris)$ # Lutris game launcher"
"opacity 0.80 0.70,class:^(pavucontrol)$"
"opacity 0.80 0.70,class:^(blueman-manager)$"
"opacity 0.80 0.70,class:^(nm-applet)$"
"opacity 0.80 0.70,class:^(nm-connection-editor)$"
"opacity 0.80 0.70,class:^(org.kde.polkit-kde-authentication-agent-1)$"
"float,class:^(org.kde.dolphin)$,title:^(Progress Dialog Dolphin)$"
"float,class:^(org.kde.dolphin)$,title:^(Copying Dolphin)$"
"float,title:^(Picture-in-Picture)$"
"float,class:^(librewolf)$,title:^(Library)$"
"float,class:^(floorp)$,title:^(Library)$"
"float,class:^(zen-alpha)$,title:^(Library)$"
"float,title:^(Extension: (Bitwarden Password Manager))$"
"float,class:^(vlc)$"
"float,class:^(kvantummanager)$"
"float,class:^(qt5ct)$"
"float,class:^(qt6ct)$"
"float,class:^(nwg-look)$"
"float,class:^(org.kde.ark)$"
"float,class:^(org.pulseaudio.pavucontrol)$"
"float,class:^(com.github.rafostar.Clapper)$ # Clapper-Gtk"
"float,class:^(app.drey.Warp)$ # Warp-Gtk"
"float,class:^(net.davidotek.pupgui2)$ # ProtonUp-Qt"
"float,class:^(yad)$ # Protontricks-Gtk"
"float,class:^(eog)$ # Imageviewer-Gtk"
"float,class:^(io.github.alainm23.planify)$ # planify-Gtk"
"float,class:^(io.gitlab.theevilskeleton.Upscaler)$ # Upscaler-Gtk"
"float,class:^(com.github.unrud.VideoDownloader)$ # VideoDownloader-Gkk"
"float,class:^(blueman-manager)$"
"float,class:^(nm-applet)$"
"float,class:^(nm-connection-editor)$"
"float,class:^(org.kde.polkit-kde-authentication-agent-1)$"
"opacity 0.80 0.80,class:^(org.freedesktop.impl.portal.desktop.gtk)$"
"opacity 0.80 0.80,class:^(org.freedesktop.impl.portal.desktop.hyprland)$"
"size 50% 50%,class:^(org.pulseaudio.pavucontrol)"
"stayfocused, class:^(pinentry-)" # fix pinentry losing focus
]

View file

@ -0,0 +1,325 @@
{ config, lib, ... }:
let
cfg = config.liminalOS.desktop.swaync;
in
{
options.liminalOS.desktop.swaync = {
enable = lib.mkOption {
type = lib.types.bool;
default = config.liminalOS.desktop.enable;
description = ''
Whether to enable the swaync notification center and daemon.
'';
};
};
config = lib.mkIf cfg.enable {
services.swaync.enable = true;
services.swaync.settings = {
positionX = "right";
positionY = "top";
control-center-margin-top = 10;
control-center-margin-bottom = 10;
control-center-margin-right = 10;
control-center-margin-left = 10;
notification-icon-size = 64;
notification-body-image-height = 100;
notification-body-image-width = 200;
timeout = 10;
timeout-low = 5;
timeout-critical = 0;
fit-to-screen = false;
control-center-width = 500;
control-center-height = 800;
notification-window-width = 500;
keyboard-shortcuts = true;
image-visibility = "when-available";
transition-time = 200;
hide-on-clear = false;
hide-on-action = true;
script-fail-notify = true;
widgets = [
"title"
"mpris"
"volume"
"backlight"
"dnd"
"notifications"
];
widget-config = {
title = {
text = "Mission Control";
clear-all-button = "true";
button-text = " All Systems Go";
};
dnd = {
text = "Do Not Disturb";
};
label = {
max-lines = 1;
text = "Mission Control";
};
mpris = {
image-size = 96;
image-radius = 7;
};
volume = {
label = "󰕾";
};
backlight = {
label = "󰃟";
};
};
};
home.file.".config/swaync/style.css".text = ''
* {
font-family: ${config.stylix.fonts.monospace.name};
}
.control-center .notification-row:focus,
.control-center .notification-row:hover {
background: #${config.lib.stylix.colors.base00}
}
.notification-row {
outline: none;
margin: 10px;
padding: 0;
}
.notification {
background: transparent;
padding: 0;
margin: 0px;
opacity: 0.75;
}
.notification-content {
background: #${config.lib.stylix.colors.base00};
padding: 10px;
border-radius: 5px;
border: 2px solid #${config.lib.stylix.colors.base05};
margin: 0;
}
.notification-default-action {
margin: 0;
padding: 0;
border-radius: 5px;
}
.close-button {
background: #${config.lib.stylix.colors.base08};
color: #${config.lib.stylix.colors.base00};
text-shadow: none;
padding: 0;
border-radius: 5px;
margin-top: 5px;
margin-right: 5px;
}
.close-button:hover {
box-shadow: none;
background: #${config.lib.stylix.colors.base0D};
transition: all .15s ease-in-out;
border: none
}
.notification-action {
border: 2px solid #${config.lib.stylix.colors.base0D};
border-top: none;
border-radius: 5px;
}
.notification-default-action:hover,
.notification-action:hover {
color: #${config.lib.stylix.colors.base0B};
background: #${config.lib.stylix.colors.base0B}
}
.notification-default-action {
border-radius: 5px;
margin: 0px;
}
.notification-default-action:not(:only-child) {
border-bottom-left-radius: 7px;
border-bottom-right-radius: 7px
}
.notification-action:first-child {
border-bottom-left-radius: 10px;
background: #${config.lib.stylix.colors.base00}
}
.notification-action:last-child {
border-bottom-right-radius: 10px;
background: #${config.lib.stylix.colors.base00}
}
.inline-reply {
margin-top: 8px
}
.inline-reply-entry {
background: #${config.lib.stylix.colors.base00};
color: #${config.lib.stylix.colors.base05};
caret-color: #${config.lib.stylix.colors.base05};
border: 1px solid #${config.lib.stylix.colors.base09};
border-radius: 5px
}
.inline-reply-button {
margin-left: 4px;
background: #${config.lib.stylix.colors.base00};
border: 1px solid #${config.lib.stylix.colors.base09};
border-radius: 5px;
color: #${config.lib.stylix.colors.base05}
}
.inline-reply-button:disabled {
background: initial;
color: #${config.lib.stylix.colors.base03};
border: 1px solid transparent
}
.inline-reply-button:hover {
background: #${config.lib.stylix.colors.base00}
}
.body-image {
margin-top: 6px;
background-color: #${config.lib.stylix.colors.base05};
border-radius: 5px
}
.summary {
font-size: 16px;
font-weight: 700;
background: transparent;
color: rgba(158, 206, 106, 1);
text-shadow: none
}
.time {
font-size: 16px;
font-weight: 700;
background: transparent;
color: #${config.lib.stylix.colors.base05};
text-shadow: none;
margin-right: 18px
}
.body {
font-size: 15px;
font-weight: 400;
background: transparent;
color: #${config.lib.stylix.colors.base05};
text-shadow: none
}
.control-center {
background: #${config.lib.stylix.colors.base00};
border: 2px solid #${config.lib.stylix.colors.base0C};
border-radius: 5px;
opacity: 0.85;
}
.control-center-list {
background: transparent
}
.control-center-list-placeholder {
opacity: .5
}
.floating-notifications {
background: transparent
}
.blank-window {
background: alpha(black, 0)
}
.widget-title {
color: #${config.lib.stylix.colors.base0B};
background: #${config.lib.stylix.colors.base00};
padding: 5px 10px;
margin: 10px 10px 5px 10px;
font-size: 1.5rem;
border-radius: 5px;
}
.widget-title>button {
font-size: 1rem;
color: #${config.lib.stylix.colors.base05};
text-shadow: none;
background: #${config.lib.stylix.colors.base00};
box-shadow: none;
border-radius: 5px;
}
.widget-title>button:hover {
background: #${config.lib.stylix.colors.base08};
color: #${config.lib.stylix.colors.base00};
}
.widget-dnd {
background: #${config.lib.stylix.colors.base00};
padding: 5px 10px;
margin: 10px 10px 5px 10px;
border-radius: 5px;
font-size: large;
color: #${config.lib.stylix.colors.base0B};
}
.widget-dnd>switch {
border-radius: 5px;
/* border: 1px solid #${config.lib.stylix.colors.base0B}; */
background: #${config.lib.stylix.colors.base0B};
}
.widget-dnd>switch:checked {
background: #${config.lib.stylix.colors.base08};
border: 1px solid #${config.lib.stylix.colors.base08};
}
.widget-dnd>switch slider {
background: #${config.lib.stylix.colors.base00};
border-radius: 5px
}
.widget-dnd>switch:checked slider {
background: #${config.lib.stylix.colors.base00};
border-radius: 5px
}
.widget-label {
margin: 10px 10px 5px 10px;
}
.widget-label>label {
font-size: 1rem;
color: #${config.lib.stylix.colors.base05};
}
.widget-mpris {
color: #${config.lib.stylix.colors.base05};
padding: 5px 10px;
margin: 10px 10px 5px 10px;
border-radius: 5px;
}
.widget-mpris > box > button {
border-radius: 5px;
}
.widget-mpris-player {
padding: 5px 10px;
margin: 10px
}
.widget-mpris-title {
font-weight: 700;
font-size: 1.25rem
}
.widget-mpris-subtitle {
font-size: 1.1rem
}
.widget-menubar>box>.menu-button-bar>button {
border: none;
background: transparent
}
.topbar-buttons>button {
border: none;
background: transparent
}
.widget-volume {
background: #${config.lib.stylix.colors.base01};
padding: 5px;
margin: 10px 10px 5px 10px;
border-radius: 5px;
font-size: x-large;
color: #${config.lib.stylix.colors.base05};
}
.widget-volume>box>button {
background: #${config.lib.stylix.colors.base0B};
border: none
}
.per-app-volume {
background-color: #${config.lib.stylix.colors.base00};
padding: 4px 8px 8px;
margin: 0 8px 8px;
border-radius: 5px;
}
.widget-backlight {
background: #${config.lib.stylix.colors.base01};
padding: 5px;
margin: 10px 10px 5px 10px;
border-radius: 5px;
font-size: x-large;
color: #${config.lib.stylix.colors.base05}
}
'';
};
}

View file

@ -0,0 +1,208 @@
{
pkgs,
osConfig,
config,
lib,
...
}:
let
cfg = config.liminalOS.desktop.waybar;
in
{
options.liminalOS.desktop.waybar = {
enable = lib.mkOption {
type = lib.types.bool;
default = config.liminalOS.desktop.enable;
description = ''
Whether to enable Waybar and the liminalOS rice.
'';
};
};
config = {
programs.waybar = lib.mkIf cfg.enable {
enable = true;
style = ./style.css;
systemd.enable = true;
settings = {
mainBar = {
name = "bar0";
layer = "top";
position = "top";
height = 28;
"margin" = "5px 10px 0px 10px";
"spacing" = 10;
"mode" = "top";
reload_style_on_change = true;
modules-left = [
"hyprland/workspaces"
"hyprland/window"
];
modules-right = [
"tray"
"idle_inhibitor"
"backlight"
"wireplumber"
"network"
"battery"
"disk"
"memory"
"cpu"
"temperature"
"clock"
"custom/notification"
];
idle_inhibitor = {
format = "{icon}";
format-icons = {
activated = "󰛊 ";
deactivated = "󰾫 ";
};
};
network = {
format = "{ifname}";
format-wifi = "{icon}{essid}";
format-ethernet = " {essid}";
format-disconnected = "󰤯 Disconnected";
format-icons = [
"󰤟 "
"󰤢 "
"󰤨 "
];
tooltip-format = " {bandwidthUpBits} | {bandwidthDownBits}";
tooltip-format-wifi = " {bandwidthUpBits} | {bandwidthDownBits} | 󱄙 {signalStrength}";
};
backlight = {
interval = 2;
format = "󰖨 {percent}%";
on-scroll-up = "${pkgs.brightnessctl}/bin/brightnessctl set +4";
on-scroll-down = "${pkgs.brightnessctl}/bin/brightnessctl set 4-";
};
wireplumber = {
format = "{icon} {volume}%";
format-muted = "󰝟 ";
on-click = "pamixer -t";
on-scroll-up = "${pkgs.pamixer}/bin/pamixer set 5%+";
on-scroll-down = "${pkgs.pamixer}/bin/pamixer set 5%-";
format-icons = [
""
""
""
""
""
];
};
battery = {
interval = 10;
format = "{icon} {capacity}%";
format-icons = [
"󰂎"
"󰁺"
"󰁻"
"󰁼"
"󰁽"
"󰁾"
"󰁿"
"󰂀"
"󰂁"
"󰂂"
"󰁹"
];
tooltip = true;
tooltip-format = "{timeTo}";
};
disk = {
intervel = 30;
format = "󰋊 {percentage_used}%";
tooltip-format = "{used} used out of {total} on \"{path}\" ({percentage_used}%)";
};
memory = {
interval = 10;
format = " {used}";
tooltip-format = "{used}GiB used of {total}GiB ({percentage}%)";
};
cpu = {
interval = 10;
format = " {usage}%";
};
temperature = {
interval = 10;
};
clock = {
interval = 1;
format = "{:%H:%M:%S}";
};
"custom/notification" = lib.mkIf config.liminalOS.desktop.swaync.enable {
tooltip = false;
format = "{icon}";
format-icons = {
notification = "<span foreground='red'><small><sup></sup></small></span>";
none = " ";
dnd-notification = "<span foreground='red'><small><sup></sup></small></span>";
dnd-none = " ";
};
return-type = "json";
exec = "${pkgs.swaynotificationcenter}/bin/swaync-client -swb";
on-click = "sleep 0.1 && ${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw";
on-click-right = "sleep 0.1 && ${pkgs.swaynotificationcenter}/bin/swaync-client -d -sw";
escape = true;
};
"hyprland/workspaces" = {
show-special = true;
persistent-workspaces = {
"*" = [
1
2
3
4
5
6
7
8
9
10
];
};
format = "{icon}";
format-icons = {
active = "";
empty = "";
default = "";
urgent = "";
special = "󰠱";
};
};
"hyprland/window" = {
icon = true;
icon-size = 20;
max-length = 50;
rewrite = {
"(.*) LibreWolf" = "$1";
"(.*) Zen Browser" = "$1";
"^$" = "👾";
};
};
};
};
};
};
}

View file

@ -0,0 +1,171 @@
{
# home.file.".config/waybar/config".source = ./config.jsonc;
programs.waybar = {
enable = true;
style = ./style.css;
systemd.enable = true;
settings = {
mainBar = {
name = "bar0";
layer = "top";
position = "top";
height = 28;
# "width" = 1920;
"margin" = "5px 10px 0px 10px";
"spacing" = 10;
"mode" = "top";
# "exclusive" = true;
# "output" = "eDP-1";
reload_style_on_change = true;
modules-left = [ "hyprland/workspaces" ];
modules-center = [ "hyprland/window" ];
modules-right = [
"tray"
"idle_inhibitor"
"backlight"
"wireplumber"
"network"
"battery"
"disk"
"memory"
"cpu"
"temperature"
"clock"
];
idle_inhibitor = {
format = "{icon}";
format-icons = {
activated = "󰛊 ";
deactivated = "󰾫 ";
};
};
network = {
format = "{ifname}";
format-wifi = "{icon}{essid}";
format-ethernet = " {essid}";
format-disconnected = "󰤯 Disconnected";
format-icons = [
"󰤟 "
"󰤢 "
"󰤨 "
];
tooltip-format = " {bandwidthUpBits} | {bandwidthDownBits}";
tooltip-format-wifi = " {bandwidthUpBits} | {bandwidthDownBits} | 󱄙 {signalStrength}";
};
backlight = {
interval = 2;
format = "󰖨 {percent}%";
on-scroll-up = "brightnessctl set +4";
on-scroll-down = "brightnessctl set 4-";
};
wireplumber = {
format = "{icon} {volume}%";
format-muted = "󰝟 ";
on-click = "pamixer -t";
on-scroll-up = "pamixer set 5%+";
on-scroll-down = "pamixer set 5%-";
format-icons = [
""
""
""
""
""
];
};
battery = {
interval = 10;
format = "{icon}{capacity}%";
format-icons = [
"󰂎"
"󰁺"
"󰁻"
"󰁼"
"󰁽"
"󰁾"
"󰁿"
"󰂀"
"󰂁"
"󰂂"
"󰁹"
];
tooltip = true;
tooltip-format = "{timeTo}";
};
disk = {
intervel = 30;
format = "󰋊 {percentage_used}%";
tooltip-format = "{used} used out of {total} on \"{path}\" ({percentage_used}%)";
};
memory = {
interval = 10;
format = " {used}";
tooltip-format = "{used}GiB used of {total}GiB ({percentage}%)";
};
cpu = {
interval = 10;
format = " {usage}%";
};
temperature = {
interval = 10;
};
clock = {
interval = 1;
format = "{:%H:%M:%S}";
};
"hyprland/workspaces" = {
show-special = true;
persistent-workspaces = {
"*" = [
1
2
3
4
5
6
7
8
9
10
];
};
format = "{icon}";
format-icons = {
active = "";
empty = "";
default = "";
urgent = "";
special = "󰠱";
};
};
"hyprland/window" = {
icon = true;
icon-size = 20;
max-length = 50;
rewrite = {
"(.*) Ablaze Floorp" = "$1";
"(.*) Zen Browser" = "$1";
"^$" = "👾";
};
};
};
};
};
}

View file

@ -0,0 +1,71 @@
window#waybar {
font-family: "CaskaydiaCove Nerd Font";
background-color: rgba(0,0,0,0);
font-size: 0.8rem;
border-radius: 0.5rem;
}
.modules-left, .modules-center {
opacity: 1;
background: linear-gradient(45deg, rgb(214, 39, 200), rgb(5, 83, 252));
border-radius: 0.5rem;
padding: 2px;
}
.modules-right {
opacity: 1;
background-color: rgba(0,0,0,0.5);
border-radius: 0.5rem;
padding: 2px 2px 2px 10px
}
/* label.module {
margin-left: -1px;
} */
#workspaces {
background-color: rgba(0,0,0,0.5);
border-radius: 0.5rem;
padding: 0 2px;
}
#workspaces button {
font-size: 0.6rem;
padding: 0 0.3rem 0 0;
}
#window {
background-color: rgba(0,0,0,0.5);
border-radius: 0.5rem;
padding: 2px 5px;
}
#clock {
font-weight: bolder;
border-radius: 0.5rem;
padding: 0 3px 0 0;
}
#battery {
color: lightgreen;
}
#memory {
color: lightpink;
}
#disk {
color: lightskyblue;
}
#cpu {
color: lightgoldenrodyellow;
}
#temperature {
color: lightslategray;
}
#network {
color: lightsteelblue;
}

View file

@ -0,0 +1,78 @@
window#waybar {
font-family: "CaskaydiaCove Nerd Font";
background-color: rgba(0,0,0,0);
font-size: 0.8rem;
border-radius: 0.5rem;
color: #cccccc;
}
.modules-left {
opacity: 1;
background: linear-gradient(45deg, rgb(214, 39, 200), rgb(5, 83, 252));
border-radius: 0.5rem;
padding: 2px;
}
.modules-center {
opacity: 0;
}
.modules-right {
opacity: 1;
background-color: rgba(0,0,0,0.5);
border-radius: 0.5rem;
padding: 2px 2px 2px 10px
}
/* label.module {
margin-left: -1px;
} */
#workspaces {
background-color: rgba(0,0,0,0.5);
border-radius: 0.5rem;
padding: 0 2px;
}
#workspaces button {
font-size: 0.6rem;
padding: 0 0.3rem 0 0;
border: #cccccc;
color: #cccccc;
}
#window {
background-color: rgba(0,0,0,0.5);
border-radius: 0.5rem;
padding: 2px 5px;
}
#clock {
font-weight: bolder;
border-radius: 0.5rem;
padding: 0 3px 0 0;
}
#battery {
color: lightgreen;
}
#memory {
color: lightpink;
}
#disk {
color: lightskyblue;
}
#cpu {
color: lightgoldenrodyellow;
}
#temperature {
color: lightslategray;
}
#network {
color: lightsteelblue;
}

View file

@ -0,0 +1,35 @@
{
inputs,
lib,
config,
osConfig,
...
}:
let
cfg = config.liminalOS;
in
{
options.liminalOS = {
formFactor = lib.mkOption {
type = lib.types.nullOr (
lib.types.enum [
"laptop"
"desktop"
]
);
default = osConfig.liminalOS.formFactor;
description = ''
Form factor of the machine. Adjusts some UI features. Inherited from system configuration liminalOS.formFactor if set, otherwise you must set it here.
'';
};
};
config = {
assertions = [
{
assertion = cfg.formFactor != null;
message = "You must set liminalOS.formFactor either in the home-manager configuration for the user or in the OS configuration for the system!";
}
];
};
}

View file

@ -0,0 +1,88 @@
{
config,
pkgs,
lib,
...
}:
let
cfg = config.liminalOS.programs.bulk;
mkEnableOption' =
desc:
lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
description = ''
Whether to enable ${desc}.
'';
};
in
{
options.liminalOS.programs.bulk = {
enable = lib.mkOption {
type = lib.types.bool;
default = config.liminalOS.programs.enable;
description = ''
Whether to enable installation of various useful programs in the system.
'';
};
archiveTools.enable = mkEnableOption' "archive tools";
instantMessaging.enable = mkEnableOption' "instant messengers";
nixCliTools.enable = mkEnableOption' "Nix CLI helper tools and utilities";
desktopApps.enable = mkEnableOption' "desktop applications like mail and file explorer";
misc.enable = mkEnableOption' "assorted uncategorized utilities";
};
config = lib.mkIf cfg.enable {
home.packages =
lib.optionals cfg.archiveTools.enable (
with pkgs;
[
zip
xz
unzip
p7zip
]
)
++ lib.optionals cfg.nixCliTools.enable (
with pkgs;
[
nurl
nix-output-monitor
]
)
++ lib.optionals cfg.misc.enable (
with pkgs;
[
ffmpeg
pciutils # lspci
usbutils # lsusb
ani-cli
manga-tui
hledger
]
)
++ lib.optionals cfg.instantMessaging.enable (
with pkgs;
[
vesktop
signal-desktop
iamb
]
++ lib.optionals cfg.desktopApps.enable (
with pkgs;
[
thunderbird
xfce.thunar
]
++ lib.optionals pkgs.stdenv.targetPlatform.isx86_64 [
bitwarden-desktop
sbctl
]
++ lib.optionals pkgs.stdenv.targetPlatform.isAarch64 [ ]
)
);
};
}

View file

@ -0,0 +1,93 @@
{
pkgs,
inputs,
config,
lib,
...
}:
let
cfg = config.liminalOS.programs;
in
{
imports = [
./bulk-programs.nix
];
options.liminalOS.programs = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether to set up many default desktop programs.
'';
};
terminal.enable = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
description = ''
Whether to set up kitty terminal.
'';
};
zen.enable = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
description = ''
Whether to install Zen Browser and set it as the default browser.
'';
};
};
config = lib.mkIf cfg.enable {
programs.kitty = lib.mkIf cfg.terminal.enable {
enable = true;
font.name = "CaskaydiaCove Nerd Font";
shellIntegration.enableFishIntegration = true;
shellIntegration.enableBashIntegration = true;
settings = {
font_size = 11;
window_padding_width = "8 8";
confirm_os_window_close = -1;
enable_audio_bell = "no";
background_opacity = pkgs.lib.mkForce "0.8";
allow_remote_control = "yes";
listen_on = "unix:/tmp/kitty";
scrollback_pager = ''nvim --noplugin -c "set signcolumn=no showtabline=0" -c "silent write! /tmp/kitty_scrollback_buffer | te cat /tmp/kitty_scrollback_buffer - "'';
cursor = pkgs.lib.mkForce "#c0caf5";
cursor_text_color = pkgs.lib.mkForce "#1a1b26";
cursor_trail = 3;
};
keybindings = {
"kitty_mod+h" = "show_scrollback";
};
};
programs.spotify-player.enable = true;
programs.neovide = {
enable = false;
settings = {
font = {
normal = [ "CaskaydiaCove Nerd Font" ];
size = if config.liminalOS.formFactor == "laptop" then 11 else 13;
};
};
};
xdg.mimeApps = lib.mkIf cfg.zen.enable {
enable = true;
defaultApplications = {
"text/html" = [ "zen.desktop" ];
"x-scheme-handler/http" = [ "zen.desktop" ];
"x-scheme-handler/https" = [ "zen.desktop" ];
"x-scheme-handler/about" = [ "zen.desktop" ];
"x-scheme-handler/unknown" = [ "zen.desktop" ];
};
};
home.packages = lib.mkIf cfg.zen.enable [
pkgs.zen-browser
];
home.sessionVariables.DEFAULT_BROWSER = lib.mkIf cfg.zen.enable "${pkgs.zen-browser}/bin/zen";
};
}

View file

@ -0,0 +1,23 @@
{
spicepkgs,
config,
osConfig,
lib,
...
}:
{
config = lib.mkIf (config.liminalOS.programs.enable && osConfig.liminalOS.config.allowUnfree) {
programs.spicetify = {
enable = true;
# theme = spicepkgs.themes.dribbblish;
# colorScheme = "rosepine";
enabledExtensions = with spicepkgs.extensions; [
lastfm
fullAppDisplayMod
];
enabledCustomApps = with spicepkgs.apps; [
lyricsPlus
];
};
};
}

View file

@ -0,0 +1,14 @@
{ pkgs, ... }:
{
imports = [ ./stylix.nix ];
# gtk = {
# enable = true;
# cursorTheme = {
# name = "Bibata-Modern-Ice";
# size = 26;
# };
# iconTheme = {
# name = "Papirus-Dark";
# };
# };
}

View file

@ -0,0 +1,13 @@
{ osConfig, lib, ... }:
{
config.stylix.targets = lib.mkIf osConfig.liminalOS.theming.enable {
waybar.enable = false;
kitty.variant256Colors = true;
neovim.enable = false;
kde.enable = true;
gnome.enable = true;
swaync.enable = false;
hyprlock.enable = false;
hyprland.enable = false;
};
}

View file

@ -0,0 +1,35 @@
{
config,
lib,
osConfig,
...
}:
let
cfg = config.liminalOS.utils.easyeffects;
in
{
options.liminalOS.utils.easyeffects = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether to enable EasyEffects.
'';
};
};
config = lib.mkIf cfg.enable {
services.easyeffects.enable = true;
home.file = lib.mkIf (osConfig.liminalOS.flakeLocation != null) {
".config/easyeffects/output" = {
source = config.lib.file.mkOutOfStoreSymlink "${osConfig.liminalOS.flakeLocation}/hm/modules/linux/var/easyeffects/output";
recursive = true;
};
".config/easyeffects/input" = {
source = config.lib.file.mkOutOfStoreSymlink "${osConfig.liminalOS.flakeLocation}/hm/modules/linux/var/easyeffects/input";
recursive = true;
};
};
};
}

View file

@ -0,0 +1,75 @@
{
"input": {
"blocklist": [],
"compressor#0": {
"attack": 20.0,
"boost-amount": 6.0,
"boost-threshold": -72.0,
"bypass": true,
"dry": -100.0,
"hpf-frequency": 10.0,
"hpf-mode": "off",
"input-gain": 0.0,
"knee": -6.0,
"lpf-frequency": 20000.0,
"lpf-mode": "off",
"makeup": 0.0,
"mode": "Downward",
"output-gain": 0.0,
"ratio": 4.0,
"release": 100.0,
"release-threshold": -100.0,
"sidechain": {
"lookahead": 0.0,
"mode": "RMS",
"preamp": 0.0,
"reactivity": 10.0,
"source": "Middle",
"stereo-split-source": "Left/Right",
"type": "Feed-forward"
},
"stereo-split": false,
"threshold": -12.0,
"wet": 0.0
},
"limiter#0": {
"alr": false,
"alr-attack": 5.0,
"alr-knee": 0.0,
"alr-release": 50.0,
"attack": 5.0,
"bypass": true,
"dithering": "None",
"external-sidechain": false,
"gain-boost": true,
"input-gain": 0.0,
"lookahead": 5.0,
"mode": "Herm Thin",
"output-gain": 0.0,
"oversampling": "None",
"release": 5.0,
"sidechain-preamp": 0.0,
"stereo-link": 100.0,
"threshold": 0.0
},
"plugins_order": [
"limiter#0",
"compressor#0",
"reverb#0"
],
"reverb#0": {
"amount": -12.0,
"bass-cut": 300.0,
"bypass": true,
"decay-time": 1.5,
"diffusion": 0.5,
"dry": 0.0,
"hf-damp": 5000.0,
"input-gain": 0.0,
"output-gain": 0.0,
"predelay": 0.0,
"room-size": "Large",
"treble-cut": 5000.0
}
}
}

View file

@ -0,0 +1,75 @@
{
"input": {
"blocklist": [],
"compressor#0": {
"attack": 20.0,
"boost-amount": 6.0,
"boost-threshold": -72.0,
"bypass": false,
"dry": -100.0,
"hpf-frequency": 10.0,
"hpf-mode": "off",
"input-gain": 0.0,
"knee": -6.0,
"lpf-frequency": 20000.0,
"lpf-mode": "off",
"makeup": 0.0,
"mode": "Downward",
"output-gain": -2.1,
"ratio": 4.0,
"release": 100.0,
"release-threshold": -100.0,
"sidechain": {
"lookahead": 0.0,
"mode": "RMS",
"preamp": 0.0,
"reactivity": 10.0,
"source": "Middle",
"stereo-split-source": "Left/Right",
"type": "Feed-forward"
},
"stereo-split": false,
"threshold": -12.0,
"wet": 0.0
},
"limiter#0": {
"alr": false,
"alr-attack": 5.0,
"alr-knee": 0.0,
"alr-release": 50.0,
"attack": 5.0,
"bypass": false,
"dithering": "None",
"external-sidechain": false,
"gain-boost": true,
"input-gain": 0.0,
"lookahead": 5.0,
"mode": "Herm Thin",
"output-gain": 0.0,
"oversampling": "None",
"release": 5.0,
"sidechain-preamp": 0.0,
"stereo-link": 100.0,
"threshold": 0.0
},
"plugins_order": [
"limiter#0",
"speex#0",
"compressor#0"
],
"speex#0": {
"bypass": false,
"enable-agc": true,
"enable-denoise": true,
"enable-dereverb": false,
"input-gain": 0.0,
"noise-suppression": -70,
"output-gain": 0.0,
"vad": {
"enable": true,
"probability-continue": 90,
"probability-start": 95
}
}
}
}

View file

@ -0,0 +1,243 @@
{
"output": {
"blocklist": [],
"equalizer#0": {
"balance": 0.0,
"bypass": false,
"input-gain": -3.68,
"left": {
"band0": {
"frequency": 105.0,
"gain": 0.6000000238418579,
"mode": "APO (DR)",
"mute": false,
"q": 0.6666666865348816,
"slope": "x1",
"solo": false,
"type": "Lo-shelf",
"width": 4.0
},
"band1": {
"frequency": 27.100000381469727,
"gain": -0.30000001192092896,
"mode": "APO (DR)",
"mute": false,
"q": 2.7300000190734863,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band2": {
"frequency": 79.0,
"gain": 1.7999999523162842,
"mode": "APO (DR)",
"mute": false,
"q": 1.2300000190734863,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band3": {
"frequency": 474.8999938964844,
"gain": -2.5,
"mode": "APO (DR)",
"mute": false,
"q": 0.5400000214576721,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band4": {
"frequency": 1164.199951171875,
"gain": 2.0,
"mode": "APO (DR)",
"mute": false,
"q": 3.119999885559082,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band5": {
"frequency": 2344.60009765625,
"gain": 2.0,
"mode": "APO (DR)",
"mute": false,
"q": 3.0899999141693115,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band6": {
"frequency": 5148.0,
"gain": 3.9000000953674316,
"mode": "APO (DR)",
"mute": false,
"q": 1.6100000143051147,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band7": {
"frequency": 6457.60009765625,
"gain": -5.0,
"mode": "APO (DR)",
"mute": false,
"q": 6.0,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band8": {
"frequency": 9619.900390625,
"gain": 3.799999952316284,
"mode": "APO (DR)",
"mute": false,
"q": 2.309999942779541,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band9": {
"frequency": 10000.0,
"gain": -2.299999952316284,
"mode": "APO (DR)",
"mute": false,
"q": 0.6666666865348816,
"slope": "x1",
"solo": false,
"type": "Hi-shelf",
"width": 4.0
}
},
"mode": "IIR",
"num-bands": 10,
"output-gain": 0.0,
"pitch-left": 0.0,
"pitch-right": 0.0,
"right": {
"band0": {
"frequency": 105.0,
"gain": 0.6000000238418579,
"mode": "APO (DR)",
"mute": false,
"q": 0.6666666865348816,
"slope": "x1",
"solo": false,
"type": "Lo-shelf",
"width": 4.0
},
"band1": {
"frequency": 27.100000381469727,
"gain": -0.30000001192092896,
"mode": "APO (DR)",
"mute": false,
"q": 2.7300000190734863,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band2": {
"frequency": 79.0,
"gain": 1.7999999523162842,
"mode": "APO (DR)",
"mute": false,
"q": 1.2300000190734863,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band3": {
"frequency": 474.8999938964844,
"gain": -2.5,
"mode": "APO (DR)",
"mute": false,
"q": 0.5400000214576721,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band4": {
"frequency": 1164.199951171875,
"gain": 2.0,
"mode": "APO (DR)",
"mute": false,
"q": 3.119999885559082,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band5": {
"frequency": 2344.60009765625,
"gain": 2.0,
"mode": "APO (DR)",
"mute": false,
"q": 3.0899999141693115,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band6": {
"frequency": 5148.0,
"gain": 3.9000000953674316,
"mode": "APO (DR)",
"mute": false,
"q": 1.6100000143051147,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band7": {
"frequency": 6457.60009765625,
"gain": -5.0,
"mode": "APO (DR)",
"mute": false,
"q": 6.0,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band8": {
"frequency": 9619.900390625,
"gain": 3.799999952316284,
"mode": "APO (DR)",
"mute": false,
"q": 2.309999942779541,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band9": {
"frequency": 10000.0,
"gain": -2.299999952316284,
"mode": "APO (DR)",
"mute": false,
"q": 0.6666666865348816,
"slope": "x1",
"solo": false,
"type": "Hi-shelf",
"width": 4.0
}
},
"split-channels": false
},
"plugins_order": [
"equalizer#0"
]
}
}

View file

@ -0,0 +1,243 @@
{
"output": {
"blocklist": [],
"equalizer#0": {
"balance": 0.0,
"bypass": false,
"input-gain": -3.34,
"left": {
"band0": {
"frequency": 105.0,
"gain": 0.699999988079071,
"mode": "APO (DR)",
"mute": false,
"q": 0.6666666865348816,
"slope": "x1",
"solo": false,
"type": "Lo-shelf",
"width": 4.0
},
"band1": {
"frequency": 26.5,
"gain": -0.4000000059604645,
"mode": "APO (DR)",
"mute": false,
"q": 2.380000114440918,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band2": {
"frequency": 79.19999694824219,
"gain": 1.600000023841858,
"mode": "APO (DR)",
"mute": false,
"q": 1.2999999523162842,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band3": {
"frequency": 468.0,
"gain": -2.5,
"mode": "APO (DR)",
"mute": false,
"q": 0.5400000214576721,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band4": {
"frequency": 1152.699951171875,
"gain": 1.899999976158142,
"mode": "APO (DR)",
"mute": false,
"q": 2.890000104904175,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band5": {
"frequency": 2310.800048828125,
"gain": 1.7999999523162842,
"mode": "APO (DR)",
"mute": false,
"q": 2.569999933242798,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band6": {
"frequency": 5148.7001953125,
"gain": 3.5,
"mode": "APO (DR)",
"mute": false,
"q": 1.4700000286102295,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band7": {
"frequency": 6472.39990234375,
"gain": -4.599999904632568,
"mode": "APO (DR)",
"mute": false,
"q": 6.0,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band8": {
"frequency": 9526.5,
"gain": 3.700000047683716,
"mode": "APO (DR)",
"mute": false,
"q": 2.25,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band9": {
"frequency": 10000.0,
"gain": -2.299999952316284,
"mode": "APO (DR)",
"mute": false,
"q": 0.6666666865348816,
"slope": "x1",
"solo": false,
"type": "Hi-shelf",
"width": 4.0
}
},
"mode": "IIR",
"num-bands": 10,
"output-gain": 0.0,
"pitch-left": 0.0,
"pitch-right": 0.0,
"right": {
"band0": {
"frequency": 105.0,
"gain": 0.699999988079071,
"mode": "APO (DR)",
"mute": false,
"q": 0.6666666865348816,
"slope": "x1",
"solo": false,
"type": "Lo-shelf",
"width": 4.0
},
"band1": {
"frequency": 26.5,
"gain": -0.4000000059604645,
"mode": "APO (DR)",
"mute": false,
"q": 2.380000114440918,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band2": {
"frequency": 79.19999694824219,
"gain": 1.600000023841858,
"mode": "APO (DR)",
"mute": false,
"q": 1.2999999523162842,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band3": {
"frequency": 468.0,
"gain": -2.5,
"mode": "APO (DR)",
"mute": false,
"q": 0.5400000214576721,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band4": {
"frequency": 1152.699951171875,
"gain": 1.899999976158142,
"mode": "APO (DR)",
"mute": false,
"q": 2.890000104904175,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band5": {
"frequency": 2310.800048828125,
"gain": 1.7999999523162842,
"mode": "APO (DR)",
"mute": false,
"q": 2.569999933242798,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band6": {
"frequency": 5148.7001953125,
"gain": 3.5,
"mode": "APO (DR)",
"mute": false,
"q": 1.4700000286102295,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band7": {
"frequency": 6472.39990234375,
"gain": -4.599999904632568,
"mode": "APO (DR)",
"mute": false,
"q": 6.0,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band8": {
"frequency": 9526.5,
"gain": 3.700000047683716,
"mode": "APO (DR)",
"mute": false,
"q": 2.25,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band9": {
"frequency": 10000.0,
"gain": -2.299999952316284,
"mode": "APO (DR)",
"mute": false,
"q": 0.6666666865348816,
"slope": "x1",
"solo": false,
"type": "Hi-shelf",
"width": 4.0
}
},
"split-channels": false
},
"plugins_order": [
"equalizer#0"
]
}
}

View file

@ -0,0 +1,243 @@
{
"output": {
"blocklist": [],
"equalizer#0": {
"balance": 0.0,
"bypass": false,
"input-gain": -8.61,
"left": {
"band0": {
"frequency": 105.0,
"gain": -0.6000000238418579,
"mode": "APO (DR)",
"mute": false,
"q": 0.699999988079071,
"slope": "x1",
"solo": false,
"type": "Lo-shelf",
"width": 4.0
},
"band1": {
"frequency": 50.0,
"gain": 3.9000000953674316,
"mode": "APO (DR)",
"mute": false,
"q": 2.0399999618530273,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band2": {
"frequency": 135.6999969482422,
"gain": -1.5,
"mode": "APO (DR)",
"mute": false,
"q": 1.149999976158142,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band3": {
"frequency": 361.3999938964844,
"gain": 3.0999999046325684,
"mode": "APO (DR)",
"mute": false,
"q": 1.159999966621399,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band4": {
"frequency": 1135.300048828125,
"gain": -4.599999904632568,
"mode": "APO (DR)",
"mute": false,
"q": 1.2200000286102295,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band5": {
"frequency": 2703.699951171875,
"gain": -3.799999952316284,
"mode": "APO (DR)",
"mute": false,
"q": 2.799999952316284,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band6": {
"frequency": 3766.800048828125,
"gain": 9.399999618530273,
"mode": "APO (DR)",
"mute": false,
"q": 1.8300000429153442,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band7": {
"frequency": 5260.39990234375,
"gain": 5.0,
"mode": "APO (DR)",
"mute": false,
"q": 3.609999895095825,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band8": {
"frequency": 8775.2998046875,
"gain": -7.400000095367432,
"mode": "APO (DR)",
"mute": false,
"q": 1.75,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band9": {
"frequency": 10000.0,
"gain": -2.299999952316284,
"mode": "APO (DR)",
"mute": false,
"q": 0.699999988079071,
"slope": "x1",
"solo": false,
"type": "Hi-shelf",
"width": 4.0
}
},
"mode": "IIR",
"num-bands": 10,
"output-gain": 3.9,
"pitch-left": 0.0,
"pitch-right": 0.0,
"right": {
"band0": {
"frequency": 105.0,
"gain": -0.6000000238418579,
"mode": "APO (DR)",
"mute": false,
"q": 0.699999988079071,
"slope": "x1",
"solo": false,
"type": "Lo-shelf",
"width": 4.0
},
"band1": {
"frequency": 50.0,
"gain": 3.9000000953674316,
"mode": "APO (DR)",
"mute": false,
"q": 2.0399999618530273,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band2": {
"frequency": 135.6999969482422,
"gain": -1.5,
"mode": "APO (DR)",
"mute": false,
"q": 1.149999976158142,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band3": {
"frequency": 361.3999938964844,
"gain": 3.0999999046325684,
"mode": "APO (DR)",
"mute": false,
"q": 1.159999966621399,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band4": {
"frequency": 1135.300048828125,
"gain": -4.599999904632568,
"mode": "APO (DR)",
"mute": false,
"q": 1.2200000286102295,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band5": {
"frequency": 2703.699951171875,
"gain": -3.799999952316284,
"mode": "APO (DR)",
"mute": false,
"q": 2.799999952316284,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band6": {
"frequency": 3766.800048828125,
"gain": 9.399999618530273,
"mode": "APO (DR)",
"mute": false,
"q": 1.8300000429153442,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band7": {
"frequency": 5260.39990234375,
"gain": 5.0,
"mode": "APO (DR)",
"mute": false,
"q": 3.609999895095825,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band8": {
"frequency": 8775.2998046875,
"gain": -7.400000095367432,
"mode": "APO (DR)",
"mute": false,
"q": 1.75,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band9": {
"frequency": 10000.0,
"gain": -2.299999952316284,
"mode": "APO (DR)",
"mute": false,
"q": 0.699999988079071,
"slope": "x1",
"solo": false,
"type": "Hi-shelf",
"width": 4.0
}
},
"split-channels": false
},
"plugins_order": [
"equalizer#0"
]
}
}

View file

@ -0,0 +1,243 @@
{
"output": {
"blocklist": [],
"equalizer#0": {
"balance": 0.0,
"bypass": false,
"input-gain": -4.74,
"left": {
"band0": {
"frequency": 105.0,
"gain": 3.0,
"mode": "APO (DR)",
"mute": false,
"q": 0.6666666865348816,
"slope": "x1",
"solo": false,
"type": "Lo-shelf",
"width": 4.0
},
"band1": {
"frequency": 53.5,
"gain": -6.800000190734863,
"mode": "APO (DR)",
"mute": false,
"q": 0.699999988079071,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band2": {
"frequency": 141.89999389648438,
"gain": -2.4000000953674316,
"mode": "APO (DR)",
"mute": false,
"q": 2.7699999809265137,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band3": {
"frequency": 199.89999389648438,
"gain": 6.0,
"mode": "APO (DR)",
"mute": false,
"q": 2.5,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band4": {
"frequency": 943.5,
"gain": -1.399999976158142,
"mode": "APO (DR)",
"mute": false,
"q": 3.5,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band5": {
"frequency": 2352.89990234375,
"gain": -1.5,
"mode": "APO (DR)",
"mute": false,
"q": 3.440000057220459,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band6": {
"frequency": 3523.5,
"gain": 4.800000190734863,
"mode": "APO (DR)",
"mute": false,
"q": 3.859999895095825,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band7": {
"frequency": 5082.7001953125,
"gain": -3.5,
"mode": "APO (DR)",
"mute": false,
"q": 4.53000020980835,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band8": {
"frequency": 6828.10009765625,
"gain": -3.9000000953674316,
"mode": "APO (DR)",
"mute": false,
"q": 3.2799999713897705,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band9": {
"frequency": 10000.0,
"gain": -4.599999904632568,
"mode": "APO (DR)",
"mute": false,
"q": 0.6666666865348816,
"slope": "x1",
"solo": false,
"type": "Hi-shelf",
"width": 4.0
}
},
"mode": "IIR",
"num-bands": 10,
"output-gain": 3.9,
"pitch-left": 0.0,
"pitch-right": 0.0,
"right": {
"band0": {
"frequency": 105.0,
"gain": 3.0,
"mode": "APO (DR)",
"mute": false,
"q": 0.6666666865348816,
"slope": "x1",
"solo": false,
"type": "Lo-shelf",
"width": 4.0
},
"band1": {
"frequency": 53.5,
"gain": -6.800000190734863,
"mode": "APO (DR)",
"mute": false,
"q": 0.699999988079071,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band2": {
"frequency": 141.89999389648438,
"gain": -2.4000000953674316,
"mode": "APO (DR)",
"mute": false,
"q": 2.7699999809265137,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band3": {
"frequency": 199.89999389648438,
"gain": 6.0,
"mode": "APO (DR)",
"mute": false,
"q": 2.5,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band4": {
"frequency": 943.5,
"gain": -1.399999976158142,
"mode": "APO (DR)",
"mute": false,
"q": 3.5,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band5": {
"frequency": 2352.89990234375,
"gain": -1.5,
"mode": "APO (DR)",
"mute": false,
"q": 3.440000057220459,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band6": {
"frequency": 3523.5,
"gain": 4.800000190734863,
"mode": "APO (DR)",
"mute": false,
"q": 3.859999895095825,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band7": {
"frequency": 5082.7001953125,
"gain": -3.5,
"mode": "APO (DR)",
"mute": false,
"q": 4.53000020980835,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band8": {
"frequency": 6828.10009765625,
"gain": -3.9000000953674316,
"mode": "APO (DR)",
"mute": false,
"q": 3.2799999713897705,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band9": {
"frequency": 10000.0,
"gain": -4.599999904632568,
"mode": "APO (DR)",
"mute": false,
"q": 0.6666666865348816,
"slope": "x1",
"solo": false,
"type": "Hi-shelf",
"width": 4.0
}
},
"split-channels": false
},
"plugins_order": [
"equalizer#0"
]
}
}

View file

@ -0,0 +1,243 @@
{
"output": {
"blocklist": [],
"equalizer#0": {
"balance": 0.0,
"bypass": true,
"input-gain": -8.61,
"left": {
"band0": {
"frequency": 105.0,
"gain": -0.6000000238418579,
"mode": "APO (DR)",
"mute": false,
"q": 0.699999988079071,
"slope": "x1",
"solo": false,
"type": "Lo-shelf",
"width": 4.0
},
"band1": {
"frequency": 50.0,
"gain": 3.9000000953674316,
"mode": "APO (DR)",
"mute": false,
"q": 2.0399999618530273,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band2": {
"frequency": 135.6999969482422,
"gain": -1.5,
"mode": "APO (DR)",
"mute": false,
"q": 1.149999976158142,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band3": {
"frequency": 361.3999938964844,
"gain": 3.0999999046325684,
"mode": "APO (DR)",
"mute": false,
"q": 1.159999966621399,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band4": {
"frequency": 1135.300048828125,
"gain": -4.599999904632568,
"mode": "APO (DR)",
"mute": false,
"q": 1.2200000286102295,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band5": {
"frequency": 2703.699951171875,
"gain": -3.799999952316284,
"mode": "APO (DR)",
"mute": false,
"q": 2.799999952316284,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band6": {
"frequency": 3766.800048828125,
"gain": 9.399999618530273,
"mode": "APO (DR)",
"mute": false,
"q": 1.8300000429153442,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band7": {
"frequency": 5260.39990234375,
"gain": 5.0,
"mode": "APO (DR)",
"mute": false,
"q": 3.609999895095825,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band8": {
"frequency": 8775.2998046875,
"gain": -7.400000095367432,
"mode": "APO (DR)",
"mute": false,
"q": 1.75,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band9": {
"frequency": 10000.0,
"gain": -2.299999952316284,
"mode": "APO (DR)",
"mute": false,
"q": 0.699999988079071,
"slope": "x1",
"solo": false,
"type": "Hi-shelf",
"width": 4.0
}
},
"mode": "IIR",
"num-bands": 10,
"output-gain": 3.9,
"pitch-left": 0.0,
"pitch-right": 0.0,
"right": {
"band0": {
"frequency": 105.0,
"gain": -0.6000000238418579,
"mode": "APO (DR)",
"mute": false,
"q": 0.699999988079071,
"slope": "x1",
"solo": false,
"type": "Lo-shelf",
"width": 4.0
},
"band1": {
"frequency": 50.0,
"gain": 3.9000000953674316,
"mode": "APO (DR)",
"mute": false,
"q": 2.0399999618530273,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band2": {
"frequency": 135.6999969482422,
"gain": -1.5,
"mode": "APO (DR)",
"mute": false,
"q": 1.149999976158142,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band3": {
"frequency": 361.3999938964844,
"gain": 3.0999999046325684,
"mode": "APO (DR)",
"mute": false,
"q": 1.159999966621399,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band4": {
"frequency": 1135.300048828125,
"gain": -4.599999904632568,
"mode": "APO (DR)",
"mute": false,
"q": 1.2200000286102295,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band5": {
"frequency": 2703.699951171875,
"gain": -3.799999952316284,
"mode": "APO (DR)",
"mute": false,
"q": 2.799999952316284,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band6": {
"frequency": 3766.800048828125,
"gain": 9.399999618530273,
"mode": "APO (DR)",
"mute": false,
"q": 1.8300000429153442,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band7": {
"frequency": 5260.39990234375,
"gain": 5.0,
"mode": "APO (DR)",
"mute": false,
"q": 3.609999895095825,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band8": {
"frequency": 8775.2998046875,
"gain": -7.400000095367432,
"mode": "APO (DR)",
"mute": false,
"q": 1.75,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band9": {
"frequency": 10000.0,
"gain": -2.299999952316284,
"mode": "APO (DR)",
"mute": false,
"q": 0.699999988079071,
"slope": "x1",
"solo": false,
"type": "Hi-shelf",
"width": 4.0
}
},
"split-channels": false
},
"plugins_order": [
"equalizer#0"
]
}
}

View file

@ -0,0 +1,611 @@
{
"autoUpdate": true,
"autoUpdateNotification": true,
"useQuickCss": true,
"themeLinks": [],
"enabledThemes": ["stylix.theme.css"],
"enableReactDevtools": false,
"frameless": false,
"transparent": false,
"winCtrlQ": false,
"disableMinSize": false,
"winNativeTitleBar": false,
"plugins": {
"ChatInputButtonAPI": {
"enabled": false
},
"CommandsAPI": {
"enabled": true
},
"MemberListDecoratorsAPI": {
"enabled": true
},
"MessageAccessoriesAPI": {
"enabled": true
},
"MessageDecorationsAPI": {
"enabled": true
},
"MessageEventsAPI": {
"enabled": true
},
"MessagePopoverAPI": {
"enabled": false
},
"MessageUpdaterAPI": {
"enabled": false
},
"ServerListAPI": {
"enabled": true
},
"UserSettingsAPI": {
"enabled": true
},
"AlwaysAnimate": {
"enabled": false
},
"AlwaysTrust": {
"enabled": true,
"domain": true,
"file": true
},
"AnonymiseFileNames": {
"enabled": true,
"anonymiseByDefault": true,
"method": 0,
"randomisedLength": 7
},
"AppleMusicRichPresence": {
"enabled": false
},
"WebRichPresence (arRPC)": {
"enabled": false
},
"AutomodContext": {
"enabled": false
},
"BANger": {
"enabled": false
},
"BetterFolders": {
"enabled": true,
"sidebar": true,
"showFolderIcon": 1,
"keepIcons": false,
"closeAllHomeButton": false,
"closeAllFolders": false,
"forceOpen": false,
"sidebarAnim": true
},
"BetterGifAltText": {
"enabled": false
},
"BetterGifPicker": {
"enabled": false
},
"BetterNotesBox": {
"enabled": false
},
"BetterRoleContext": {
"enabled": false
},
"BetterRoleDot": {
"enabled": true,
"bothStyles": false,
"copyRoleColorInProfilePopout": false
},
"BetterSessions": {
"enabled": true,
"backgroundCheck": false
},
"BetterSettings": {
"enabled": false,
"disableFade": true,
"eagerLoad": true
},
"BetterUploadButton": {
"enabled": false
},
"BiggerStreamPreview": {
"enabled": false
},
"BlurNSFW": {
"enabled": false
},
"CallTimer": {
"enabled": true
},
"ClearURLs": {
"enabled": true
},
"ClientTheme": {
"enabled": false
},
"ColorSighted": {
"enabled": false
},
"ConsoleJanitor": {
"enabled": false
},
"ConsoleShortcuts": {
"enabled": false
},
"CopyEmojiMarkdown": {
"enabled": false
},
"CopyUserURLs": {
"enabled": true
},
"CrashHandler": {
"enabled": true
},
"CtrlEnterSend": {
"enabled": false
},
"CustomRPC": {
"enabled": false
},
"CustomIdle": {
"enabled": false
},
"Dearrow": {
"enabled": false
},
"Decor": {
"enabled": false
},
"DisableCallIdle": {
"enabled": false
},
"DontRoundMyTimestamps": {
"enabled": false
},
"EmoteCloner": {
"enabled": false
},
"Experiments": {
"enabled": false
},
"F8Break": {
"enabled": false
},
"FakeNitro": {
"enabled": false
},
"FakeProfileThemes": {
"enabled": false
},
"FavoriteEmojiFirst": {
"enabled": false
},
"FavoriteGifSearch": {
"enabled": false
},
"FixCodeblockGap": {
"enabled": false
},
"FixSpotifyEmbeds": {
"enabled": false
},
"FixYoutubeEmbeds": {
"enabled": false
},
"ForceOwnerCrown": {
"enabled": false
},
"FriendInvites": {
"enabled": false
},
"FriendsSince": {
"enabled": false
},
"GameActivityToggle": {
"enabled": false
},
"GifPaste": {
"enabled": false
},
"GreetStickerPicker": {
"enabled": false
},
"HideAttachments": {
"enabled": false
},
"iLoveSpam": {
"enabled": false
},
"IgnoreActivities": {
"enabled": false
},
"ImageLink": {
"enabled": false
},
"ImageZoom": {
"enabled": false
},
"ImplicitRelationships": {
"enabled": false
},
"InvisibleChat": {
"enabled": false
},
"KeepCurrentChannel": {
"enabled": false
},
"LastFMRichPresence": {
"enabled": false
},
"LoadingQuotes": {
"enabled": false
},
"MaskedLinkPaste": {
"enabled": false
},
"MemberCount": {
"enabled": false
},
"MessageClickActions": {
"enabled": false
},
"MessageLatency": {
"enabled": false
},
"MessageLinkEmbeds": {
"enabled": false
},
"MessageLogger": {
"enabled": false
},
"MessageTags": {
"enabled": false
},
"MoreCommands": {
"enabled": false
},
"MoreKaomoji": {
"enabled": false
},
"MoreUserTags": {
"enabled": false
},
"Moyai": {
"enabled": false
},
"MutualGroupDMs": {
"enabled": false
},
"NewGuildSettings": {
"enabled": false
},
"NoBlockedMessages": {
"enabled": false
},
"NoDefaultHangStatus": {
"enabled": false
},
"NoDevtoolsWarning": {
"enabled": false
},
"NoF1": {
"enabled": false
},
"NoMosaic": {
"enabled": false
},
"NoOnboardingDelay": {
"enabled": false
},
"NoPendingCount": {
"enabled": false
},
"NoProfileThemes": {
"enabled": false
},
"NoReplyMention": {
"enabled": false
},
"NoScreensharePreview": {
"enabled": false
},
"NoServerEmojis": {
"enabled": false
},
"NoTypingAnimation": {
"enabled": false
},
"NoUnblockToJump": {
"enabled": false
},
"NormalizeMessageLinks": {
"enabled": false
},
"NotificationVolume": {
"enabled": false
},
"NSFWGateBypass": {
"enabled": false
},
"OnePingPerDM": {
"enabled": false
},
"oneko": {
"enabled": false
},
"OpenInApp": {
"enabled": false
},
"OverrideForumDefaults": {
"enabled": false
},
"PartyMode": {
"enabled": false
},
"PauseInvitesForever": {
"enabled": false
},
"PermissionFreeWill": {
"enabled": false
},
"PermissionsViewer": {
"enabled": false
},
"petpet": {
"enabled": false
},
"PictureInPicture": {
"enabled": false
},
"PinDMs": {
"enabled": false
},
"PlainFolderIcon": {
"enabled": false
},
"PlatformIndicators": {
"enabled": true
},
"PreviewMessage": {
"enabled": false
},
"QuickMention": {
"enabled": false
},
"QuickReply": {
"enabled": false
},
"ReactErrorDecoder": {
"enabled": false
},
"ReadAllNotificationsButton": {
"enabled": true
},
"RelationshipNotifier": {
"enabled": false
},
"ReplaceGoogleSearch": {
"enabled": false
},
"ReplyTimestamp": {
"enabled": false
},
"RevealAllSpoilers": {
"enabled": false
},
"ReverseImageSearch": {
"enabled": false
},
"ReviewDB": {
"enabled": false
},
"RoleColorEverywhere": {
"enabled": false
},
"SecretRingToneEnabler": {
"enabled": false
},
"Summaries": {
"enabled": false
},
"SendTimestamps": {
"enabled": false
},
"ServerInfo": {
"enabled": false
},
"ServerListIndicators": {
"enabled": false
},
"ShikiCodeblocks": {
"enabled": false
},
"ShowAllMessageButtons": {
"enabled": false
},
"ShowConnections": {
"enabled": false
},
"ShowHiddenChannels": {
"enabled": true,
"showMode": 0,
"hideUnreads": true
},
"ShowHiddenThings": {
"enabled": true,
"showTimeouts": true,
"showInvitesPaused": true,
"showModView": true,
"disableDiscoveryFilters": true,
"disableDisallowedDiscoveryFilters": true
},
"ShowMeYourName": {
"enabled": false
},
"ShowTimeoutDuration": {
"enabled": false
},
"SilentMessageToggle": {
"enabled": false
},
"SilentTyping": {
"enabled": false
},
"SortFriendRequests": {
"enabled": false
},
"SpotifyControls": {
"enabled": true,
"hoverControls": false
},
"SpotifyCrack": {
"enabled": false
},
"SpotifyShareCommands": {
"enabled": false
},
"StartupTimings": {
"enabled": false
},
"StreamerModeOnStream": {
"enabled": false
},
"SuperReactionTweaks": {
"enabled": false
},
"TextReplace": {
"enabled": false
},
"ThemeAttributes": {
"enabled": false
},
"TimeBarAllActivities": {
"enabled": false
},
"Translate": {
"enabled": false
},
"TypingIndicator": {
"enabled": false
},
"TypingTweaks": {
"enabled": false
},
"Unindent": {
"enabled": false
},
"UnlockedAvatarZoom": {
"enabled": false
},
"UnsuppressEmbeds": {
"enabled": false
},
"UserVoiceShow": {
"enabled": false
},
"USRBG": {
"enabled": false
},
"ValidReply": {
"enabled": false
},
"ValidUser": {
"enabled": false
},
"VoiceChatDoubleClick": {
"enabled": false
},
"VcNarrator": {
"enabled": false
},
"VencordToolbox": {
"enabled": false
},
"ViewIcons": {
"enabled": false
},
"ViewRaw": {
"enabled": false
},
"VoiceDownload": {
"enabled": false
},
"VoiceMessages": {
"enabled": false
},
"WebKeybinds": {
"enabled": true
},
"WebScreenShareFixes": {
"enabled": true
},
"WhoReacted": {
"enabled": false
},
"XSOverlay": {
"enabled": false
},
"NoTrack": {
"enabled": true,
"disableAnalytics": true
},
"WebContextMenus": {
"enabled": true,
"addBack": true
},
"Settings": {
"enabled": true,
"settingsLocation": "aboveNitro"
},
"SupportHelper": {
"enabled": true
},
"YoutubeAdblock": {
"enabled": true
},
"AlwaysExpandRoles": {
"enabled": false
},
"FullSearchContext": {
"enabled": false
},
"UserMessagesPronouns": {
"enabled": false
},
"DynamicImageModalAPI": {
"enabled": false
},
"AccountPanelServerProfile": {
"enabled": false
},
"CopyFileContents": {
"enabled": false
},
"FixImagesQuality": {
"enabled": false
},
"MentionAvatars": {
"enabled": false
},
"NoMaskedUrlPaste": {
"enabled": false
},
"StickerPaste": {
"enabled": false
},
"VolumeBooster": {
"enabled": false
}
},
"notifications": {
"timeout": 5000,
"position": "bottom-right",
"useNative": "not-focused",
"logLimit": 50
},
"cloud": {
"authenticated": false,
"url": "https://api.vencord.dev/",
"settingsSync": false,
"settingsSyncVersion": 1731210778467
}
}

View file

@ -1,201 +0,0 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{
inputs,
pkgs,
config,
...
}:
{
imports = [
# Include the results of the hardware scan.
./hardware-configuration.nix
# ./apple-silicon-support
];
boot = {
loader.systemd-boot.enable = true;
loader.efi.canTouchEfiVariables = false;
plymouth = {
enable = true;
font = "${config.stylix.fonts.monospace.package}/share/fonts/truetype/NerdFonts/CaskaydiaCove/CaskaydiaCoveNerdFontMono-Regular.ttf";
};
consoleLogLevel = 3;
initrd.verbose = false;
kernelParams = [
"quiet"
"splash"
"boot.shell_on_fail"
"rd.systemd.show_status=false"
"rd.udev.log_level=3"
"udev.log_priority=3"
"apple_dcp.show_notch=1"
];
extraModprobeConfig = ''
options hid_apple iso_layout=0
'';
initrd.systemd.enable = true;
};
hardware.asahi = {
peripheralFirmwareDirectory = "${inputs.apple-firmware}/firmware";
useExperimentalGPUDriver = true;
experimentalGPUInstallMode = "overlay";
};
networking.hostName = "callisto"; # Define your hostname.
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
networking.wireless.iwd = {
enable = true;
settings.General.EnableNetworkConfiguration = true;
};
nixpkgs.overlays =
let
stablepkgs = inputs.stablepkgs.legacyPackages.${pkgs.system};
in
[
inputs.apple-silicon.overlays.apple-silicon-overlay
inputs.vesktop-bin.overlays.default
];
programs.light.enable = true;
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Enable networking
# networking.networkmanager.enable = true;
# Set your time zone.
time.timeZone = "America/Los_Angeles";
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "en_US.UTF-8";
LC_IDENTIFICATION = "en_US.UTF-8";
LC_MEASUREMENT = "en_US.UTF-8";
LC_MONETARY = "en_US.UTF-8";
LC_NAME = "en_US.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "en_US.UTF-8";
LC_TELEPHONE = "en_US.UTF-8";
LC_TIME = "en_US.UTF-8";
};
# Enable the X11 windowing system.
# You can disable this if you're only using the Wayland session.
services.xserver.enable = false;
programs.nix-ld = {
enable = true;
libraries = with pkgs; [
icu
xorg.libXtst
xorg.libXi
];
};
# Configure keymap in X11
services.xserver = {
xkb.layout = "us";
xkb.variant = "";
};
# Enable touchpad support (enabled default in most desktopManager).
# services.xserver.libinput.enable = true;
# Define a user account. Don't forget to set a password with passwd.
users.users.youwen = {
isNormalUser = true;
description = "Youwen Wu";
# Wheel is required for iwctl as non-root
extraGroups = [ "wheel" ];
};
nix.settings = {
trusted-users = [
"root"
"youwen"
];
};
services.udev.extraRules = ''
KERNEL=="macsmc-battery", SUBSYSTEM=="power_supply", ATTR{charge_control_end_threshold}="90", ATTR{charge_control_start_threshold}="85"
'';
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
wget
git
curl
];
services.keyd = {
enable = true;
keyboards = {
default = {
ids = [ "*" ];
settings = {
main = {
capslock = "esc";
leftmeta = "leftcontrol";
leftalt = "leftmeta";
leftcontrol = "leftalt";
rightmeta = "leftalt";
rightalt = "layer(rightalt)";
};
rightalt = {
h = "left";
j = "down";
k = "up";
l = "right";
};
};
};
};
};
services.tlp.enable = true;
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
};
services.blueman.enable = true;
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
# programs.mtr.enable = true;
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
programs.dconf.enable = true;
programs.hyprland.enable = true;
# programs.hyprland.package = inputs.stablepkgs.legacyPackages.${pkgs.stdenv.hostPlatform.system}.hyprland;
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "24.11"; # Did you read the comment?
programs.zsh.enable = false;
programs.fish.enable = true;
users.users.youwen.shell = pkgs.fish;
}

View file

@ -1,46 +0,0 @@
{
inputs,
system,
...
}:
{
imports =
[
./configuration.nix
../../modules/linux/audio
../../modules/linux/networking
../../modules/linux/fonts
../../modules/linux/greeter
# ../../modules/linux/spotifyd
../../modules/linux/core
../../modules/linux/desktop-portal
../../modules/linux/stylix
../../overlays
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.backupFileExtension = "backup";
home-manager.extraSpecialArgs = {
inherit inputs;
inherit system;
};
home-manager.users.youwen = {
imports =
[
../../users/youwen/common
../../users/youwen/linux/laptop
../../users/youwen/linux/packages/aarch-64
(import ../../users/youwen/common/fastfetch { })
./home-manager-extras
]
++ (with inputs; [
nix-index-database.hmModules.nix-index
]);
};
}
]
++ (with inputs; [
home-manager.nixosModules.home-manager
apple-silicon.nixosModules.apple-silicon-support
]);
}

View file

@ -1,4 +0,0 @@
{ pkgs, ... }:
{
# home.file.".config/neofetch/config.conf".source = ./neofetch-asahi.conf;
}

View file

@ -1,864 +0,0 @@
# Source: https://github.com/Chick2D/neofetch-themes/
# Made by https://github.com/HimDek/ (HimDek)
# A matching oh-my-zsh theme: https://github.com/HimDek/Acenoster-ZSH-Theme/
# Customization Wiki https://github.com/dylanaraps/neofetch/wiki/Customizing-Info
print_info() {
prin " "
info " ​​​ " title
prin " "
info "${cl2} ╭─" distro
info "${cl2} ├─" kernel
# info "${cl2} ├─" users
info "${cl2} ├─󰏗" packages
info "${cl2} ╰─" shell
echo
info "${cl6} ╭─" de
info "${cl6} ├─" term
info "${cl6} ╰─" term_font
echo
info "${cl4} ╭─" model
info "${cl4} ├─󰍛" cpu
# info "${cl4} ├─󰍹" gpu
prin "${cl4} ├─󰍹 ${cl0} Apple Neural Engine"
info "${cl4} ├─" gpu_driver
info "${cl4} ├─" resolution
info "${cl4} ├─" memory
# info "${cl4} ├─ ${cl0}" disk
# info "${cl4} ├─󰁹 ${cl0} " battery
# info "${cl4} ╰─󰄉" uptime
info "${cl4} ╰─ ${cl0}" disk
# prin " "
# prin " \n \n \n \n \n \n ${cl3} \n \n ${cl5} \n \n ${cl2} \n \n ${cl6} \n \n ${cl4} \n \n ${cl1} \n \n ${cl7} \n \n ${cl0} \n "
}
##--------- Title
# Hide/Show Fully qualified domain name.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --title_fqdn
title_fqdn="on"
##--------- Kernel
# Shorten the output of the kernel function.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --kernel_shorthand
# Supports: Everything except *BSDs (except PacBSD and PC-BSD)
#
# Example:
# on: '4.8.9-1-ARCH'
# off: 'Linux 4.8.9-1-ARCH'
kernel_shorthand="off"
##--------- Distro
# Shorten the output of the distro function
#
# Default: 'off'
# Values: 'on', 'tiny', 'off'
# Flag: --distro_shorthand
# Supports: Everything except Windows and Haiku
distro_shorthand="on"
# Show/Hide OS Architecture.
# Show 'x86_64', 'x86' and etc in 'Distro:' output.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --os_arch
#
# Example:
# on: 'Arch Linux x86_64'
# off: 'Arch Linux'
os_arch="on"
##--------- Uptime
# Shorten the output of the uptime function
#
# Default: 'on'
# Values: 'on', 'tiny', 'off'
# Flag: --uptime_shorthand
#
# Example:
# on: '2 days, 10 hours, 3 mins'
# tiny: '2d 10h 3m'
# off: '2 days, 10 hours, 3 minutes'
uptime_shorthand="on"
##--------- Memory
# Show memory pecentage in output.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --memory_percent
#
# Example:
# on: '1801MiB / 7881MiB (22%)'
# off: '1801MiB / 7881MiB'
memory_percent="on"
# Change memory output unit.
#
# Default: 'mib'
# Values: 'kib', 'mib', 'gib'
# Flag: --memory_unit
#
# Example:
# kib '1020928KiB / 7117824KiB'
# mib '1042MiB / 6951MiB'
# gib: ' 0.98GiB / 6.79GiB'
memory_unit="Gib"
##--------- Packages
# Show/Hide Package Manager names.
#
# Default: 'tiny'
# Values: 'on', 'tiny' 'off'
# Flag: --package_managers
#
# Example:
# on: '998 (pacman), 8 (flatpak), 4 (snap)'
# tiny: '908 (pacman, flatpak, snap)'
# off: '908'
package_managers="on"
##--------- Shell
# Show the path to $SHELL
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --shell_path
#
# Example:
# on: '/bin/bash'
# off: 'bash'
shell_path="off"
# Show $SHELL version
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --shell_version
#
# Example:
# on: 'bash 4.4.5'
# off: 'bash'
shell_version="on"
##--------- CPU
# CPU speed type
#
# Default: 'bios_limit'
# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'.
# Flag: --speed_type
# Supports: Linux with 'cpufreq'
# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value.
speed_type="scaling_max_freq"
# CPU speed shorthand
#
# Default: 'off'
# Values: 'on', 'off'.
# Flag: --speed_shorthand
# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz
#
# Example:
# on: 'i7-6500U (4) @ 3.1GHz'
# off: 'i7-6500U (4) @ 3.100GHz'
speed_shorthand="on"
# Enable/Disable CPU brand in output.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --cpu_brand
#
# Example:
# on: 'Intel i7-6500U'
# off: 'i7-6500U (4)'
cpu_brand="on"
# CPU Speed
# Hide/Show CPU speed.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --cpu_speed
#
# Example:
# on: 'Intel i7-6500U (4) @ 3.1GHz'
# off: 'Intel i7-6500U (4)'
cpu_speed="on"
# CPU Cores
# Display CPU cores in output
#
# Default: 'logical'
# Values: 'logical', 'physical', 'off'
# Flag: --cpu_cores
# Support: 'physical' doesn't work on BSD.
#
# Example:
# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores)
# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores)
# off: 'Intel i7-6500U @ 3.1GHz'
cpu_cores="logical"
# CPU Temperature
# Hide/Show CPU temperature.
# Note the temperature is added to the regular CPU function.
#
# Default: 'off'
# Values: 'C', 'F', 'off'
# Flag: --cpu_temp
# Supports: Linux, BSD
# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable
# coretemp kernel module. This only supports newer Intel processors.
#
# Example: sudo rm /var/lib/pacman/db.lck
# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]'
# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]'
# off: 'Intel i7-6500U (4) @ 3.1GHz'
cpu_temp="on"
##--------- GPU
# Enable/Disable GPU Brand
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gpu_brand
#
# Example:
# on: 'AMD HD 7950'
# off: 'HD 7950'
gpu_brand="on"
# Which GPU to display
#
# Default: 'all'
# Values: 'all', 'dedicated', 'integrated'
# Flag: --gpu_type
# Supports: Linux
#
# Example:
# all:
# GPU1: AMD HD 7950
# GPU2: Intel Integrated Graphics
#
# dedicated:
# GPU1: AMD HD 7950
#
# integrated:
# GPU1: Intel Integrated Graphics
gpu_type="all"
##--------- Resolution
# Display refresh rate next to each monitor
# Default: 'off'
# Values: 'on', 'off'
# Flag: --refresh_rate
# Supports: Doesn't work on Windows.
#
# Example:
# on: '1920x1080 @ 60Hz'
# off: '1920x1080'
refresh_rate="on"
##--------- Gtk Theme / Icons / Font
# Shorten output of GTK Theme / Icons / Font
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --gtk_shorthand
#
# Example:
# on: 'Numix, Adwaita'
# off: 'Numix [GTK2], Adwaita [GTK3]'
gtk_shorthand="off"
# Enable/Disable gtk2 Theme / Icons / Font
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gtk2
#
# Example:
# on: 'Numix [GTK2], Adwaita [GTK3]'
# off: 'Adwaita [GTK3]'
gtk2="off"
# Enable/Disable gtk3 Theme / Icons / Font
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gtk3
#
# Example:
# on: 'Numix [GTK2], Adwaita [GTK3]'
# off: 'Numix [GTK2]'
gtk3="off"
##--------- IP Address
# Website to ping for the public IP
#
# Default: 'http://ident.me'
# Values: 'url'
# Flag: --ip_host
public_ip_host="http://ident.me"
# Public IP timeout.
#
# Default: '2'
# Values: 'int'
# Flag: --ip_timeout
public_ip_timeout=2
# Desktop Environment
# Show Desktop Environment version
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --de_version
de_version="on"
##--------- Disk
# Which disks to display.
# The values can be any /dev/sdXX, mount point or directory.
# NOTE: By default we only show the disk info for '/'.
#
# Default: '/'
# Values: '/', '/dev/sdXX', '/path/to/drive'.
# Flag: --disk_show
#
# Example:
# disk_show=('/' '/dev/sdb1'):
# 'Disk (/): 74G / 118G (66%)'
# 'Disk (/mnt/Videos): 823G / 893G (93%)'
#
# disk_show=('/'):
# 'Disk (/): 74G / 118G (66%)'
#
disk_show=('/')
# Disk subtitle.
# What to append to the Disk subtitle.
#
# Default: 'mount'
# Values: 'mount', 'name', 'dir', 'none'
# Flag: --disk_subtitle
#
# Example:
# name: 'Disk (/dev/sda1): 74G / 118G (66%)'
# 'Disk (/dev/sdb2): 74G / 118G (66%)'
#
# mount: 'Disk (/): 74G / 118G (66%)'
# 'Disk (/mnt/Local Disk): 74G / 118G (66%)'
# 'Disk (/mnt/Videos): 74G / 118G (66%)'
#
# dir: 'Disk (/): 74G / 118G (66%)'
# 'Disk (Local Disk): 74G / 118G (66%)'
# 'Disk (Videos): 74G / 118G (66%)'
#
# none: 'Disk: 74G / 118G (66%)'
# 'Disk: 74G / 118G (66%)'
# 'Disk: 74G / 118G (66%)'
disk_subtitle="mount"
# Disk percent.
# Show/Hide disk percent.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --disk_percent
#
# Example:
# on: 'Disk (/): 74G / 118G (66%)'
# off: 'Disk (/): 74G / 118G'
disk_percent="on"
##--------- Song
# Manually specify a music player.
#
# Default: 'auto'
# Values: 'auto', 'player-name'
# Flag: --music_player
#
# Available values for 'player-name':
#
# amarok
# audacious
# banshee
# bluemindo
# clementine
# cmus
# deadbeef
# deepin-music
# dragon
# elisa
# exaile
# gnome-music
# gmusicbrowser
# gogglesmm
# guayadeque
# io.elementary.music
# iTunes
# juk
# lollypop
# mocp
# mopidy
# mpd
# muine
# netease-cloud-music
# olivia
# playerctl
# pogo
# pragha
# qmmp
# quodlibet
# rhythmbox
# sayonara
# smplayer
# spotify
# strawberry
# tauonmb
# tomahawk
# vlc
# xmms2d
# xnoise
# yarock
music_player="auto"
# Format to display song information.
#
# Default: '%artist% - %album% - %title%'
# Values: '%artist%', '%album%', '%title%'
# Flag: --song_format
#
# Example:
# default: 'Song: Jet - Get Born - Sgt Major'
song_format="%artist% - %album% - %title%"
# Print the Artist, Album and Title on separate lines
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --song_shorthand
#
# Example:
# on: 'Artist: The Fratellis'
# 'Album: Costello Music'
# 'Song: Chelsea Dagger'
#
# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger'
song_shorthand="off"
# 'mpc' arguments (specify a host, password etc).
#
# Default: ''
# Example: mpc_args=(-h HOST -P PASSWORD)
mpc_args=()
##--------- Text Colors
# Text Colors
#
# Default: 'distro'
# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
# Flag: --colors
#
# Each number represents a different part of the text in
# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info'
#
# Example:
# colors=(distro) - Text is colored based on Distro colors.
# colors=(4 6 1 8 8 6) - Text is colored in the order above.
colors=(distro)
##--------- Text Options
# Toggle bold text
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --bold
bold="on"
# Enable/Disable Underline
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --underline
underline_enabled="on"
# Underline character
#
# Default: '-'
# Values: 'string'
# Flag: --underline_char
underline_char="󰍴"
# Info Separator
# Replace the default separator with the specified string.
#
# Default: ':'
# Flag: --separator
#
# Example:
# separator="->": 'Shell-> bash'
# separator=" =": 'WM = dwm'
separator=" "
##--------- Color Blocks
# Color block range
# The range of colors to print.
#
# Default: '0', '15'
# Values: 'num'
# Flag: --block_range
#
# Example:
#
# Display colors 0-7 in the blocks. (8 colors)
# neofetch --block_range 0 7
#
# Display colors 0-15 in the blocks. (16 colors)
# neofetch --block_range 0 15
#block_range=(8 15)
block_range=(1 8)
# Colors for custom colorblocks
#colors
#bold="(tput bold)"
magenta="\033[1;35m"
green="\033[1;32m"
white="\033[1;37m"
blue="\033[1;34m"
red="\033[1;31m"
black="\033[1;40;30m"
yellow="\033[1;33m"
cyan="\033[1;36m"
reset="\033[0m"
bgyellow="\033[1;43;33m"
bgwhite="\033[1;47;37m"
cl0="${reset}"
cl1="${magenta}"
cl2="${green}"
cl3="${white}"
cl4="${blue}"
cl5="${red}"
cl6="${yellow}"
cl7="${cyan}"
cl8="${black}"
cl9="${bgyellow}"
cl10="${bgwhite}"
# Toggle color blocks
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --color_blocks
color_blocks="on"
# Color block width in spaces
#
# Default: '3'
# Values: 'num'
# Flag: --block_width
block_width=4
# Color block height in lines
#
# Default: '1'
# Values: 'num'
# Flag: --block_height
block_height=1
# Color Alignment
#
# Default: 'auto'
# Values: 'auto', 'num'
# Flag: --col_offset
#
# Number specifies how far from the left side of the terminal (in spaces) to
# begin printing the columns, in case you want to e.g. center them under your
# text.
# Example:
# col_offset="auto" - Default behavior of neofetch
# col_offset=7 - Leave 7 spaces then print the colors
col_offset="auto"
##--------- Progress Bars
# Bar characters
#
# Default: '-', '='
# Values: 'string', 'string'
# Flag: --bar_char
#
# Example:
# neofetch --bar_char 'elapsed' 'total'
# neofetch --bar_char '-' '='
bar_char_elapsed="-"
bar_char_total="="
# Toggle Bar border
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --bar_border
bar_border="on"
# Progress bar length in spaces
# Number of chars long to make the progress bars.
#
# Default: '15'
# Values: 'num'
# Flag: --bar_length
bar_length=15
# Progress bar colors
# When set to distro, uses your distro's logo colors.
#
# Default: 'distro', 'distro'
# Values: 'distro', 'num'
# Flag: --bar_colors
#
# Example:
# neofetch --bar_colors 3 4
# neofetch --bar_colors distro 5
bar_color_elapsed="distro"
bar_color_total="distro"
# Info display
# Display a bar with the info.
#
# Default: 'off'
# Values: 'bar', 'infobar', 'barinfo', 'off'
# Flags: --cpu_display
# --memory_display
# --battery_display
# --disk_display
#
# Example:
# bar: '[---=======]'
# infobar: 'info [---=======]'
# barinfo: '[---=======] info'
# off: 'info'
cpu_display="on"
memory_display="on"
battery_display="on"
disk_display="on"
##--------- Backend Settings
# Image backend.
#
# Default: 'ascii'
# Values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off',
# 'pot', 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty'
# Flag: --backend
image_backend="ascii"
# Image Source
#
# Which image or ascii file to display.
#
# Default: 'auto'
# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/'
# 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")'
# Flag: --source
#
# NOTE: 'auto' will pick the best image source for whatever image backend is used.
# In ascii mode, distro ascii art will be used and in an image mode, your
# wallpaper will be used.
image_source="auto"
##--------- Ascii Options
# Ascii distro
# Which distro's ascii art to display.
#
# Default: 'auto'
# Values: 'auto', 'distro_name'
# Flag: --ascii_distro
# NOTE: AIX, Alpine, Anarchy, Android, Antergos, antiX, "AOSC OS",
# "AOSC OS/Retro", Apricity, ArcoLinux, ArchBox, ARCHlabs,
# ArchStrike, XFerience, ArchMerge, Arch, Artix, Arya, Bedrock,
# Bitrig, BlackArch, BLAG, BlankOn, BlueLight, bonsai, BSD,
# BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS,
# Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover,
# Condres, Container_Linux, CRUX, Cucumber, Debian, Deepin,
# DesaOS, Devuan, DracOS, DarkOs, DragonFly, Drauger, Elementary,
# EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD,
# FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, Pentoo,
# gNewSense, GNOME, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra,
# Hyperbola, janus, Kali, KaOS, KDE_neon, Kibojoe, Kogaion,
# Korora, KSLinux, Kubuntu, LEDE, LFS, Linux_Lite,
# LMDE, Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva,
# Manjaro, Maui, Mer, Minix, LinuxMint, MX_Linux, Namib,
# Neptune, NetBSD, Netrunner, Nitrux, NixOS, Nurunner,
# NuTyX, OBRevenge, OpenBSD, openEuler, OpenIndiana, openmamba,
# OpenMandriva, OpenStage, OpenWrt, osmc, Oracle, OS Elbrus, PacBSD,
# Parabola, Pardus, Parrot, Parsix, TrueOS, PCLinuxOS, Peppermint,
# popos, Porteus, PostMarketOS, Proxmox, Puppy, PureOS, Qubes, Radix,
# Raspbian, Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan,
# Regata, Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific,
# Septor, SereneLinux, SharkLinux, Siduction, Slackware, SliTaz,
# SmartOS, Solus, Source_Mage, Sparky, Star, SteamOS, SunOS,
# openSUSE_Leap, openSUSE_Tumbleweed, openSUSE, SwagArch, Tails,
# Trisquel, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, Ubuntu-Studio,
# Ubuntu, Venom, Void, Obarun, windows10, Windows7, Xubuntu, Zorin,
# and IRIX have ascii logos
# NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants.
# Use '{distro name}_old' to use the old logos.
# NOTE: Ubuntu has flavor variants.
# Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME,
# Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors.
# NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu,
# CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android,
# Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola,
# Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS,
# Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian,
# postmarketOS, and Void have a smaller logo variant.
# Use '{distro name}_small' to use the small variants.
ascii_distro="auto"
# Ascii Colors
#
# Default: 'distro'
# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
# Flag: --ascii_colors
#
# Example:
# ascii_colors=(distro) - Ascii is colored based on Distro colors.
# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors.
ascii_colors=(distro)
# Bold ascii logo
# Whether or not to bold the ascii logo.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --ascii_bold
ascii_bold="on"
##--------- Image Options
# Image loop
# Setting this to on will make neofetch redraw the image constantly until
# Ctrl+C is pressed. This fixes display issues in some terminal emulators.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --loop
image_loop="off"
# Thumbnail directory
#
# Default: '~/.cache/thumbnails/neofetch'
# Values: 'dir'
thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch"
# Crop mode
#
# Default: 'normal'
# Values: 'normal', 'fit', 'fill'
# Flag: --crop_mode
#
# See this wiki page to learn about the fit and fill options.
# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F
crop_mode="normal"
# Crop offset
# Note: Only affects 'normal' crop mode.
#
# Default: 'center'
# Values: 'northwest', 'north', 'northeast', 'west', 'center'
# 'east', 'southwest', 'south', 'southeast'
# Flag: --crop_offset
crop_offset="center"
# Image size
# The image is half the terminal width by default.
#
# Default: 'auto'
# Values: 'auto', '00px', '00%', 'none'
# Flags: --image_size
# --size
image_size="auto"
# Gap between image and text
#
# Default: '3'
# Values: 'num', '-num'
# Flag: --gap
gap=2
# Image offsets
# Only works with the w3m backend.
#
# Default: '0'
# Values: 'px'
# Flags: --xoffset
# --yoffset
yoffset=0
xoffset=0
# Image background color
# Only works with the w3m backend.
#
# Default: ''
# Values: 'color', 'blue'
# Flag: --bg_color
background_color=
##--------- Misc Options
# Stdout mode
# Turn off all colors and disables image backend (ASCII/Image).
# Useful for piping into another command.
# Default: 'off'
# Values: 'on', 'off'
stdout="off"

View file

@ -1,194 +0,0 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{
config,
inputs,
pkgs,
lib,
...
}:
{
imports = [
# Include the results of the hardware scan.
./hardware-configuration.nix
];
# Bootloader.
boot.loader = {
efi.canTouchEfiVariables = true;
timeout = 15;
# Lanzaboote currently replaces the systemd-boot module.
# This setting is usually set to true in configuration.nix
# generated at installation time. So we force it to false
# for now.
systemd-boot = {
enable = false;
consoleMode = "auto";
};
};
boot = {
plymouth = {
enable = true;
font = "${config.stylix.fonts.monospace.package}/share/fonts/truetype/NerdFonts/CaskaydiaCove/CaskaydiaCoveNerdFontMono-Regular.ttf";
};
# Enable "Silent Boot"
consoleLogLevel = 3;
initrd.verbose = false;
kernelParams = [
"quiet"
"splash"
"boot.shell_on_fail"
"rd.systemd.show_status=false"
"rd.udev.log_level=3"
"udev.log_priority=3"
];
initrd.systemd.enable = true;
};
boot.lanzaboote = {
enable = true;
pkiBundle = "/etc/secureboot";
};
boot.initrd.luks.devices."luks-af320a0f-b388-43f5-b5a3-af2b47cfc716".device =
"/dev/disk/by-uuid/af320a0f-b388-43f5-b5a3-af2b47cfc716";
networking.hostName = "demeter"; # Define your hostname.
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
# select kernel
boot.kernelPackages = pkgs.linuxPackages_zen;
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Enable networking
networking.networkmanager.enable = true;
# Set your time zone.
time.timeZone = "America/Los_Angeles";
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "en_US.UTF-8";
LC_IDENTIFICATION = "en_US.UTF-8";
LC_MEASUREMENT = "en_US.UTF-8";
LC_MONETARY = "en_US.UTF-8";
LC_NAME = "en_US.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "en_US.UTF-8";
LC_TELEPHONE = "en_US.UTF-8";
LC_TIME = "en_US.UTF-8";
};
systemd.services = {
NetworkManager-wait-online.enable = false;
};
hardware.enableAllFirmware = true;
# Enable the X11 windowing system.
# You can disable this if you're only using the Wayland session.
services.xserver.enable = false;
programs.nix-ld = {
enable = true;
libraries = with pkgs; [
icu
xorg.libXtst
xorg.libXi
];
};
hardware.nvidia = {
modesetting.enable = true;
powerManagement.enable = true;
powerManagement.finegrained = false;
open = false;
nvidiaSettings = true;
};
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
};
services.blueman.enable = true;
hardware.graphics.enable = true;
hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.beta;
services.xserver.videoDrivers = [ "nvidia" ];
# services.desktopManager.plasma6.enable = true;
# Configure keymap in X11
services.xserver = {
xkb.layout = "us";
xkb.variant = "";
};
# Enable touchpad support (enabled default in most desktopManager).
# services.xserver.libinput.enable = true;
# Define a user account. Don't forget to set a password with passwd.
users.users.youwen = {
isNormalUser = true;
description = "Youwen Wu";
extraGroups = [ "networkmanager" ];
};
nix.settings = {
trusted-users = [
"root"
"youwen"
];
};
services.udev.extraRules = ''
KERNEL=="cpu_dma_latency", GROUP="realtime"
'';
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
wget
git
curl
];
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
# programs.mtr.enable = true;
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
programs.dconf.enable = true;
programs.hyprland.enable = true;
hardware.cpu.intel.updateMicrocode = true;
programs.zsh.enable = false;
programs.fish.enable = true;
users.users.youwen.shell = pkgs.fish;
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "24.05"; # Did you read the comment?
}

View file

@ -1,50 +0,0 @@
{
inputs,
...
}:
{
imports =
[
./configuration.nix
../../modules/linux/gaming
../../modules/linux/audio
../../modules/linux/networking
../../modules/linux/fonts
../../modules/linux/greeter
../../modules/linux/core
../../modules/linux/hamachi
../../modules/linux/desktop-portal
../../modules/linux/audio-prod
../../modules/linux/stylix
../../modules/linux/wine
../../modules/linux/flatpak
../../overlays
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.backupFileExtension = "backup";
home-manager.extraSpecialArgs = {
inherit inputs;
};
home-manager.users.youwen = {
imports =
[
../../users/youwen/linux/laptop
../../users/youwen/linux/packages/x86_64
../../users/youwen/linux/programs
(import ../../users/youwen/common/fastfetch { })
../../users/youwen/common
../../users/youwen/linux/spicetify
./home-manager-extras
]
++ (with inputs; [
nix-index-database.hmModules.nix-index
]);
};
}
]
++ (with inputs; [
lanzaboote.nixosModules.lanzaboote
home-manager.nixosModules.home-manager
]);
}

24
modules/default.nix Normal file
View file

@ -0,0 +1,24 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.liminalOS;
in
{
imports = [
./linux
../hm
];
options.liminalOS = {
darwin.enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable liminalOS's default modules and options for Darwin.
'';
};
};
}

View file

@ -1,11 +1,29 @@
{ pkgs, ... }:
{
imports = [
../wine
];
environment.systemPackages = with pkgs; [
reaper
yabridge
yabridgectl
];
pkgs,
lib,
config,
...
}:
let
cfg = config.liminalOS.system.audio.prod;
in
{
options.liminalOS.system.audio.prod.enable = lib.mkEnableOption "audio production";
config = lib.mkIf cfg.enable {
liminalOS = {
programs.wine.enable = true;
system.audio.enable = true;
};
environment.systemPackages = with pkgs; [
reaper
yabridge
yabridgectl
];
liminalOS.config.extraUnfreePackages = lib.mkIf config.liminalOS.config.allowUnfree [
"reaper"
];
};
}

View file

@ -1,14 +1,26 @@
{ lib, config, ... }:
let
cfg = config.liminalOS.system.audio;
in
{
# Enable sound with pipewire.
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
options.liminalOS.system.audio.enable = lib.mkOption {
type = lib.types.bool;
default = config.liminalOS.enable;
description = ''
Whether to set up PipeWire and default audio utilities.
'';
};
services.playerctld.enable = true;
config = {
services.playerctld.enable = lib.mkIf cfg.enable true;
hardware.pulseaudio.enable = lib.mkIf cfg.enable false;
services.pipewire = lib.mkIf cfg.enable {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
wireplumber.enable = true;
};
};
}

View file

@ -2,80 +2,204 @@
inputs,
pkgs,
config,
lib,
...
}:
let
cfg = config.liminalOS.system.core;
in
{
environment.systemPackages = [
inputs.viminal.packages.${pkgs.system}.default
];
environment.variables = {
EDITOR = "nvim";
options.liminalOS.system.core = {
enable = lib.mkOption {
type = lib.types.bool;
default = config.liminalOS.enable;
description = ''
Whether to enable core liminalOS system utilities and configurations (such as security policies, Nix options, etc)
'';
};
replaceSudoWithDoas = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
description = ''
Whether to replace sudo with doas, the Dedicated OpenBSD Application Subexecutor. Doas is the preferred liminalOS setuid program.
'';
};
waylandFixes = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
description = ''
Whether to enable some Wayland fixes, like setting NIXOS_OZONE_WL to hint Electron apps to use the Wayland windowing system.
'';
};
nixSaneDefaults = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
description = ''
Whether to set sane defaults for Nix, such as optimization and automatic garbage collection.
'';
};
useNh = lib.mkOption {
type = lib.types.bool;
default = cfg.nixSaneDefaults;
description = ''
Whether to enable the `nh` cli (yet another Nix helper), a reimplementation of some core NixOS utilities like nix-collect-garbage and nixos-rebuild. If enabled, automatic garbage collection will use `nh` instead of `nix-collect-garbage` and will be able to garbage collect `result` symlinks.
'';
};
suppressWarnings = lib.mkEnableOption "suppress warnings";
networking = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''Whether to set up and enable networking daemons.'';
};
backend = lib.mkOption {
type = lib.types.enum [
"wpa_supplicant"
"iwd"
];
default = "wpa_supplicant";
description = ''
Which backend to use for networking. Default is wpa_supplicant with NetworkManager as a frontend. With iwd, iwctl is the frontend.
'';
};
};
bluetooth.enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether to enable bluetooth and blueman.
'';
};
};
# tells electron apps to use Wayland
environment.sessionVariables = {
NIXOS_OZONE_WL = "1";
};
security.sudo.enable = false;
security.doas = {
enable = true;
extraRules = [
{
users = [ "youwen" ];
keepEnv = true;
persist = true;
}
];
};
services.gnome.gnome-keyring.enable = true;
nix = {
optimise.automatic = true;
# gc = {
# automatic = true;
# dates = "weekly";
# options = "--delete-older-than 14d";
# };
# Free up to 1GiB when there is less than 100MiB left
extraOptions = ''
min-free = ${toString (100 * 1024 * 1024)}
max-free = ${toString (1024 * 1024 * 1024)}
'';
settings = {
experimental-features = [
"nix-command"
"flakes"
config = lib.mkIf cfg.enable {
environment.systemPackages =
with pkgs;
[
wget
git
curl
]
++ [
config.liminalOS.defaultEditor
];
substituters = [
"https://cache.nixos.org"
];
trusted-public-keys = [
"hydra.nixos.org-1:CNHJZBh9K4tP3EKF6FkkgeVYsS3ohTl+oS0Qa8bezVs="
# tells electron apps to use Wayland
environment.sessionVariables = lib.mkIf cfg.waylandFixes {
NIXOS_OZONE_WL = "1";
};
security = {
sudo.enable = !cfg.replaceSudoWithDoas;
doas = lib.mkIf cfg.replaceSudoWithDoas {
enable = true;
extraRules = [
{
users = [ "youwen" ];
keepEnv = true;
persist = true;
}
];
};
rtkit.enable = true;
};
services.gnome.gnome-keyring.enable = true;
nix = lib.mkIf cfg.nixSaneDefaults {
gc = lib.mkIf (!cfg.useNh) {
automatic = true;
dates = "weekly";
options = "--delete-older-than 14d";
};
optimise.automatic = true;
# Free up to 1GiB when there is less than 100MiB left
extraOptions = ''
min-free = ${toString (100 * 1024 * 1024)}
max-free = ${toString (1024 * 1024 * 1024)}
'';
settings = {
experimental-features = [
"nix-command"
"flakes"
];
substituters = [
"https://cache.nixos.org"
];
trusted-public-keys = [
"hydra.nixos.org-1:CNHJZBh9K4tP3EKF6FkkgeVYsS3ohTl+oS0Qa8bezVs="
];
trusted-users = [ "@wheel" ];
};
channel.enable = false;
};
programs.nh = lib.mkIf cfg.useNh {
enable = true;
clean = lib.mkIf cfg.nixSaneDefaults {
enable = true;
extraArgs = "--keep-since 4d --keep 3";
};
flake = config.liminalOS.flakeLocation;
};
programs.nix-ld = {
enable = true;
libraries = with pkgs; [
icu
xorg.libXtst
xorg.libXi
];
};
channel.enable = false;
};
boot.tmp.cleanOnBoot = true;
programs.nh = {
enable = true;
clean.enable = true;
clean.extraArgs = "--keep-since 4d --keep 3";
flake = "/home/youwen/.config/liminalOS";
};
# Enable CUPS to print documents.
services.printing.enable = true;
hardware.enableRedistributableFirmware = true;
services.avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
networking.networkmanager.enable = lib.mkIf (
cfg.networking.enable && cfg.networking.backend == "wpa_supplicant"
) true;
boot.tmp.cleanOnBoot = true;
systemd.services.NetworkManager-wait-online.enable = lib.mkIf (
cfg.networking.enable && cfg.networking.backend == "wpa_supplicant"
) false;
networking.wireless.iwd = lib.mkIf (cfg.networking.enable && cfg.networking.backend == "iwd") {
enable = true;
settings.General.EnableNetworkConfiguration = true;
};
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
programs.dconf.enable = true;
programs.fish.enable = true;
services.tlp.enable = lib.mkIf (config.liminalOS.formFactor == "laptop") true;
programs.light.enable = lib.mkIf (config.liminalOS.formFactor == "laptop") true;
hardware.bluetooth = lib.mkIf cfg.bluetooth.enable {
enable = true;
powerOnBoot = true;
};
services.blueman.enable = lib.mkIf cfg.bluetooth.enable true;
warnings =
if !cfg.suppressWarnings && cfg.useNh && config.liminalOS.flakeLocation == "" then
[
''The `nh` CLI is enabled but `liminalOS.flakeLocation` is not set. It is recommended that you set this option to the absolute file path of your configuration flake so that `nh` can work without specifying the flake path every time. You can disable this warning by setting `liminalOS.system.core.suppressWarnings`.''
]
else
[ ];
};
}

27
modules/linux/default.nix Normal file
View file

@ -0,0 +1,27 @@
{ lib, ... }:
{
imports = [
./audio
./audio-prod
./core
./desktop-environment
./distrobox
./flatpak
./gaming
./greeter
./misc
./networking
./stylix
./wine
./wsl
./graphics
];
options.liminalOS.enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether to enable liminalOS's default modules and options for Linux.
'';
};
}

View file

@ -0,0 +1,43 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.liminalOS.desktop;
in
{
options.liminalOS.desktop = {
enable = lib.mkOption {
type = lib.types.bool;
default = config.liminalOS.enable;
description = ''
Whether to enable the liminalOS desktop environment.
'';
};
hyprland.enable = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
description = ''
Whether to enable Hyprland. Sets up a default configuration at the system and user level, and installs xdg-desktop-portal-gtk.
'';
};
};
config = lib.mkIf cfg.enable {
xdg.portal = lib.mkIf cfg.hyprland.enable {
enable = true;
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
};
programs.hyprland.enable = cfg.hyprland.enable;
services.xserver.enable = false;
services.xserver = {
xkb.layout = "us";
xkb.variant = "";
};
};
}

View file

@ -1,7 +0,0 @@
{ pkgs, ... }:
{
xdg.portal = {
enable = true;
extraPortals = with pkgs; [ xdg-desktop-portal-gtk ];
};
}

View file

@ -1,9 +1,21 @@
{ pkgs, ... }:
{
virtualisation.podman = {
enable = true;
dockerCompat = true;
};
pkgs,
lib,
config,
...
}:
let
cfg = config.liminalOS.extras.distrobox;
in
{
options.liminalOS.extras.distrobox.enable = lib.mkEnableOption "distrobox and podman";
environment.systemPackages = [ pkgs.distrobox ];
config = lib.mkIf cfg.enable {
virtualisation.podman = {
enable = true;
dockerCompat = true;
};
environment.systemPackages = [ pkgs.distrobox ];
};
}

View file

@ -2,44 +2,50 @@
# versioned. Therefore, they are not included in generational rollbacks and
# persist between generations. This is not ideal, but at least it is a better
# situation than imperative installation
{ inputs, ... }:
{
imports = [
inputs.nix-flatpak.nixosModules.nix-flatpak
];
inputs,
config,
lib,
...
}:
let
cfg = config.liminalOS.programs.flatpak;
in
{
options.liminalOS.programs.flatpak = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable Nix flatpak support with some fixes as well as declarative flatpak management.
'';
};
};
services.flatpak = {
enable = true;
config = lib.mkIf cfg.enable {
xdg.portal.enable = true;
services.flatpak = {
enable = true;
overrides = {
global = {
Context.sockets = [
"wayland"
"!x11"
"!fallback-x11"
];
overrides = {
global = {
Context.sockets = [
"wayland"
"!x11"
"!fallback-x11"
];
Environment = {
# Fix un-themed cursor in some Wayland apps
XCURSOR_PATH = "/run/host/user-share/icons:/run/host/share/icons";
Environment = {
# Fix un-themed cursor in some Wayland apps
XCURSOR_PATH = "/run/host/user-share/icons:/run/host/share/icons";
};
};
};
};
update.auto = {
enable = true;
onCalendar = "weekly";
update.auto = {
enable = true;
onCalendar = "weekly";
};
};
packages = [
{
flatpakref = "https://sober.vinegarhq.org/sober.flatpakref";
sha256 = "sha256:1pj8y1xhiwgbnhrr3yr3ybpfis9slrl73i0b1lc9q89vhip6ym2l";
}
{
appId = "org.vinegarhq.Sober";
origin = "sober";
}
];
};
}

View file

@ -0,0 +1,10 @@
[Flatpak Ref]
Title=Sober
Name=org.vinegarhq.Sober
Url=https://sober.vinegarhq.org/repo/
SuggestRemoteName=sober
Homepage=https://sober.vinegarhq.org
Icon=https://sober.vinegarhq.org/sober.svg
RuntimeRepo=https://dl.flathub.org/repo/flathub.flatpakrepo
IsRuntime=false
GPGKey=LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUdOQkdhc3U4QUJEQURUQzExYjFmUG9LZU9Ea1hTT3lrYzllajRZeFZMSlZQN2NFZmRnV05aWllsYnFsZ0xECms2MTNxK1dnOE0xb0Zrem00MjMvSUhyT050TEZpVG9sN0paTE1DS0w0d05Id1dnOWpmcmwzak5EUUtKb2lUQVEKZllsWFJiZ09IeVNLYmxFRDVaRm9hQ3BRM0pMQkdaalRUZ1VJck9mK3lSU3lZU09pUHFucEJuM1NHZEh3L0pXegpkY3hRUUd4OVdNL2ZlNGFSVVJMS0k1VG9Ya244cGNZWE4wdE50T2tlOUUzeDI5b3pOcVg0b3BicDJkWXJnejlqCklVM1Zka2VUdTRlSmhJQ2tWMzFVbGpQcVg5VVc1azViTjM4VDRMaEJqQ0kzS1Q2TkJhaXVab1FselFsbXNkYVIKMEdWK3kvSUFhdXNOUzdjMHhCUithUnNnOExpa3h1cXBqWGl6RS9HRTYydCtZeVZBVEs1S0J6aThRZWdVSVMwZgpHRUxkV0RydzBmMUkzc1RuUTBqL2xpZWNneUppMmtmUnlqMThFSmx6WDlYWTdqcHArL2pPUGlqaXYrbXlvaEJXCm1hY3N5UUZCQkg0dEpZUUt4TW1Mc0Y2eUsyWVNTV0IvcS9CZEZlbFY5VDZSWFRlbzRkS0pGK085N0RkRjlTVnYKQWplL25WTjhmZG1VTjgwQUVRRUFBYlFZVTI5aVpYSWdSbXhoZEhCaGF5QlNaWEJ2YzJsMGIzSjVpUUhSQkJNQgpDZ0E3RmlFRWRieGpyeDFRYitvWk5BRnIydmkrK0JPTlMyVUZBbWFzdThBQ0d3TUZDd2tJQndJQ0lnSUdGUW9KCkNBc0NCQllDQXdFQ0hnY0NGNEFBQ2drUTJ2aSsrQk9OUzJWc3VRdi9XMnV6a3pyNGdURWN4VFFUNzZxTVF4TUUKT2svQis5eTNZMytFUlA5d0h4MEpSWVMxT3pvV1Z2VklTYy9PYWVwMUdielg3Zm8vU2c5Z1NySXI5OXpiQkRjaApIZFlGWngweU11VTZMd3ZNN2NMZHRSNmJTOWloNklOeGc5NXpaaVZnMVZvS01rZEhwV1IwRW9UWjk1S0NVL1IzCmhjWWZDNkFxWTVKVDFXTlJZRG9FVTFCN0JOQXUxejNUZkt0OE5LSTM3N2tBWlREZEQybDFxQ0ZrWHZKVW5QalUKZWxSRmlJUFlsMi9iYUVaK0hKYW44R09uNGpQcTczc0VyRVl5SnZiblVlMFY0S3VxMzZwWjZSa0J6ZjBnczFLcgovRE9BZjZkTkEzbVdVVDE2NzNFbGxEaysrSzgvQnNYMVQ1OUtIY0U0c2NKMHFuVGxucis1NktYbDBMMmcwc2NvCnNjbUFqRUtVMjgvalpseitpU214YVM5ZmYreXJjbUFkYXhSb2RSQ2NjdzlaWEs1akhNT1VsMlJJWWcvZWpRcUYKcWU2OWhuK2ErVngvbWU5bmNrRVAzWUNQM2J0QmhLcGtTMk0zcmtUd3ZPK2RreXpBR2lIMDg3SUlsV242UmtGSwptZ1VEWjFiQ0ZDUG0yZGhkbHBGcU8ybTVpRXdKM1V1TERQNnZZdEVndVFHTkJHYXN1OEFCREFDN1lEeElLem54Ck5pWEFLZTZNR3JIK2tpYjYvV0pjSXJDKzUvaFgxZWpYdTBOSjQ2R0lZTUx5eWZVay9UUHpvZklwdFZuUm1nV2wKcUxqQTNQQTNhUmdDQk9BTHVWTXJWMFBuaUdVeG9ETkFadmFBN3pwSncyMDAvMUVsVCt4dzB0S09Xd2FaNDZiNApGdVpXcE9hTExzdXB5MldIR3hORGdINm9NbUJBd3J6aytzaFNSUUhtOEV3bWlBQS8vQjVBTG5wcFNPS1NHdmowCjBGMzYzL1Y2OWdOZ0oxUTZEb1VzcmxNbENFYkV0Q0cwQXpwWE0yWkNBdWt3QWxNMU9oa1c2WXFlc1EybnBuQk8KT3N5SVJSdG1xWnQrSTdwWmczZkdmdERaYWw2NGI1K1JXWVlTWmQ4NW1jT0h4OVdCdzBpano1a3pyQVhISGdLcgpXOWd3YUZjS2U3OWtNMi9kbkRDcXJLbVp2QmJzZDFBMG9SSVpOMU91SHZpdzVLSXNPZ3pIemo4REx5eEd4ek9MCkhWUjZ1L0FQWEJJWGordXBpdVpLblRqTkxNUWVRUWlQc3RYdjZrUVA1RjRHeXJYU2VNdUo0SHFsMWhmOGs2MjcKYnVMTnZGdGJPYWU0NU5tTUpUTUJGQjN1NHRXaXlCUkVzaExaQ2VySWZtT2NmdWtLbFcvck5JOEFFUUVBQVlrQgp0Z1FZQVFvQUlCWWhCSFc4WTY4ZFVHL3FHVFFCYTlyNHZ2Z1RqVXRsQlFKbXJMdkFBaHNNQUFvSkVOcjR2dmdUCmpVdGxJVjBNQUtKd0RVWUhrZ3RWYlN5b3B4SDFFQ1lXRlppRlpwbktnVmZMMDlRYWZBREZCYjM2YVBReHJhMDkKdnBSNG02ZW5RZENiRmNWMGhFeXdZeS85SFFRcGhBKzFtOHNtSXlrY3B2MitYRnBtYmhmMDhOemVsdUJwVXRmVApDTTRWWHJBbzkwdUpTUU41NEg0NzVWQ0lWcXpMK2tzNHVvSmlIbGRSQnR2WVY4Yy84amdxUjRpWDBjd3J0ZWRWCmwzS0VZMGEwYjV3b1Fqb1dxQmo2Q0FYc0hUOHRCR3J1Q2p5VzlJU1l5R00rbmJ3UkpFSS9FSFlhc1N1cTZ5MlIKQ2hIR2lzOUtWcnhGWmZxMW1oU2xheVFZcWlkRGV3cm9Qa2pUZ2dvSjhPL1NxeEwyejdkK01vQ1pDZEpubnVadwpVRHpxN0RUSHhPYmlmdlUrclkybGNveE8vTzkvZ21mZ28vTTFma0xTTmdxN1ZYd0hMV2lSNmFVSjFyOFY5WnRZCmIxbXI4aVIxbGNlR2lRRVFxSTJPMm1KeHptWWlTaHEzZ1dMZjdzaXpnZjk0NFlBVy9rTGUxdVdsSlFpQUcyb0IKa1MzT0RTRUxkdVhFR3NxRGJ2QlQvSVpveGgyMjQ2QzR5MlhiOTZFYUlpYlFxRzJDVTZ3T2xTQktmb09IRTAzegpoQmJSc3dBZlFBPT0KPVp4Q1YKLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLQo=

View file

@ -1,19 +0,0 @@
{ pkgs, ... }:
{
fonts = {
enableDefaultPackages = true;
# fontconfig = {
# defaultFonts = {
# serif = [ "Noto Serif" ];
# sansSerif = [ "Noto Sans" ];
# };
# };
packages = with pkgs; [
# noto-fonts
noto-fonts-cjk-sans
# noto-fonts-emoji
# (nerdfonts.override { fonts = [ "CascadiaCode" ]; })
(google-fonts.override { fonts = [ "Lora" ]; })
];
};
}

View file

@ -1,55 +1,131 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
ryujinx
mangohud
mangojuice
];
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
localNetworkGameTransfers.openFirewall = true;
gamescopeSession.enable = true;
};
programs.gamescope.enable = true;
programs.gamemode = {
enable = true;
enableRenice = true;
settings = {
general = {
renice = 10;
};
custom = {
start = "${pkgs.libnotify}/bin/notify-send 'GameMode engaged'";
end = "${pkgs.libnotify}/bin/notify-send 'GameMode disengaged'";
pkgs,
lib,
config,
...
}:
let
cfg = config.liminalOS.extras.gaming;
in
{
options.liminalOS.extras.gaming = {
enable = lib.mkEnableOption "gaming";
utilities = {
hamachi.enable = lib.mkEnableOption "hamachi";
gamemode = {
enable = lib.mkEnableOption "gamemode";
gamemodeUsers = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = ''
List of users to add to the gamemode group. Gamemode will likely not work unless you add your user to the group!
'';
};
};
};
};
users.users.youwen.extraGroups = [ "gamemode" ];
nixpkgs.config.packageOverrides = pkgs: {
steam = pkgs.steam.override {
extraPkgs =
pkgs: with pkgs; [
xorg.libXcursor
xorg.libXi
xorg.libXinerama
xorg.libXScrnSaver
libpng
libpulseaudio
libvorbis
stdenv.cc.cc.lib
libkrb5
(writeShellScriptBin "launch-gamescope" ''
(sleep 1; pgrep gamescope| xargs renice -n -11 -p)&
exec gamescope "$@"
'')
keyutils
];
roblox.enable = lib.mkOption {
type = lib.types.bool;
default = config.liminalOS.extras.gaming && cfg.enable;
description = ''
Whether to install the Roblox Sober flatpak automatically. Note that this will enable the nix-flatpak service and automatic flatpak updates.`
'';
};
};
config = lib.mkIf cfg.enable (
let
forAllGamemodeUsers = lib.genAttrs cfg.utilities.gamemode.gamemodeUsers;
in
{
environment.systemPackages = with pkgs; [
ryujinx
lutris
heroic
mangohud
mangojuice
r2modman
modrinth-app
];
liminalOS.programs.flatpak.enable = true;
services.flatpak.packages = lib.mkIf cfg.roblox.enable [
{
flatpakref = "https://sober.vinegarhq.org/sober.flatpakref";
sha256 = "sha256:1pj8y1xhiwgbnhrr3yr3ybpfis9slrl73i0b1lc9q89vhip6ym2l";
}
{
appId = "org.vinegarhq.Sober";
origin = "sober";
}
];
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
localNetworkGameTransfers.openFirewall = true;
gamescopeSession.enable = true;
};
programs.gamescope.enable = true;
programs.gamemode = {
enable = true;
enableRenice = true;
settings = {
general = {
renice = 10;
};
custom = {
start = "${pkgs.libnotify}/bin/notify-send 'GameMode engaged'";
end = "${pkgs.libnotify}/bin/notify-send 'GameMode disengaged'";
};
};
};
liminalOS.config.extraUnfreePackages = lib.mkIf config.liminalOS.config.allowUnfree [
"modrinth-app"
"modrinth-app-unwrapped"
"steam"
"steam-unwrapped"
];
users.users = forAllGamemodeUsers (username: {
extraGroups = [ "gamemode" ];
});
services.logmein-hamachi.enable = cfg.utilities.hamachi.enable;
programs.haguichi.enable = cfg.utilities.hamachi.enable;
nixpkgs.config.packageOverrides = pkgs: {
steam = pkgs.steam.override {
extraPkgs =
pkgs: with pkgs; [
xorg.libXcursor
xorg.libXi
xorg.libXinerama
xorg.libXScrnSaver
libpng
libpulseaudio
libvorbis
stdenv.cc.cc.lib
libkrb5
(writeShellScriptBin "launch-gamescope" ''
(sleep 1; pgrep gamescope| xargs renice -n -11 -p)&
exec gamescope "$@"
'')
keyutils
];
};
};
warnings =
if cfg.utilities.gamemode.enable && (builtins.length cfg.utilities.gamemode.gamemodeUsers == 0) then
[
''You enabled gamemode without setting any gamemode users in `liminalOS.extras.gaming.utilities.gamemode.gamemodeUsers. Gamemode is unlikely to work unless you add your user to gamemodeUsers.''
]
else
[ ];
}
);
}

View file

@ -0,0 +1,69 @@
{
lib,
config,
pkgs,
...
}:
let
cfg = config.liminalOS.system.graphics;
in
{
options.liminalOS.system.graphics = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether to set up basic graphics settings and options.
'';
};
nvidia = {
enable = lib.mkEnableOption "recommended nvidia drivers and configuration";
optimus-prime.enable = lib.mkEnableOption "Nvidia OPTIMUS and PRIME";
optimus-prime.powerMode = lib.mkOption {
type = lib.types.enum [
"powersaving"
"performance"
];
default = "performance";
description = ''
Whether to use Nvidia OPTIMUS with maximum performance using the discrete graphics card, or to use offload mode to primarily use the integrated GPU and save power.
'';
};
suppressUnfreeWarning = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to disable the assertion that warns the user if they try to enable proprietary nvidia drivers without setting allowUnfree.
'';
};
};
};
config = lib.mkIf cfg.enable {
hardware.nvidia = lib.mkIf cfg.nvidia.enable {
modesetting.enable = true;
powerManagement.enable = true;
powerManagement.finegrained = false;
open = true;
package = config.boot.kernelPackages.nvidiaPackages.beta;
nvidiaSettings = true;
};
services.xserver.videoDrivers = lib.mkIf cfg.nvidia.enable [ "nvidia" ];
liminalOS.config.extraUnfreePackages = lib.mkIf cfg.nvidia.enable [
"nvidia-x11"
"nvidia-settings"
];
assertions = [
{
assertion =
!cfg.nvidia.enable
|| (config.liminalOS.config.allowUnfree && cfg.nvidia.enable)
|| cfg.nvidia.suppressUnfreeWarning;
message = "You enabled Nvidia proprietary driver installation but did not allow unfree packages to be installed! Consider setting liminalOS.config.allowUnfree = true or nixpkgs.config.allowUnfree = true. If you are using an allowUnfreePredicate to whitelist these packages manually, you can set liminalOS.system.graphics.nvidia.suppressUnfreeWarning = true";
}
];
};
}

View file

@ -1,25 +1,52 @@
{ pkgs, ... }:
{
services.greetd = {
enable = true;
settings = {
default_session = {
command = ''
${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland --remember --greeting "Welcome, generation $(readlink /nix/var/nix/profiles/system | grep -o '[0-9]*'). Access is restricted to authorized personnel only."
'';
user = "greeter";
};
pkgs,
lib,
config,
...
}:
let
cfg = config.liminalOS.desktop.greeter;
in
{
options.liminalOS.desktop.greeter = {
enable = lib.mkOption {
type = lib.types.bool;
default = config.liminalOS.desktop.enable;
description = ''
Whether to enable and set up tui-greet, the default greeter for liminalOS.
'';
};
command = lib.mkOption {
type = lib.types.str;
default = if config.liminalOS.desktop.enable then "Hyprland" else "";
description = ''
Command for the greeter to execute to launch the desktop. If the liminalOS Hyprland Desktop is enabled, defaults to `Hyprland`.
'';
};
};
systemd.services.greetd.serviceConfig = {
Type = "idle";
StandardInput = "tty";
StandardOutput = "tty";
StandardError = "journal"; # Without this errors will spam on screen
# Without these bootlogs will spam on screen
TTYReset = true;
TTYVHangup = true;
TTYVTDisallocate = true;
config = lib.mkIf cfg.enable {
services.greetd = {
enable = true;
settings = {
default_session = {
command = ''
${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland --remember --greeting "Welcome, generation $(readlink /nix/var/nix/profiles/system | grep -o '[0-9]*'). Access is restricted to authorized personnel only."
'';
user = "greeter";
};
};
};
systemd.services.greetd.serviceConfig = {
Type = "idle";
StandardInput = "tty";
StandardOutput = "tty";
StandardError = "journal"; # Without this errors will spam on screen
# Without these bootlogs will spam on screen
TTYReset = true;
TTYVHangup = true;
TTYVTDisallocate = true;
};
};
}

View file

@ -1,4 +0,0 @@
{
services.logmein-hamachi.enable = true;
programs.haguichi.enable = true;
}

View file

@ -0,0 +1,138 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.liminalOS;
inherit (lib) mkIf;
in
{
options.liminalOS = {
system.printing.enable = lib.mkOption {
type = lib.types.bool;
default = config.liminalOS.enable;
description = ''
Whether to set up default options for printing and printer discover on UNIX.
'';
};
system.fonts.enable = lib.mkOption {
type = lib.types.bool;
default = config.liminalOS.enable;
description = ''
Whether to set up some nice default fonts, including a Nerd Font, Noto Fonts, and CJK.
'';
};
config.allowUnfree = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable some proprietary packages required by certain liminalOS modules. This does not set allowUnfree for the whole system, it merely allows the installation of a few proprietary packages such as Nvidia drivers, etc. You should still set this option even if you already set nixpkgs.config.allowUnfree for the whole system since it tells liminalOS it can enable certain options that require proprietary packages.
'';
};
config.extraUnfreePackages = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = ''
Packages to enable in allowUnfreePredicate
'';
};
flakeLocation = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
description = ''
Absolute filepath location of the NixOS system configuration flake.
'';
};
useEnUsLocale = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Whether to use the en_US locale automatically";
};
defaultEditor = lib.mkOption {
type = lib.types.nullOr lib.types.package;
default = pkgs.neovim;
description = "Default text editor that will be installed and set as $EDITOR. Set to null to disable setting and installing default text editor.";
};
formFactor = lib.mkOption {
type = lib.types.nullOr (
lib.types.enum [
"laptop"
"desktop"
]
);
default = null;
description = ''
Form factor of the machine. Adjusts some UI settings.
'';
};
};
config = lib.mkIf cfg.enable {
services.printing.enable = mkIf cfg.system.printing.enable true;
services.avahi = mkIf cfg.system.printing.enable {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
fonts = mkIf cfg.system.fonts.enable {
enableDefaultPackages = true;
packages =
with pkgs;
[
noto-fonts-cjk-sans
(google-fonts.override { fonts = [ "Lora" ]; })
]
++ (lib.optionals (!config.liminalOS.theming.enable) [
noto-fonts
noto-fonts-emoji
nerd-fonts.caskaydia-cove
]);
};
nixpkgs.config.allowUnfreePredicate = lib.mkIf config.liminalOS.config.allowUnfree (
pkg:
builtins.elem (pkgs.lib.getName pkg) (
config.liminalOS.config.extraUnfreePackages
++ [
"spotify"
]
)
);
environment.variables.EDITOR = lib.mkIf (
cfg.defaultEditor != null
) cfg.defaultEditor.meta.mainProgram;
environment.systemPackages = lib.mkIf (cfg.defaultEditor != null) [ cfg.defaultEditor ];
# Select internationalisation properties.
i18n = lib.mkIf cfg.useEnUsLocale {
defaultLocale = "en_US.UTF-8";
extraLocaleSettings = {
LC_ADDRESS = "en_US.UTF-8";
LC_IDENTIFICATION = "en_US.UTF-8";
LC_MEASUREMENT = "en_US.UTF-8";
LC_MONETARY = "en_US.UTF-8";
LC_NAME = "en_US.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "en_US.UTF-8";
LC_TELEPHONE = "en_US.UTF-8";
LC_TIME = "en_US.UTF-8";
};
};
assertions = [
{
assertion = cfg.formFactor != null;
message = ''
You must set `liminalOS.formFactor` to either "laptop" or "desktop"!
'';
}
];
};
}

View file

@ -1,35 +1,59 @@
{ lib, config, ... }:
let
universalAllowedPorts = [
27016 # grim dawn
42805 # grim dawn
42852 # grim dawn
42872 # grim dawn
27015 # grim dawn
27036 # grim dawn
cfg = config.liminalOS.system.networking;
5173 # vite test server
4173 # vite test server
];
universalAllowedPorts =
(lib.optionals cfg.firewallPresets.grimDawn [
27016 # grim dawn
42805 # grim dawn
42852 # grim dawn
42872 # grim dawn
27015 # grim dawn
27036 # grim dawn
])
++ (lib.optionals cfg.firewallPresets.vite [
5173 # vite test server
4173 # vite test server
]);
universalAllowedRanges = [ ];
in
{
services.openssh.enable = true;
networking.firewall = {
enable = true;
allowedTCPPorts = universalAllowedPorts;
allowedUDPPorts = universalAllowedPorts;
allowedUDPPortRanges = universalAllowedRanges ++ [
{
from = 27031;
to = 27036;
}
];
allowedTCPPortRanges = universalAllowedRanges;
options.liminalOS.system.networking = {
enable = lib.mkOption {
type = lib.types.bool;
default = config.liminalOS.enable;
description = ''
Whether to enable networking features.
'';
};
firewallPresets = {
grimDawn = lib.mkEnableOption "firewall ports for Grim Dawn";
vite = lib.mkEnableOption "firewall ports for Vite";
};
cloudflareNameservers.enable = lib.mkEnableOption "Cloudflare DNS servers";
};
networking.nameservers = [
"1.1.1.1"
"1.0.0.1"
];
config = lib.mkIf cfg.enable {
services.openssh.enable = true;
networking.firewall = {
enable = true;
allowedTCPPorts = universalAllowedPorts;
allowedUDPPorts = universalAllowedPorts;
allowedUDPPortRanges =
universalAllowedRanges
++ (lib.optionals cfg.firewallPresets.grimDawn [
{
from = 27031;
to = 27036;
}
]);
allowedTCPPortRanges = universalAllowedRanges;
};
networking.nameservers = lib.mkIf cfg.cloudflareNameservers.enable [
"1.1.1.1"
"1.0.0.1"
];
};
}

View file

@ -1,13 +0,0 @@
{ pkgs, ... }:
{
services.spotifyd = {
enable = true;
settings = {
global = {
bitrate = 320;
use_mpris = true;
device_type = "computer";
};
};
};
}

View file

@ -1,40 +1,109 @@
{ inputs, pkgs, ... }:
{
imports = [
inputs.stylix.nixosModules.stylix
];
stylix = {
enable = true;
image = "${inputs.wallpapers}/aesthetic/afterglow_city_skyline_at_night.png";
# image = "${inputs.wallpapers}/aesthetic/red_deadly_sun.jpg";
# image = "${inputs.wallpapers}/aesthetic/afterglow_sand_dunes.jpg";
base16Scheme = "${pkgs.base16-schemes}/share/themes/rose-pine.yaml";
polarity = "dark";
fonts = {
serif = {
name = "Noto Serif";
package = pkgs.noto-fonts;
};
sansSerif = {
name = "Noto Sans";
package = pkgs.noto-fonts;
};
emoji = {
name = "Noto Color Emoji";
package = pkgs.noto-fonts-emoji;
};
monospace = {
name = "CaskaydiaCove Nerd Font";
package = pkgs.nerd-fonts.caskaydia-cove;
};
pkgs,
config,
lib,
...
}:
let
cfg = config.liminalOS.theming;
in
{
options.liminalOS.theming = {
enable = lib.mkOption {
type = lib.types.bool;
default = config.liminalOS.enable;
description = ''
Whether to uniformly theme the entire system using Stylix.
'';
};
cursor = {
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Ice";
size = 26;
plymouth.enable = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
description = ''
Whether to enable plymouth and sane defaults.
'';
};
wallpaper = lib.mkOption {
type = lib.types.path;
default = "../../../hm/modules/common/shellenv/fastfetch/nixos-logo.png";
description = ''
Path to wallpaper to set as background and generate system colorscehme from.
'';
};
polarity = lib.mkOption {
type = lib.types.nullOr (
lib.types.enum [
"light"
"dark"
]
);
default = null;
description = ''
Whether to force colorscheme to be generated as light or dark theme. Set to null to automatically determine.
'';
};
base16Scheme = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
description = ''
Base 16 colorscheme from base16-schemes to override wallpaper generated colorscheme with. Set to null to use wallpaper generated scheme.
Example: ''${pkgs.base16-schemes}/share/themes/rose-pine.yaml
'';
};
};
config = lib.mkIf cfg.enable {
stylix = {
enable = true;
image = lib.mkIf (cfg.wallpaper != null) cfg.wallpaper;
base16Scheme = lib.mkIf (cfg.base16Scheme != null) cfg.base16Scheme;
polarity = lib.mkIf (cfg.polarity != null) cfg.polarity;
fonts = {
serif = {
name = "Noto Serif";
package = pkgs.noto-fonts;
};
sansSerif = {
name = "Noto Sans";
package = pkgs.noto-fonts;
};
emoji = {
name = "Noto Color Emoji";
package = pkgs.noto-fonts-emoji;
};
monospace = {
name = "CaskaydiaCove Nerd Font";
package = pkgs.nerd-fonts.caskaydia-cove;
};
};
cursor = {
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Ice";
size = 26;
};
};
boot = {
plymouth = {
enable = true;
font = "${config.stylix.fonts.monospace.package}/share/fonts/truetype/NerdFonts/CaskaydiaCove/CaskaydiaCoveNerdFontMono-Regular.ttf";
};
# Enable "Silent Boot"
consoleLogLevel = 3;
initrd.verbose = false;
kernelParams = [
"quiet"
"splash"
"boot.shell_on_fail"
"rd.systemd.show_status=false"
"rd.udev.log_level=3"
"udev.log_priority=3"
];
initrd.systemd.enable = true;
};
};
}

View file

@ -1,12 +1,27 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
winetricks
wine
];
nixpkgs.overlays = [
(self: super: {
wine = super.wineWowPackages.stable;
})
];
pkgs,
config,
lib,
...
}:
let
cfg = config.liminalOS.programs.wine;
in
{
options.liminalOS.programs.wine.enable = lib.mkEnableOption "wine";
config = lib.mkIf cfg.enable {
environment.systemPackages = (
with pkgs;
[
winetricks
wine
]
);
nixpkgs.overlays = [
(self: super: {
wine = super.wineWowPackages.stable;
})
];
};
}

View file

@ -1,12 +1,20 @@
{ inputs, ... }:
{
imports = [
inputs.nixos-wsl.nixosModules.default
];
inputs,
config,
lib,
...
}:
let
cfg = config.liminalOS.wsl;
in
{
options.liminalOS.wsl = {
enable = lib.mkEnableOption "WSL";
};
wsl = {
config.wsl = lib.mkIf cfg.enable {
enable = true;
defaultUser = "youwen";
defaultUser = config.liminalOS.username;
useWindowsDriver = true;
};
}

View file

@ -1,5 +1,4 @@
{
inputs,
pkgs,
...
}:
@ -12,9 +11,5 @@ in
{
nixpkgs.overlays = [
(import ../pkgs { inherit pkgs; })
(self: super: {
zen-browser = inputs.zen-browser.packages.${system}.default;
zen-browser-unwrapped = inputs.zen-browser.packages.${system}.zen-browser-unwrapped;
})
];
}

View file

@ -0,0 +1,49 @@
{
lib,
gcc14Stdenv,
fetchFromGitHub,
cmake,
pkg-config,
hyprutils,
pciutils,
qt6,
}:
let
inherit (lib.strings) makeBinPath;
in
gcc14Stdenv.mkDerivation (finalAttrs: {
pname = "hyprland-qtutils";
version = "0.1.1";
src = fetchFromGitHub {
owner = "hyprwm";
repo = "hyprland-qtutils";
tag = "v${finalAttrs.version}";
hash = "sha256-Zp2cQOo1D7WH7ml5nV7mLyto0l19gTaWnbDb6zty1Qs=";
};
nativeBuildInputs = [
cmake
pkg-config
qt6.wrapQtAppsHook
];
buildInputs = [
hyprutils
qt6.qtbase
qt6.qtsvg
qt6.qtwayland
];
preFixup = ''
qtWrapperArgs+=(--prefix PATH : "${makeBinPath [ pciutils ]}")
'';
meta = {
description = "Hyprland QT/qml utility apps";
homepage = "https://github.com/hyprwm/hyprland-qtutils";
license = lib.licenses.bsd3;
maintainers = [ lib.maintainers.fufexan ];
platforms = lib.platforms.linux;
};
})

View file

@ -4,4 +4,5 @@ let
in
final: prev: {
modrinth-app = callPackage ./by-name/modrinth-app { };
hyprland-qtutils = callPackage ./by-name/hyprland-qtutils { };
}

View file

@ -0,0 +1,89 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{
inputs,
pkgs,
...
}:
{
imports = [ ./hardware-configuration.nix ];
networking.hostName = "callisto";
time.timeZone = "America/Los_Angeles";
liminalOS = {
flakeLocation = "/home/youwen/.config/liminalOS";
formFactor = "laptop";
system = {
networking = {
firewallPresets.vite = true;
cloudflareNameservers.enable = true;
};
};
};
boot = {
loader.systemd-boot.enable = true;
loader.efi.canTouchEfiVariables = false;
kernelParams = [ "apple_dcp.show_notch=1" ];
extraModprobeConfig = ''
options hid_apple iso_layout=0
'';
};
hardware.asahi = {
peripheralFirmwareDirectory = "${inputs.apple-firmware}/firmware";
useExperimentalGPUDriver = true;
experimentalGPUInstallMode = "overlay";
};
nixpkgs.overlays = [
inputs.apple-silicon.overlays.apple-silicon-overlay
inputs.vesktop-bin.overlays.default
];
users.users.youwen = {
isNormalUser = true;
description = "Youwen Wu";
extraGroups = [ "wheel" ];
shell = pkgs.fish;
};
nix.settings = {
trusted-users = [
"youwen"
];
};
services.udev.extraRules = ''
KERNEL=="macsmc-battery", SUBSYSTEM=="power_supply", ATTR{charge_control_end_threshold}="90", ATTR{charge_control_start_threshold}="85"
'';
services.keyd = {
enable = true;
keyboards = {
default = {
ids = [ "*" ];
settings = {
main = {
capslock = "esc";
leftmeta = "leftcontrol";
leftalt = "leftmeta";
leftcontrol = "leftalt";
rightmeta = "leftalt";
rightalt = "layer(rightalt)";
};
rightalt = {
h = "left";
j = "down";
k = "up";
l = "right";
};
};
};
};
};
system.stateVersion = "24.11";
}

View file

@ -0,0 +1,21 @@
{
inputs,
system,
...
}:
{
imports =
[
./configuration.nix
../../../modules/linux
../../../overlays
{
home-manager.users.youwen = {
imports = [ ./home.nix ];
};
}
]
++ (with inputs; [
apple-silicon.nixosModules.apple-silicon-support
]);
}

View file

@ -0,0 +1,8 @@
{
imports = [
../../../hm/modules
../../users/youwen
];
home.stateVersion = "24.05";
}

View file

@ -0,0 +1,89 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{
inputs,
pkgs,
...
}:
{
imports = [
./hardware-configuration.nix
];
networking.hostName = "demeter";
liminalOS = {
flakeLocation = "/home/youwen/.config/liminalOS";
config.allowUnfree = true;
defaultEditor = inputs.viminal.packages.${pkgs.system}.default;
formFactor = "desktop";
theming = {
wallpaper = "${inputs.wallpapers}/aesthetic/afterglow_city_skyline_at_night.png";
base16Scheme = "${pkgs.base16-schemes}/share/themes/rose-pine.yaml";
};
system = {
audio.prod.enable = true;
networking = {
firewallPresets.vite = true;
cloudflareNameservers.enable = true;
};
graphics.nvidia.enable = true;
};
extras.gaming = {
enable = true;
roblox.enable = true;
utilities.gamemode = {
enable = true;
gamemodeUsers = [ "youwen" ];
};
};
};
time.timeZone = "America/Los_Angeles";
hardware.cpu.intel.updateMicrocode = true;
# Bootloader.
boot = {
loader = {
efi.canTouchEfiVariables = true;
timeout = 15;
# Lanzaboote currently replaces the systemd-boot module.
# This setting is usually set to true in configuration.nix
# generated at installation time. So we force it to false
# for now.
systemd-boot = {
enable = false;
consoleMode = "auto";
};
};
lanzaboote = {
enable = true;
pkiBundle = "/etc/secureboot";
};
kernelPackages = pkgs.linuxPackages_zen;
initrd.luks.devices."luks-af320a0f-b388-43f5-b5a3-af2b47cfc716".device =
"/dev/disk/by-uuid/af320a0f-b388-43f5-b5a3-af2b47cfc716";
};
users.users.youwen = {
isNormalUser = true;
description = "Youwen Wu";
extraGroups = [
"networkmanager"
"wheel"
];
shell = pkgs.fish;
};
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "24.05"; # Did you read the comment?
}

View file

@ -0,0 +1,20 @@
{
inputs,
self,
...
}:
{
imports =
[
./configuration.nix
self.nixosModules.liminalOS
{
home-manager.users.youwen = {
imports = [ ./home.nix ];
};
}
]
++ (with inputs; [
lanzaboote.nixosModules.lanzaboote
]);
}

View file

@ -1,10 +1,13 @@
{ lib, ... }:
{
lib,
...
}:
{
imports = [
../../../hm/modules
../../users/youwen
];
home.stateVersion = "24.05";
wayland.windowManager.hyprland.settings.monitor = [
# "DP-1,2560x1440@165,1920x0,auto"
"DP-1,2560x1440@144,1920x0,auto"
"HDMI-A-1,1920x1080@60,0x0,1"
];

View file

@ -0,0 +1,24 @@
{ self, ... }:
{
imports = [
self.homeManagerModules.liminalOS
];
home = {
username = "youwen";
homeDirectory = "/home/youwen";
};
liminalOS = {
utils.easyeffects.enable = true;
};
programs.git = {
userName = "Youwen Wu";
userEmail = "youwenw@gmail.com";
signing = {
signByDefault = true;
key = "8F5E6C1AF90976CA7102917A865658ED1FE61EC3";
};
};
}

View file

@ -0,0 +1,106 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{
pkgs,
inputs,
...
}:
{
imports = [
# Important: you should replace hardware-configuration.nix with your actual
# hardware-configuration.nix generated during NixOS installation, located
# at /etc/nixos/hardware-configuration.nix! If you don't have this file,
# re-run nixos-install to generate it.
./hardware-configuration.nix
];
networking.hostName = "liminalOS"; # Define your hostname.
liminalOS = {
# Set this to the absolute path of the location of this configuration flake
# to enable some UX enhanacements
flakeLocation = null;
config.allowUnfree = true;
# Set your default editor to any program.
defaultEditor = pkgs.helix;
# Set to either "laptop" or "desktop" for some adjustments
formFactor = "desktop";
# Set a wallpaper to whatever you want! You can use a local path as well.
# The colorscheme for the system is automatically generated from this
# wallpaper!
theming = {
wallpaper = pkgs.fetchurl {
url = "https://w.wallhaven.cc/full/l8/wallhaven-l8x1pr.jpg";
hash = "sha256-Ts8igtDxLsnAnpy+tiGAXVhJWYLMHGOb2fd8lpV+UnM=";
};
};
system = {
# Toggle true to enable audio production software, like reaper, and yabridge + 64 bit wine for
# installing Windows-exclusive VSTs!
audio.prod.enable = false;
networking = {
# Toggle on to allow default vite ports of 5173 and 4173 through the firewall for local testing!
firewallPresets.vite = false;
# Use cloudflare's 1.1.1.1 DNS servers
cloudflareNameservers.enable = true;
};
graphics.nvidia.enable = true;
};
extras.gaming = {
# Enable gaming utilities, like Heroic, Lutris, Steam
enable = true;
# Installs Roblox using Sober, as a flatpak. Note that this will enable
# the impure flatpak service that automatically updates flatpaks every
# week upon nixos-rebuild switch
roblox.enable = true;
utilities.gamemode = {
# enable the gamemoderun binary to maximize gaming performance
enable = true;
# don't forget to update this if you change your username!
gamemodeUsers = [ "default-user" ];
};
};
};
# Set up a user
users.users.default-user = {
isNormalUser = true;
description = "Default liminalOS user!";
extraGroups = [
"networkmanager"
"wheel"
];
shell = pkgs.fish;
};
home-manager.users.default-user = {
imports = [ ./home.nix ];
};
home-manager.extraSpecialArgs = { inherit inputs; };
# Set your time zone
time.timeZone = "America/Los_Angeles";
# Bootloader and kernel.
boot = {
loader = {
efi.canTouchEfiVariables = true;
timeout = 15;
systemd-boot = {
enable = true;
};
};
kernelPackages = pkgs.linuxPackages_zen;
};
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "24.05"; # Did you read the comment?
}

View file

@ -0,0 +1,33 @@
{
description = "Test standalone liminalOS system";
inputs = {
# Follow the nixpkgs in liminalOS, which is verified to build properly before release.
nixpkgs.follows = "liminalOS/nixpkgs";
liminalOS.url = "github:youwen5/liminalOS/modules-refactor";
# Alternatively, pin your own nixpkgs and set liminalOS to follow it, as shown below.
# nixpkgs.follows = "github:nixos/nixpkgs?ref=nixos-unstable";
# liminalOS.url = "github:youwen5/liminalOS/modules-refactor";
# liminalOS.inputs.nixpkgs.follows = "nixpkgs";
# Either way, you should ensure that liminalOS shares nixpkgs with your
# system to avoid any weird conflicts.
};
outputs =
inputs@{ nixpkgs, liminalOS, ... }:
{
# Execute sudo nixos-rebuild switch --flake .#liminalOS
nixosConfigurations = {
liminalOS = nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs; };
modules = [
liminalOS.nixosModules.default
./configuration.nix
];
};
};
};
}

View file

@ -0,0 +1,59 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [
"xhci_pci"
"ahci"
"nvme"
"usbhid"
"usb_storage"
"sd_mod"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" = {
device = "/dev/disk/by-uuid/5a339a7f-8668-42d7-9ecc-d7a8f1d3f7b2";
fsType = "ext4";
};
boot.initrd.luks.devices."luks-362ec972-7c5e-4c9f-ba5d-b8f2ed083509".device =
"/dev/disk/by-uuid/362ec972-7c5e-4c9f-ba5d-b8f2ed083509";
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/27EE-D950";
fsType = "vfat";
options = [
"fmask=0022"
"dmask=0022"
];
};
swapDevices = [
{ device = "/dev/disk/by-uuid/670fc084-d593-44b3-aed9-78d95fec71de"; }
];
# 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
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp6s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlo1.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -0,0 +1,25 @@
{ inputs, ... }:
{
imports = [
# import the liminalOS home manager module
inputs.liminalOS.homeManagerModules.default
];
home = {
username = "default-user";
homeDirectory = "/home/default-user";
};
liminalOS = {
# Enable the easyeffects program to easily EQ your headphones and add
# microphone effects
utils.easyeffects.enable = true;
};
programs.git = {
userName = "Default User";
userEmail = "default@localhost";
};
home.stateVersion = "24.05";
}

View file

@ -71,7 +71,6 @@
programs.gh = {
enable = true;
extensions = [ pkgs.github-copilot-cli ];
};
programs.starship = {

View file

@ -11,11 +11,7 @@ in
(createCommon pkgs)
++ (with pkgs; [
bitwarden-desktop
modrinth-app
lutris
sbctl
r2modman
zoom-us
]);
home.sessionVariables = {