global stylix and proper oh-my-posh

This commit is contained in:
Ingolf Wagner 2023-07-01 00:20:03 +02:00
parent 28ec876251
commit 93560cdd74
No known key found for this signature in database
GPG key ID: 76BF5F1928B9618B
21 changed files with 240 additions and 86 deletions

View file

@ -33,4 +33,3 @@ My overlay is in here.
### assets ### assets
assets, like scripts which I dont want to write in nix-lang. assets, like scripts which I dont want to write in nix-lang.

View file

@ -221,15 +221,16 @@
homeManagerModules = { config, ... }: { homeManagerModules = { config, ... }: {
imports = [ imports = [
home-manager.nixosModules.home-manager home-manager.nixosModules.home-manager
# stylix.nixosModules.stylix stylix.nixosModules.stylix
]; ];
stylix.image = ./nixos/assets/wallpaper.png;
home-manager.useGlobalPkgs = true; home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true; home-manager.useUserPackages = true;
home-manager.users.root = { home-manager.users.root = {
home.stateVersion = "22.11"; home.stateVersion = "22.11";
imports = [ imports = [
home-manager-utils.hmModule home-manager-utils.hmModule
#stylix.homeManagerModules.stylix
]; ];
}; };
home-manager.users.mainUser = { home-manager.users.mainUser = {
@ -237,7 +238,6 @@
imports = [ imports = [
doom-emacs-nix.hmModule doom-emacs-nix.hmModule
home-manager-utils.hmModule home-manager-utils.hmModule
stylix.homeManagerModules.stylix
]; ];
}; };
}; };
@ -295,7 +295,7 @@
modules = [ modules = [
#retiolum.nixosModules.retiolum #retiolum.nixosModules.retiolum
#private_assets.nixosModules.jobrad #private_assets.nixosModules.jobrad
#homeManagerModules homeManagerModules
]; ];
}; };

View file

@ -1,19 +1,18 @@
# remote installation iso # remote installation iso
* `./config.nix` : to generate the installation image - `./config.nix` : to generate the installation image
* `./remote-service.nix` : tor configuration you have to start on your machine. - `./remote-service.nix` : tor configuration you have to start on your machine.
## Steps ## Steps
* import `./remote-service.nix` in your `/etc/nixos/configuration.nix` - import `./remote-service.nix` in your `/etc/nixos/configuration.nix`
* `nixos-rebuild switch` - `nixos-rebuild switch`
* run `remote-install-get-hiddenReceiver` and enter the result in `./config.nix` as `hiddenReceiver` - run `remote-install-get-hiddenReceiver` and enter the result in `./config.nix` as `hiddenReceiver`
* set the public key in `./config.nix` - set the public key in `./config.nix`
* run `nixos-generate -f install-iso -c ./config.nix` - run `nixos-generate -f install-iso -c ./config.nix`
* prepare the usb stick : `sudo if=<path of the iso> of=/dev/<device> bs=4096` - prepare the usb stick : `sudo if=<path of the iso> of=/dev/<device> bs=4096`
* boot the usb-stick at the new machine - boot the usb-stick at the new machine
* run `remote-install-start-service` - run `remote-install-start-service`
* after some time you will see a you can use to login to the new machine. - after some time you will see a you can use to login to the new machine.
Now you can do the normal installations procedure. Now you can do the normal installations procedure.

View file

@ -32,4 +32,3 @@ nix-shell -I nixpkgs=channel:nixos-unstable -p nixos-generators
iptables -F # kill firewall iptables -F # kill firewall
python -m http.server 80 # nix-shell -p python3Full python -m http.server 80 # nix-shell -p python3Full
``` ```

View file

