Git Product home page Git Product logo

shabka's Introduction

Table of Contents

Shabka

Shabka (Arabic for Network) is a declarative congruent representation of my workstations (desktops, and laptops), network devices and servers. It's based on the NixOS operating system, and uses home-manager to setup the home directory of the users, for both NixOS and the other operating systems, including Mac.

See What is "declarative congruence"? for more information on the subject.

Why Nix?

Nix is a powerful package manager for Linux and other Unix systems that makes package management reliable and reproducible. It provides atomic upgrades and rollbacks, side-by-side installation of multiple versions of a package, multi-user package management and easy setup of build environments. Read more…

Packages are built from Nix expressions, which is a simple functional language. A Nix expression describes everything that goes into a package build action (a “derivation”): other packages, sources, the build script, environment variables for the build script, etc. Nix tries very hard to ensure that Nix expressions are deterministic: building a Nix expression twice should yield the same result.

Because it's a functional language, it's easy to support building variants of a package: turn the Nix expression into a function and call it any number of times with the appropriate arguments. Due to the hashing scheme, variants don't conflict with each other in the Nix store.

Nix has a large set of Nix expressions containing thousands of existing Unix packages, in the Nix Packages collection (Nixpkgs).

Why NixOS?

NixOS is a Linux distribution with a unique approach to package and configuration management. Built on top of the Nix package manager, it is completely declarative, makes upgrading systems reliable, and has many other advantages.

Similar to Nix, NixOS is built upon the concept of atomic system updates as well as rollbacks, and that includes the kernel and the initrd images for early boot.

You simply cannot find yourself on a system that does not boot anymore, provided the hardware is not defective and you have not broken GRUB or Systemd-boot.

Please see the NixOS about page for a quick taste of managing a NixOS system.

Documentation

Please see doc/modules for documentation on all the supported options.

Shabka structure

Directory Description
overlays package and module overrides used throughout the configuration.
scripts various development scripts to help with the development.
external Nix expressions for fetching externals such as nixos-hardware.
hosts top-level expressions specific to individual workstations or servers.
modules/nixos custom NixOS modules under the shabka namespace controlled by host configuration.
modules/home custom home-manager modules under the shabka namespace controlled by host configuration.
util Nix expressions, mainly functions, used as helpers in the actual modules.
os-specific OS-specific configuration files, and bootstrap scripts not belonging to NixOS or the home-manager.
libexec development helpers, mainly used by the scripts (not invoked directly).
network top-level expressions describing a NixOps network.
terraform cloud-resources that are not nixops-able.

Author

twitter/ylcodes risson
Wael Nasreddine Marc 'risson' Schmitt

Credit

Thanks to #nixos community on Freenode, particularly infinisil, clever and samueldr for helping me learn how to configure my NixOS system and debug it.

The host configuration, the modules and the options are inspired by @dustinlacewell's dotfiles.

The images from the declarative congruence description above are taken from the paper published on Usenet, written by Steve Traugott and Lance Brown.

License

All source code is licensed under the MIT License.

shabka's People

Contributors

kalbasit avatar rissson avatar kdeldycke avatar mathiasbynens avatar wpcarro avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.