My self-hosting infrastructure, fully automated from empty disk to operating services

Overview

Khue's Homelab

chat tag document license stars

Current status: ALPHA

This project utilizes Infrastructure as Code to automate provisioning, operating, and updating self-hosted services in my homelab. It can be used as a highly customizable framework to build your own homelab.

Overview

This section provides a high level overview of the project. For further information, please see the documentation.

Hardware

Hardware

  • 4 × NEC SFF PC-MK26ECZDR (Japanese version of the ThinkCentre M700):
    • CPU: Intel Core i5-6600T @ 2.70GHz
    • RAM: 16GB
    • SSD: 128GB
  • TP-Link TL-SG108 switch:
    • Ports: 8
    • Speed: 1000Mbps

Features

Project status: Alpha (see roadmap below)

  • Common applications: Gitea, Seafile, Jellyfin, Paperless...
  • Automated bare metal provisioning with PXE boot
  • Automated Kubernetes installation and management
  • Installing and managing applications using GitOps
  • Modular architecture, easy to add or remove features/components
  • Automated certificate management
  • Automatically update DNS records for exposed services
  • Expose services to the internet securely with Cloudflare Tunnel
  • CI/CD platform
  • Private container registry
  • Distributed storage
  • Monitoring and alerting 🚧
  • Support multiple environments (dev, stag, prod) 🚧
  • Automated offsite backups 🚧
  • Single sign-on 🚧

Screenshots of some user-facing applications are shown here, I will update them before each release. They can't capture all of the project's features, but they are sufficient to get a concept of it.

Homepage with Ingress discovery powered by Hajimari
Git server powered by Gitea
Continuous integration with Tekton
Continuous deployment with ArgoCD
Monitoring dashboard powered by Grafana
Matrix chat server powered by Element and Dendrite
Cluster management using Lens (or you can just use kubectl)
Secret management with Vault

Tech stack

Logo Name Description
Ansible Automate bare metal provisioning and configuration
ArgoCD GitOps tool built to deploy applications to Kubernetes
cert-manager Cloud native certificate management
Cloudflare DNS and Tunnel
Docker Ephermeral PXE server and convenient tools container
Gitea Self-hosted Git service
Grafana Operational dashboards
Helm The package manager for Kubernetes
K3s Lightweight distribution of Kubernetes
Kubernetes Container-orchestration system, the backbone of this project
Loki Log aggregation system
Longhorn Cloud native distributed block storage for Kubernetes
MetalLB Bare metal load-balancer for Kubernetes
NGINX Kubernetes Ingress Controller
Prometheus Systems monitoring and alerting toolkit
Rocky Linux Base OS for Kubernetes nodes
Tekton Cloud native solution for building CI/CD systems
Trow Private container registry
Vault Secrets and encryption management system

Get Started

Roadmap

See roadmap and open issues for a list of proposed features and known issues.

Contributing

Any contributions you make, either big or small, are greatly appreciated.

License

Copyright (c) 2020, 2021, 2022 Khue Doan

Distributed under the GPLv3 License.

This project is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This project is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this project (LICENSE.md). If not, see https://www.gnu.org/licenses.

Acknowledgements

Stargazers over time

Stargazers over time