@ -2,12 +2,12 @@
## reset password ## reset password
* use `sfdisk -l` to list partitions - use `sfdisk -l` to list partitions
* find the partition which holds `Windows/System32/config` - find the partition which holds `Windows/System32/config`
* mount it `mkdir -p /media/sda2; mount /dev/sda2 /media/sda2` - mount it `mkdir -p /media/sda2; mount /dev/sda2 /media/sda2`
* `cd /media/sda2/Windows/System32/config` - `cd /media/sda2/Windows/System32/config`
* list SAM database `chntpw -l SAM` - list SAM database `chntpw -l SAM`
* edit SAM database `chntpw -i SAM` - edit SAM database `chntpw -i SAM`
* reboot - reboot
more details [here](https://opensource.com/article/18/3/how-reset-windows-password-linux). more details [here](https://opensource.com/article/18/3/how-reset-windows-password-linux).

View file

@ -29,6 +29,8 @@ in
enable = true; enable = true;
bars = { bars = {
my = { my = {
icons = "awesome5";
theme = "gruvbox-light";
# https://github.com/greshake/i3status-rust/blob/v0.22.0/doc/blocks.md # https://github.com/greshake/i3status-rust/blob/v0.22.0/doc/blocks.md
blocks = [ blocks = [
{ {

View file

@ -8,20 +8,11 @@ with lib;
config = mkIf (config.components.gui.style.enable) { config = mkIf (config.components.gui.style.enable) {
home-manager.users.mainUser = {
stylix.image = ../../assets/wallpaper.png;
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-light-medium.yaml"; stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-light-medium.yaml";
programs.i3status-rust.bars.my = {
icons = "awesome5";
theme = "gruvbox-light";
};
stylix.fonts = { stylix.fonts = {
serif = config.home-manager.users.mainUser.stylix.fonts.monospace; serif = config.stylix.fonts.monospace;
sansSerif = config.home-manager.users.mainUser.stylix.fonts.monospace; sansSerif = config.stylix.fonts.monospace;
monospace = { monospace = {
package = pkgs.jetbrains-mono; package = pkgs.jetbrains-mono;
name = "JetBrains Mono"; name = "JetBrains Mono";
@ -32,9 +23,6 @@ with lib;
}; };
}; };
};
fonts.fonts = with pkgs; [ fonts.fonts = with pkgs; [
corefonts corefonts

View file

@ -12,7 +12,7 @@ with lib;
./direnv.nix ./direnv.nix
./git.nix ./git.nix
./hoard.nix ./hoard.nix
./oh-my-posh.nix ./oh-my-posh
./remote-install.nix ./remote-install.nix
./wtf.nix ./wtf.nix
./zsh.nix ./zsh.nix

View file

@ -13,7 +13,8 @@ with lib;
poshConfig = { poshConfig = {
programs.oh-my-posh = { programs.oh-my-posh = {
enable = true; enable = true;
useTheme = "gruvbox"; # useTheme = "gruvbox";
settings = builtins.fromJSON (builtins.readFile ./gruvbox.json);
}; };
}; };
in in

View file

@ -0,0 +1,65 @@
{
"$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
"blocks": [
{
"alignment": "left",
"segments": [
{
"background": "#3A3A3A",
"foreground": "#ffffff",
"style": "powerline",
"template": "{{ if .WSL }}WSL at{{ end }} {{.Icon}} ",
"type": "os"
},
{
"background": "#fbf1c7",
"background_templates": ["{{ if .Root }}#af3a03{{ end }}"],
"foreground": "#282828",
"foreground_templates": ["{{ if .Root }}#fbf1c7{{ end }}"],
"powerline_symbol": "\ue0b0",
"style": "powerline",
"template": " {{ if .SSHSession }} {{ end }}{{ .HostName }} ",
"type": "session"
},
{
"background": "#458588",
"foreground": "#282828",
"powerline_symbol": "\ue0b0",
"properties": {
"style": "full"
},
"style": "powerline",
"template": " {{ .Path }} ",
"type": "path"
},
{
"background": "#98971A",
"background_templates": [
"{{ if or (.Working.Changed) (.Staging.Changed) }}#FF9248{{ end }}",
"{{ if and (gt .Ahead 0) (gt .Behind 0) }}#ff4500{{ end }}",
"{{ if gt .Ahead 0 }}#B388FF{{ end }}",
"{{ if gt .Behind 0 }}#B388FF{{ end }}"
],
"foreground": "#282828",
"leading_diamond": "\ue0b6",
"powerline_symbol": "\ue0b0",
"properties": {
"branch_max_length": 25,
"fetch_stash_count": true,
"fetch_status": true,
"branch_icon": "\uE0A0 ",
"branch_identical_icon": "\u25CF"
},
"style": "powerline",
"template": " {{ .HEAD }}{{if .BranchStatus }} {{ .BranchStatus }}{{ end }}{{ if .Working.Changed }} \uf044 {{ .Working.String }}{{ end }}{{ if and (.Working.Changed) (.Staging.Changed) }} |{{ end }}{{ if .Staging.Changed }} \uf046 {{ .Staging.String }}{{ end }}{{ if gt .StashCount 0 }} \ueb4b {{ .StashCount }}{{ end }} ",
"trailing_diamond": "\ue0b4",
"type": "git"
}
],
"type": "prompt"
}
],
"console_title_template": "{{ .Folder }}",
"final_space": true,
"version": 2
}

View file

@ -2,6 +2,8 @@
imports = [ imports = [
../../components
./hardware-configuration.nix ./hardware-configuration.nix
../../system/server ../../system/server
./disko-config.nix ./disko-config.nix
@ -48,6 +50,10 @@
]; ];
components.terminal.enable = true;
components.mainUser.enable = true;
components.gui.enable = false;
components.network.enable = true; components.network.enable = true;
components.network.wifi.enable = false; components.network.wifi.enable = false;

View file

@ -170,7 +170,9 @@ in
options.programs.custom.browser = { options.programs.custom.browser = {
enable = mkEnableOption "enable browsers"; enable = mkEnableOption "enable browsers";
# todo : it's not a list
configList = mkOption { configList = mkOption {
default = { };
type = with types; type = with types;
attrsOf (submodule ({ name, ... }: { attrsOf (submodule ({ name, ... }: {
options = { options = {

View file

@ -1,4 +1,3 @@
# how to build and test # how to build and test
``` ```

87
scripts/json2nix.py Normal file
View file

@ -0,0 +1,87 @@
"""
Converts JSON objects into nix (hackishly).
https://gist.github.com/Scoder12/0538252ed4b82d65e59115075369d34d
"""
import sys
import json
INDENT = " " * 2
def strip_comments(t):
# fixme: doesn't work if JSON strings contain //
return "\n".join(l.partition("//")[0] for l in t.split("\n"))
def indent(s):
return "\n".join(INDENT + i for i in s.split("\n"))
def nix_stringify(s):
# fixme: this doesn't handle string interpolation and possibly has more bugs
return json.dumps(s)
def sanitize_key(s):
if s and s.isalnum() and not s[0].isdigit():
return s
return nix_stringify(s)
def flatten_obj_item(k, v):
keys = [k]
val = v
while isinstance(val, dict) and len(val) == 1:
k = next(iter(val.keys()))
keys.append(k)
val = val[k]
return keys, val
def fmt_object(obj, flatten):
fields = []
for k, v in obj.items():
if flatten:
keys, val = flatten_obj_item(k, v)
formatted_key = ".".join(sanitize_key(i) for i in keys)
else:
formatted_key = sanitize_key(k)
val = v
fields.append(f"{formatted_key} = {fmt_any(val, flatten)};")
return "{\n" + indent("\n".join(fields)) + "\n}"
def fmt_array(o, flatten):
body = indent("\n".join(fmt_any(i, flatten) for i in o))
return f"[\n{body}\n]"
def fmt_any(o, flatten):
if isinstance(o, str) or isinstance(o, bool) or isinstance(o, int):
return json.dumps(o)
if isinstance(o, list):
return fmt_array(o, flatten)
if isinstance(o, dict):
return fmt_object(o, flatten)
raise TypeError(f"Unknown type {type(o)!r}")
def main():
flatten = "--flatten" in sys.argv
args = [a for a in sys.argv[1:] if not a.startswith("--")]
if len(args) < 1:
print(f"Usage: {sys.argv[0]} [--flatten] <file.json>", file=sys.stderr)
sys.exit(1)
with open(args[0], "r") as f:
data = json.loads(strip_comments(f.read()))
print(fmt_any(data, flatten=flatten))
if __name__ == "__main__":
main()

View file

@ -2,6 +2,6 @@
This example shows how you could use terranix as flake. This example shows how you could use terranix as flake.
* `nix run` run `nix run ".#apply"` - `nix run` run `nix run ".#apply"`
* `nix run ".#apply"` run `terraform apply` - `nix run ".#apply"` run `terraform apply`
* `nix run ".#destroy"` run `terraform destroy` - `nix run ".#destroy"` run `terraform destroy`

View file

@ -2,9 +2,9 @@
This setup shows: This setup shows:
* how to use a terranix module - how to use a terranix module
* how to use 3rd party provision software after terraform. - how to use 3rd party provision software after terraform.
* how to run terranix and terraform - how to run terranix and terraform
Setup containing opinionated modules to deploy Setup containing opinionated modules to deploy
[NixOS servers](https://nixos.org/) [NixOS servers](https://nixos.org/)
@ -34,22 +34,21 @@ here (e.g. NixOps, Ansible, ... )
## What you need ## What you need
* a setup [passwordstore](https://www.passwordstore.org/). - a setup [passwordstore](https://www.passwordstore.org/).
* a [hcloud token](https://docs.hetzner.cloud/#overview-getting-started) - a [hcloud token](https://docs.hetzner.cloud/#overview-getting-started)
stored under `development/hetzner.com/api-token` stored under `development/hetzner.com/api-token`
## Steps ## Steps
* `terraform-prepare`: to create ssh keys. - `terraform-prepare`: to create ssh keys.
* `terraform-build`: to run terranix and terraform do create server. - `terraform-build`: to run terranix and terraform do create server.
* `terraform-destroy`: to delete server (don't forget that step, or else it gets costly) - `terraform-destroy`: to delete server (don't forget that step, or else it gets costly)
* `terraform-cleanup`: to delete ssh keys and terraform data. - `terraform-cleanup`: to delete ssh keys and terraform data.
## DNS ## DNS
define domains with your nameserver and update `jitsi.nix` and `workadventure.nix`. define domains with your nameserver and update `jitsi.nix` and `workadventure.nix`.
* `meet.${domain}` to given ip4 address - `meet.${domain}` to given ip4 address
* `party.${domain}` to given ip4 address - `party.${domain}` to given ip4 address
* `*.party.${domain}` to given ip4 address - `*.party.${domain}` to given ip4 address

View file

@ -1,4 +1,3 @@
A setup to test tinc on a hetzner box A setup to test tinc on a hetzner box
# steps # steps

View file

@ -2,9 +2,9 @@
This setup shows: This setup shows:
* how to use a terranix module - how to use a terranix module
* how to use 3rd party provision software after terraform. - how to use 3rd party provision software after terraform.
* how to run terranix and terraform - how to run terranix and terraform
Setup containing opinionated modules to deploy Setup containing opinionated modules to deploy
[NixOS servers](https://nixos.org/) [NixOS servers](https://nixos.org/)
@ -34,22 +34,21 @@ here (e.g. NixOps, Ansible, ... )
## What you need ## What you need
* a setup [passwordstore](https://www.passwordstore.org/). - a setup [passwordstore](https://www.passwordstore.org/).
* a [hcloud token](https://docs.hetzner.cloud/#overview-getting-started) - a [hcloud token](https://docs.hetzner.cloud/#overview-getting-started)
stored under `development/hetzner.com/api-token` stored under `development/hetzner.com/api-token`
## Steps ## Steps
* `terraform-prepare`: to create ssh keys. - `terraform-prepare`: to create ssh keys.
* `terraform-build`: to run terranix and terraform do create server. - `terraform-build`: to run terranix and terraform do create server.
* `terraform-destroy`: to delete server (don't forget that step, or else it gets costly) - `terraform-destroy`: to delete server (don't forget that step, or else it gets costly)
* `terraform-cleanup`: to delete ssh keys and terraform data. - `terraform-cleanup`: to delete ssh keys and terraform data.
## DNS ## DNS
define domains with your nameserver and update `jitsi.nix` and `workadventure.nix`. define domains with your nameserver and update `jitsi.nix` and `workadventure.nix`.
* `meet.${domain}` to given ip4 address - `meet.${domain}` to given ip4 address
* `party.${domain}` to given ip4 address - `party.${domain}` to given ip4 address
* `*.party.${domain}` to given ip4 address - `*.party.${domain}` to given ip4 address

View file

@ -23,3 +23,13 @@ excludes = ["./scripts/hetzner-dedicated-wipe-and-install-nixos.sh"]
[formatter.python] [formatter.python]
command = "black" command = "black"
includes = ["*.py"] includes = ["*.py"]
[formatter.media]
command = "prettier"
options = ["--write"]
includes = [
"*.json",
"*.md",
"*.yaml",
"*.yml",
]