Comments
  • PXE Not booting, what is the default bios filename to boot?

    PXE Not booting, what is the default bios filename to boot?

    Thanks for sharing your config :)

    I wondered what the default boot image menu is for the pxe server you are using, as I cannot get the machines to see the default menu / boot image for pxe.

    Thanks

    question 
    opened by mannp 11
  • configure.py error

    configure.py error "TypeError: 'type' object is not subscriptable"

    python3 ./configure.py

    Text editor (vim): Enter your domain (khuedoan.com): Enter seed repo (https://github.com/khuedoan/homelab): Enter time zone (Asia/Ho_Chi_Minh): Enter your Terraform Workspace, skip if you don't want to use external resources yet (khuedoan): Traceback (most recent call last): File "./configure.py", line 27, in def find_and_replace(pattern: str, replacement: str, paths: list[str]) -> None: TypeError: 'type' object is not subscriptable

    bug enhancement 
    opened by bpersino 10
  • dhcpd.conf template does not render

    dhcpd.conf template does not render

    I'm working through your netboot solution, and I have an interesting issue where dhcpd.conf.j2 does not render properly (no variables are substituted). All of the other templates work just fine, and the variables used in dhcpd.conf.j2 are available if I run a debug step:

    # all variables are present with correct values
    - debug:
        var: '{{item}}'
      with_items:
        - ansible_default_ipv4.address
        - ansible_default_ipv4.broadcast
        - ansible_default_ipv4.gateway
        - ansible_default_ipv4.netmask
        - ansible_default_ipv4.network
    
    # no substitution occurs
    - name: Render DHCP config
      template:
        src: dhcpd.conf.j2
        dest: "{{ role_path }}/files/dhcp/dhcpd.conf"
        mode: 0644
    
    # substitution occurs correctly
    - name: Render GRUB config
      template:
        src: grub.cfg.j2
        dest: "{{ role_path }}/files/data/boot/grub/grub.cfg"
        mode: 0644
    

    Do you have any thoughts?

    opened by ahgraber 9
  • how do you manage Data in case of cluster rebuild

    how do you manage Data in case of cluster rebuild

    HI I'am new in kubernetes, I ask myself some question on restauration/secret management if you could help me

    • in case of rebuild cluster how to restore data on database or reuse persistant volume?
    • if I uninstall and install helm release this will generate new secret not according with database current password how do you manage this?
    • I can maybe create some custom secret resource to avoid this but what is best method to create this one?
    opened by vincentDcmps 9
  • Have you ever considered moving from k3 to k3os?

    Have you ever considered moving from k3 to k3os?

    First, great work and your setup is really something I hope I can achieve one day (or at least fraction of it) :)

    I have a question as title says. Have you ever consider moving from k3 on Rocky Linux to pure k3os and remove one layer of complexity (setting up os and then setting up k3?

    Keep up the great work!

    Michal

    opened by mwasowski 8
  • Rocky 8.6 kickstart stalls with root password issue

    Rocky 8.6 kickstart stalls with root password issue

    Describe the bug

    Deploying with the Rocky 8.6 issues stalls complaining of Root account is disable.

    • [x] I have read the document

    To reproduce

    Steps to reproduce the behavior:

    1. Run make tools, make configure, supply info for your environment
    2. Run make
    3. During kickstart installation stalls with "Root account is disabled"

    Expected behavior

    Kickstart should continue normally, without user intervention.

    Screenshots

    image

    Additional context

    You can move past this error by selecting option 8, providing a password and then selecting b to begin installation.. Installation will complete but will also require user to press enter once installation is complete. Supplying a root password in the kickstart template below, appears to allow the installation to complete as expected.

    /homelab/blob/master/metal/roles/pxe_server/templates/kickstart.ks.j2

    using the following line:

    rootpw --iscrypted <hashed password>

    where hashed password is created using something like:

    python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'

    bug 
    opened by anothercloudnative 7
  • Building the tools containers to the test VM for the dev environment

    Building the tools containers to the test VM for the dev environment

    When I run:

    make tools to build the image based on Arch distribution I get this error and the image bulding stops, trying to troubleshooting,without results.

    Step 2/4 : RUN pacman --sync --refresh --noconfirm reflector && reflector --save /etc/pacman.d/mirrorlist --protocol https --latest 20 --sort rate ---> Running in 4687b34d956a error: failed to initialize alpm library: (root: /, dbpath: /var/lib/pacman/) could not find or read directory

    question 
    opened by recarmona 7
  • Unable to access resources behind cloudflared.

    Unable to access resources behind cloudflared.

    Describe the bug

    A clear and concise description of what the bug is.

    • [x] I have read the document

    To reproduce

    Steps to reproduce the behavior:

    1. Follow the instructions on the repo to deploy the lab and run the external layer.

    Expected behavior

    Access the lab via my domain.

    Screenshots

    If applicable, add screenshots to help explain your problem.

    Additional context

    I can get to the the hajimari page and see resources found on the apps folder. Argocd & git are not working. I get a cloudflared error( 1033)

    bug 
    opened by cheers1999 6
  • Tools: volume mount relative to Makefile

    Tools: volume mount relative to Makefile

    Current volume mount assumes all files are contained in your home directory. I assume you wanted people to run make tools and then make inside the docker. This PR drops them right into the files they would need for this.

    First it determines the absolute path to the parent directory (project root) of the Makefile. Then we mount the project root directory (instead of the user's home) into the docker user's home and also use it as workdir.

    opened by karpfediem 6
  • "Bring your own cluster" mode

    Hey there!

    I've got a Kubernetes cluster I've deployed myself, and am not hugely keen on PXE booting. It would be super awesome if there was a way to use this project while skipping past the PXE boot and provisioning stuff.

    In fact, there basically is already a way! Copy your kube configs into place, then...

    make -C bootstrap instead of make, and bam... you've got a khuedoan homelab, kind of.

    Maybe you could have a target like "make existing-cluster" or something which officially supports this deployment method?

    opened by Zorlin 6
  • Feature Proposal: Automatically update helm chart dependencies

    Feature Proposal: Automatically update helm chart dependencies

    Manually keeping all dependencies up to date can be a time consuming task which can easily be automated.

    One possible solution for this is renovatebot which periodically checks for new versions and can create a pull request for each update found.

    It can easily be deployed on kubernetes via helm and works with gitea out of the box.

    enhancement good first issue 
    opened by koeberlue 6
  • Development sandbox make fails

    Development sandbox make fails

    Hello!

    I created a virtualbox to test dev environment and even with docker tools even with nix-shell tried many times in clean install at step "make"

    i get the following error:

    1st time running make

    INFO[0051] Cluster 'homelab-dev' created successfully!  
    INFO[0051] You can now use it like this:                
    kubectl cluster-info
    k3d kubeconfig get homelab-dev > kubeconfig.yaml
    make[1]: Leaving directory '/home/vip/homelab/metal'
    make -C bootstrap
    make[1]: Entering directory '/home/vip/homelab/bootstrap'
    kubectl create namespace argocd --dry-run=client --output=yaml \
            | kubectl apply -f -
    namespace/argocd created
    cd argocd && ./apply.sh
    error: error validating "STDIN": error validating data: invalid object to validate; if you choose to ignore these errors, turn validation off with --validate=false
    Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "applications.argoproj.io" not found
    Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "applicationsets.argoproj.io" not found
    make[1]: *** [Makefile:11: argocd] Error 1
    make[1]: Leaving directory '/home/vip/homelab/bootstrap'
    make: *** [Makefile:18: bootstrap] Error 2
    
    

    2nd time trying running make

    statefulset.apps/argocd-application-controller created
    ingress.networking.k8s.io/argocd-server created
    resource mapping not found for name: "argocd-application-controller" namespace: "" from "STDIN": no matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
    ensure CRDs are installed first
    resource mapping not found for name: "argocd-repo-server" namespace: "" from "STDIN": no matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
    ensure CRDs are installed first
    resource mapping not found for name: "argocd-server" namespace: "" from "STDIN": no matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
    ensure CRDs are installed first
    resource mapping not found for name: "argocd-redis" namespace: "" from "STDIN": no matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
    ensure CRDs are installed first
    customresourcedefinition.apiextensions.k8s.io/applications.argoproj.io condition met
    customresourcedefinition.apiextensions.k8s.io/applicationsets.argoproj.io condition met
    cd root && ./apply.sh
    Error from server (NotFound): namespaces "gitea" not found
    applicationset.argoproj.io/bootstrap created
    applicationset.argoproj.io/system created
    applicationset.argoproj.io/platform created
    applicationset.argoproj.io/apps created
    make[1]: Leaving directory '/home/vip/homelab/bootstrap'
    make -C test filter=Smoke
    make[1]: Entering directory '/home/vip/homelab/test'
    gotestsum --format testname -- -timeout 30m -run "Smoke"
    go: downloading github.com/khuedoan/terratest v0.0.0-20220921151310-016fe8e1536b
    ...
    ...
    ...
    

    continuing after few minutes make fails.

    If you need any other details ill be happy to send you and help fix it.

    bug 
    opened by MCP-LTS 7
  • Tekton doesn't seem to work or be configured by default

    Tekton doesn't seem to work or be configured by default

    Describe the bug

    It seems that tekton pipelines want to run as root, but the permissions aren't there.

    • [X] I have read the document

    To reproduce

    Steps to reproduce the behavior:

    1. Install
    2. go to tekton.<domain_name>
    3. Everything is empty
    4. trying to import from the web interface fails with the first error in Additional context
    5. kubectl apply -k .ci/ fails on check-git-files-changed.yaml having v1alpha1
    6. change check-git-files-changed.yaml to be v1beta1
    7. kubectl apply -k .ci/ succeeds
    8. go to web interface, see second error on run
    9. try to run again via the web interface, get third error on run

    Expected behavior

    That CI would be set up with normal install

    Additional context

    completionTime: '2022-11-29T10:26:59Z'
    conditions:  - lastTransitionTime: '2022-11-29T10:26:59Z'
        message: 'failed to create task run pod "import-resources-1669717619307-import-resources": pods "import-resources-1669717619307-import-resources-pod" is forbidden: violates PodSecurity "restricted:latest": allowPrivilegeEscalation != false (containers "prepare", "step-git-source-git-source-djgcj", "step-import" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (containers "prepare", "step-git-source-git-source-djgcj", "step-import" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or containers "prepare", "step-git-source-git-source-djgcj", "step-import" must set securityContext.runAsNonRoot=true), runAsUser=0 (container "step-git-source-git-source-djgcj" must not set runAsUser=0), seccompProfile (pod or containers "prepare", "step-git-source-git-source-djgcj", "step-import" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost"). Maybe invalid TaskSpec'
        reason: CouldntGetTask
        status: 'False'
        type: Succeeded
    podName: ''
    startTime: '2022-11-29T10:26:59Z'
    taskSpec:  params:    - default: .
          description: The path from which resources are to be imported
          name: path
          type: string
        - default: tekton-pipelines
          description: The namespace in which to create the resources being imported
          name: target-namespace
          type: string
      resources:    inputs:      - name: git-source
            type: git
      steps:    - args:        - apply
            - '-f'
            - $(resources.inputs.git-source.path)/.ci
            - '-n'
            - tektontutorial
          command:        - kubectl
          image: lachlanevenson/k8s-kubectl:latest
          name: import
          resources: {}
    
    Pipeline tekton-pipelines/homelab can't be Run; it contains Tasks that don't exist: Couldn't retrieve Task "kaniko": tasks.tekton.dev "kaniko" not found
    
    conditions:  - lastTransitionTime: '2022-11-29T10:36:23Z'
        message: 'failed to create task run pod "homelab-r-h2wgf-git-clone": pods "homelab-r-h2wgf-git-clone-pod" is forbidden: violates PodSecurity "restricted:latest": allowPrivilegeEscalation != false (containers "prepare", "place-scripts", "step-clone" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (containers "prepare", "place-scripts", "step-clone" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or containers "prepare", "place-scripts", "step-clone" must set securityContext.runAsNonRoot=true), seccompProfile (pod or containers "prepare", "place-scripts", "step-clone" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost"). Maybe missing or invalid Task tekton-pipelines/git-clone'
        reason: CouldntGetTask
        status: 'False'
        type: Succeeded
    
    conditions:  - lastTransitionTime: '2022-11-29T10:46:00Z'
        message: 'failed to create task run pod "homelab-git-clone": pods "homelab-git-clone-pod" is forbidden: violates PodSecurity "restricted:latest": allowPrivilegeEscalation != false (containers "prepare", "place-scripts", "step-clone" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (containers "prepare", "place-scripts", "step-clone" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or containers "prepare", "place-scripts", "step-clone" must set securityContext.runAsNonRoot=true), seccompProfile (pod or containers "prepare", "place-scripts", "step-clone" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost"). Maybe missing or invalid Task tekton-pipelines/git-clone'
        reason: CouldntGetTask
        status: 'False'
        type: Succeeded
    
    bug 
    opened by ClashTheBunny 1
  • Switching chart provider

    Switching chart provider

    Hi there

    As the k8s-at-home charts are marked as deprecated / archived and wont get updated regularly, i propose we switch to something that still is maintained for the default app-stack.

    I mainly played around with a combination of https://github.com/truecharts and linuxserver.io images where i didnt found a suitable image. I mostly had good results and more up to date apps.

    If you would like me to get some of the apps ported over, i will gladly make some pull requests.

    Best regards gitbute

    opened by gitbute 2
  • docs: add SELinux note in prerequisites

    docs: add SELinux note in prerequisites

    • fix #90 via documentation
    • added myself as contributor

    I'm not 100% certain why the prerequisites.md file appears fully 're-written'. I suspect it's related to line endings. It's always line endings...

    opened by JamesPGriffith 0
  • make tools

    make tools "error: getting status of shell.nix: Permission denied"

    Describe the bug

    Unable to execute 'make tools'.

    • [X] I have read the document

    To reproduce

    Steps to reproduce the behavior:

    1. Follow documentation to make tools
    2. Observe error error: getting status of shell.nix: Permission denied
    3. attempt to run the tools command manually
    4. See error -bash: shell: command not found

    Expected behavior

    Build the tools container environment

    Screenshots

    Meh, it's all txt at this point...

    Additional context

    Add any other context about the problem here (hardware, OS, etc.).

    Hardware

    [[email protected] homelab]$ neofetch
                 .',;::::;,'.
             .';:cccccccccccc:;,.            [email protected]
          .;cccccccccccccccccccccc;.         -------------------
        .:cccccccccccccccccccccccccc:.       OS: Fedora Linux 36 (Server Edition) x86_64
      .;ccccccccccccc;.:dddl:.;ccccccc;.     Host: 2447AC4 ThinkPad W530
     .:ccccccccccccc;OWMKOOXMWd;ccccccc:.    Kernel: 5.19.10-200.fc36.x86_64
    .:ccccccccccccc;KMMc;cc;xMMc:ccccccc:.   Uptime: 1 hour
    ,cccccccccccccc;MMM.;cc;;WW::cccccccc,   Packages: 1048 (rpm)
    :cccccccccccccc;MMM.;cccccccccccccccc:   Shell: bash 5.1.16
    :ccccccc;oxOOOo;MMM0OOk.;cccccccccccc:   Resolution: 1600x900
    cccccc:0MMKxdd:;MMMkddc.;cccccccccccc;   Terminal: /dev/pts/0
    ccccc:XM0';cccc;MMM.;cccccccccccccccc'   CPU: Intel i7-3740QM (8) @ 3.700GHz
    ccccc;MMo;ccccc;MMW.;ccccccccccccccc;    GPU: NVIDIA Quadro K1000M
    ccccc;0MNc.ccc.xMMd:ccccccccccccccc;     GPU: Intel 3rd Gen Core processor Graphics Controller
    cccccc;dNMWXXXWM0::cccccccccccccc:,      Memory: 466MiB / 15814MiB
    cccccccc;.:odl:.;cccccccccccccc:,.
    :cccccccccccccccccccccccccccc:'.                                 
    .:cccccccccccccccccccccc:;,..                                    
      '::cccccccccccccc::;,.
    
    
    [[email protected] homelab]$
    

    OS Details

    As the nodes will be provisioned with Fedora, I chose Fedora for the Initial controller for consistency. Even the same version.

    [[email protected] homelab]$ cat /etc/os-release
    NAME="Fedora Linux"
    VERSION="36 (Server Edition)"
    ID=fedora
    VERSION_ID=36
    VERSION_CODENAME=""
    PLATFORM_ID="platform:f36"
    PRETTY_NAME="Fedora Linux 36 (Server Edition)"
    ANSI_COLOR="0;38;2;60;110;180"
    LOGO=fedora-logo-icon
    CPE_NAME="cpe:/o:fedoraproject:fedora:36"
    HOME_URL="https://fedoraproject.org/"
    DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f36/system-administrators-guide/"
    SUPPORT_URL="https://ask.fedoraproject.org/"
    BUG_REPORT_URL="https://bugzilla.redhat.com/"
    REDHAT_BUGZILLA_PRODUCT="Fedora"
    REDHAT_BUGZILLA_PRODUCT_VERSION=36
    REDHAT_SUPPORT_PRODUCT="Fedora"
    REDHAT_SUPPORT_PRODUCT_VERSION=36
    PRIVACY_POLICY_URL="https://fedoraproject.org/wiki/Legal:PrivacyPolicy"
    VARIANT="Server Edition"
    VARIANT_ID=server
    [[email protected] homelab]$
    

    user and groups

    [[email protected] homelab]$ id
    uid=1000(user) gid=1000(user) groups=1000(user),10(wheel),984(docker) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    [[email protected] homelab]$
    

    Original error

    [[email protected] homelab]$ make tools
    error: getting status of shell.nix: Permission denied
    make: *** [Makefile:30: tools] Error 1
    [[email protected] homelab]$
    

    SELinux

    I honestly think this is it...

    [[email protected] homelab]$ sestatus
    SELinux status:                 enabled
    SELinuxfs mount:                /sys/fs/selinux
    SELinux root directory:         /etc/selinux
    Loaded policy name:             targeted
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy MLS status:              enabled
    Policy deny_unknown status:     allowed
    Memory protection checking:     actual (secure)
    Max kernel policy version:      33
    [[email protected] homelab]$
    
    bug 
    opened by JamesPGriffith 4
  • Serverless

    Serverless

    It would be nice to have something serverless, like knative.dev , or one of the other CNCF options: https://landscape.cncf.io/card-mode?category=serverless&license=open-source&grouping=category&sort=stars

    opened by ClashTheBunny 1
Releases(v0.0.8)
  • v0.0.8(Jul 26, 2022)

    What's Changed

    • build: run post install scripts by default
    • build: set KUBECONFIG from global Makefile
    • feat(external-dns)!: add cluster name as owner ID
    • feat(tools): install yamllint, ansible-lint and k9s
    • feat(tools): set KUBECONFIG by default
    • feat: add pre-commit hooks
    • feat: add script to setup Gitea tokens and OAuth apps
    • perf(argocd): turning on selective sync
    • refactor(docs): migrate to mkdocs
    • refactor(metal): migrate to Fedora 36 for newer packages
    • refactor(pxe)!: combine dhcpd and tftpd to dnsmasq
    • Many bug fixes

    New Contributors

    • @Bourne-ID made their first contribution in https://github.com/khuedoan/homelab/pull/69

    Full Changelog: https://github.com/khuedoan/homelab/compare/v0.0.7-alpha...v0.0.8

    Source code(tar.gz)
    Source code(zip)
  • v0.0.7-alpha(May 14, 2022)

    What's Changed

    https://homelab.khuedoan.com/reference/changelog/#007-alpha

    • Replace standard Vault with Vault Operator
    • Automatically initialize and unseal Vault
    • Declarative secret generation and management
    • Declarative Gitea configuration with YAML
    • Automatic OS rolling upgrade
    • Automatic Kubernetes rolling upgrade
    • Automatic application updates using Renovate (still require manual token generation)
    • Add script to wait for essential services after deployment
    • Add icons and bookmarks to the home page
    • Deploy Matrix chat
    • Replace Authentik with Dex for SSO (still require manual token generation)
    • Switch to Mermaid for diagrams in documentation
    • Replace Vagrant with k3d for development environment
    • Use nip.io domain for development environment
    • Remove Backblaze (S3 Glacier and/or Minio will be added in future version)
    • Enable monitor for the majority of applications
    • Many code refactorings and bug fixes

    New Contributors

    • @locmai made their first contribution in https://github.com/khuedoan/homelab/pull/5
    • @MatthewJohn made their first contribution in https://github.com/khuedoan/homelab/pull/12
    • @karpfediem made their first contribution in https://github.com/khuedoan/homelab/pull/36
    • @linhng98 made their first contribution in https://github.com/khuedoan/homelab/pull/41
    • @BlueHatbRit made their first contribution in https://github.com/khuedoan/homelab/pull/44
    • @dotdiego made their first contribution in https://github.com/khuedoan/homelab/pull/49
    • @Crimrose made their first contribution in https://github.com/khuedoan/homelab/pull/51
    • @eventi made their first contribution in https://github.com/khuedoan/homelab/pull/55

    Full Changelog: https://github.com/khuedoan/homelab/commits/v0.0.7-alpha

    Source code(tar.gz)
    Source code(zip)
Owner
Khue Doan
Site Reliability Engineer
Khue Doan
Uses the Duke Energy Gateway to import near real time energy usage into Home Assistant

Duke Energy Gateway This is a custom integration for Home Assistant. It pulls near-real-time energy usage from Duke Energy via the Duke Energy Gateway

Michael Meli 28 Dec 23, 2022
Python implementation of ZMP Preview Control approach for biped robot control.

ZMP Preview Control This is the Python implementation of ZMP Preview Control app

Chaobin 24 Dec 19, 2022
rPico KMK powered macropad with IPS screen

MacroPact rPico KMK powered macropad with IPS screen Idea/Desing: Sean Yin Build/Coding: kbjunky ( In case of any problems hit me up on Discord kbjunk

81 Dec 21, 2022
The goal of this project is for anyone with an old printer to be able to double-sided printing.

Welcome to PDF-double-side! Hi! I'm 15. I have a old printer so I can't print double-sided outs. The goal of this project is for anyone with an old pr

DejaVu 4 Dec 28, 2021
Watson-Assistant with integration capabilities

Watson-Assistant-Integration Watson-Assistant with integration capabilities "main.py" should be deployed as Cloud Function (Action) on IBM Cloud. For

Sergey Usachev 1 Dec 20, 2021
智能无人机路径规划仿真系统是一个具有操作控制精细、平台整合性强、全方向模型建立与应用自动化特点的软件

Drone智能无人机路径规划仿真系统是一个具有操作控制精细、平台整合性强、全方向模型建立与应用自动化特点的软件。它以A、B两国在C区开展无人机战争为背景,该系统的核心功能是通过仿真平台规划无人机航线,并进行验证输出,数据可导入真实无人机,使其按照规定路线精准抵达战场任一位置,支持多人多设备编队联合行动。

wwy 349 Jan 03, 2023
Smart Tech Automation Remote via Kinematics Gesture control for IoT devices

STARK Smart Tech Automation Remote via Kinematics Gesture control for IoT devices View Demo · Report Bug · Request Feature Table of Contents About The

Juseong (Joe) Kim 1 Jan 29, 2022
Python script: Enphase Envoy mqtt json for Home Assistant

A Python script that takes a real time stream from Enphase Envoy and publishes to a mqtt broker. This can then be used within Home Assistant or for other applications. The data updates at least once

29 Dec 27, 2022
The PicoEMP is a low-cost Electromagnetic Fault Injection (EMFI) tool,

ChipSHOUTER-PicoEMP The PicoEMP is a low-cost Electromagnetic Fault Injection (EMFI) tool, designed specifically for self-study and hobbiest research.

NewAE Technology Inc. 312 Jan 07, 2023
Resmed_myair_sensors - This is a Home Assistant custom component to pull daily CPAP data from ResMed's myAir service using an undocumented API

resmed_myair This component will set up the following platforms. Platform Description sensor Show info from the myAir API. Installation Using the tool

Preston Tamkin 17 Dec 29, 2022
Point Density-Aware Voxels for LiDAR 3D Object Detection (CVPR 2022)

PDV PDV is LiDAR 3D object detection method. This repository is based off [OpenPCDet]. Point Density-Aware Voxels for LiDAR 3D Object Detection Jordan

Toronto Robotics and AI Laboratory 114 Dec 21, 2022
Add filters (background blur, etc) to your webcam on Linux.

webcam-filters Add filters (background blur, etc) to your webcam on Linux. Video conferencing applications tend to either lack video effects altogethe

Jashandeep Sohi 480 Dec 14, 2022
Pinion — Nice-looking interactive diagrams for KiCAD PCBs

Pinion — Nice-looking interactive diagrams for KiCAD PCBs Pinion is a simple tool that allows you to make a nice-looking pinout diagrams for your PCBs

Jan Mrázek 297 Jan 06, 2023
BoneIO is a compact IO controller for home automation.

Project description BoneIO is a compact IO controller for home automation. Main features of this controller are Compact size (27x11x6)cm - 15 DIN modu

Maciej Krasuski 120 Nov 30, 2022
Doughskript interpreter for converting simple command sequences into executable Arduino C++ code.

Doughskript interpreter for converting simple command sequences into executable Arduino C++ code.

Svjatoslav 2 Jan 11, 2022
Micropython automatic watering

micropython-automatic-watering micropython automatic watering his code was developed to be used with nodemcu esp8266, but can be modified to work with

1 Nov 24, 2021
Home-Assistant MQTT bridge for Panasonic Comfort Cloud

Panasonic Comfort Cloud MQTT Bridge Home-Assistant MQTT bridge for Panasonic Comfort Cloud. Note: Currently this brige is a one evening prototype proj

Santtu Järvi 2 Jan 04, 2023
A custom mechanical keyboard inspired by the CFTKB Mysterium

Env-KB A custom mechanical keyboard inspired by the CFTKB Mysterium Build Guide and Parts List What is to do? Right now for the first 5 PCBs I have, i

EnviousData 203 Jan 04, 2023
A global contest to grow and monitor your own food with Raspberry Pi

growlab A global contest to grow and monitor your own food with Raspberry Pi A capture from phototimer of my seed tray with a wide-angle camera positi

Alex Ellis 442 Dec 23, 2022
BMP180 sensor driver for Home Assistant used in Raspberry Pi

BMP180 sensor driver for Home Assistant used in Raspberry Pi Custom component BMP180 sensor for Home Assistant. Copy the content of this directory to

747Developments 1 Dec 17, 2021